Draw grid ranges for attacks on target select

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 75cc08c316
commit fceb8a9005
  1. BIN
      C++ProjectTemplate
  2. 34
      main.cpp

Binary file not shown.

@ -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));
}
}
}
}
};

Loading…
Cancel
Save