|
|
|
@ -161,6 +161,9 @@ class Object{ |
|
|
|
|
void SetPos(vd2d pos) { |
|
|
|
|
Move(pos-this->pos); |
|
|
|
|
} |
|
|
|
|
vd2d GetPosWithOrigin() { |
|
|
|
|
return GetPos()+originPoint; |
|
|
|
|
} |
|
|
|
|
bool SmoothMove(vd2d move) { |
|
|
|
|
const int wiggleRoom=5; |
|
|
|
|
vd2d originPos = {pos.x+originPoint.x,pos.y-1+originPoint.y}; |
|
|
|
@ -1421,11 +1424,15 @@ goes on a very long time, I hope you can understand this is only for testing pur |
|
|
|
|
if (BATTLE_STATE==BattleState::TARGET_SELECT) { |
|
|
|
|
SetDrawTarget(layer::GROUND); |
|
|
|
|
if (SELECTED_TARGET<0) { |
|
|
|
|
DrawDecal(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->GetPos()-cameraPos,SPRITES["targetCircle.png"],{PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height},GREEN); |
|
|
|
|
vd2d scale = {PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height}; |
|
|
|
|
vi2d size = {SPRITES["targetCircle.png"]->sprite->width,SPRITES["targetCircle.png"]->sprite->height}; |
|
|
|
|
DrawDecal(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->GetPosWithOrigin()-cameraPos-size/2*scale,SPRITES["targetCircle.png"],{PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height},GREEN); |
|
|
|
|
DrawTargetRangeGrid(PARTY_MEMBER_OBJ[-SELECTED_TARGET-1]->GetPosWithOrigin(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->range); |
|
|
|
|
} else { |
|
|
|
|
vd2d scale = {BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->spr->width/(double)SPRITES["targetCircle.png"]->sprite->width,BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->spr->spr->sprite->height/(double)SPRITES["targetCircle.png"]->sprite->height}; |
|
|
|
|
vi2d size = {SPRITES["targetCircle.png"]->sprite->width,SPRITES["targetCircle.png"]->sprite->height}; |
|
|
|
|
DrawDecal(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPos()+BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->originPoint-cameraPos-size/2*scale,SPRITES["targetCircle.png"],scale,YELLOW); |
|
|
|
|
DrawDecal(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPosWithOrigin()-cameraPos-size/2*scale,SPRITES["targetCircle.png"],scale,YELLOW); |
|
|
|
|
DrawTargetRangeGrid(BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->obj->GetPosWithOrigin(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->range); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (BATTLE_STATE==BattleState::WAIT_ANIMATION) { |
|
|
|
@ -2839,7 +2846,7 @@ goes on a very long time, I hope you can understand this is only for testing pur |
|
|
|
|
+BATTLE_ENCOUNTER->objs[CURRENT_TURN]->baseAtk; |
|
|
|
|
for (auto&ent:GetEntitiesInRange(BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget,BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove)) { |
|
|
|
|
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << ent->obj->name << " dealing " << dmgAmt << " health.\n"; |
|
|
|
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]]->SubtractHP(dmgAmt); |
|
|
|
|
ent->SubtractHP(dmgAmt); |
|
|
|
|
if (ent->GetTargetHP()<0) { |
|
|
|
|
BATTLE_HIT_SCREENSHAKE=75; |
|
|
|
|
} else { |
|
|
|
@ -3047,7 +3054,7 @@ goes on a very long time, I hope you can understand this is only for testing pur |
|
|
|
|
if (targetEnt<0) { |
|
|
|
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) { |
|
|
|
|
//See if this target is also in range.
|
|
|
|
|
vi2d diff=(vi2d)PARTY_MEMBER_OBJ[i]->GetPos()/32-(vi2d)PARTY_MEMBER_OBJ[-targetEnt-1]->GetPos()/32; |
|
|
|
|
vi2d diff=(vi2d)PARTY_MEMBER_OBJ[i]->GetPosWithOrigin()/32-(vi2d)PARTY_MEMBER_OBJ[-targetEnt-1]->GetPosWithOrigin()/32; |
|
|
|
|
if (abs(diff.x)+abs(diff.y)<=move->range-1) { |
|
|
|
|
ents.push_back(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]); |
|
|
|
|
} |
|
|
|
@ -3055,7 +3062,7 @@ goes on a very long time, I hope you can understand this is only for testing pur |
|
|
|
|
} else { |
|
|
|
|
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) { |
|
|
|
|
//See if this target is also in range.
|
|
|
|
|
vi2d diff=(vi2d)BATTLE_ENCOUNTER->objs[i]->obj->GetPos()/32-(vi2d)BATTLE_ENCOUNTER->objs[targetEnt]->obj->GetPos()/32; |
|
|
|
|
vi2d diff=(vi2d)BATTLE_ENCOUNTER->objs[i]->obj->GetPosWithOrigin()/32-(vi2d)BATTLE_ENCOUNTER->objs[targetEnt]->obj->GetPosWithOrigin()/32; |
|
|
|
|
if (abs(diff.x)+abs(diff.y)<=move->range-1) { |
|
|
|
|
ents.push_back(BATTLE_ENCOUNTER->objs[i]); |
|
|
|
|
} |
|
|
|
@ -3063,6 +3070,23 @@ goes on a very long time, I hope you can understand this is only for testing pur |
|
|
|
|
} |
|
|
|
|
return ents; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DrawTargetRangeGrid(vd2d pos,int range) { |
|
|
|
|
vi2d gridCenter = (vi2d)pos/32*32; |
|
|
|
|
for (int x=-range+1;x<range;x++) { |
|
|
|
|
for (int y=-range+1;y<range;y++) { |
|
|
|
|
int dist = abs(x)+abs(y); |
|
|
|
|
if (dist<range) { |
|
|
|
|
vi2d offset = {x,y}; |
|
|
|
|
//FillRectDecal(gridCenter-cameraPos+offset*32,{32,32},Pixel(255,255,0,128));
|
|
|
|
|
GradientFillRectDecal(gridCenter-cameraPos+offset*32,{32,32},Pixel(0,161,255,abs(sin(M_PI/240*frameCount)*32)),Pixel(139,234,255,abs(sin(M_PI/240*frameCount)*64)),Pixel(0,161,255,abs(sin(M_PI/240*frameCount)*32)),Pixel(139,234,255,abs(sin(M_PI/240*frameCount)*64))); |
|
|
|
|
DrawRectDecal(gridCenter-cameraPos+offset*32,{32,32},Pixel(abs(cos(M_PI/240*frameCount)*128),200,0,255)); |
|
|
|
|
const vi2d outlineOffset = {1,1}; |
|
|
|
|
DrawRectDecal(gridCenter-cameraPos+offset*32+outlineOffset,{30,30},Pixel(abs(cos(M_PI/240*frameCount)*128),200,0,255)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|