Display target ring and target selection

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent c477fe0729
commit 4da99d3a97
  1. 80
      SeasonsOfLoneliness.cpp
  2. BIN
      Seasons_of_Loneliness
  3. BIN
      assets/targetCircle.png
  4. BIN
      assets/targetRange.png

@ -29,6 +29,7 @@ namespace battle{
NONE,
WAITING_FOR_CAMERA,
PLAYER_SELECTION,
PLAYER_TARGET_SELECTION,
ENEMY_SELECTION,
MOVE_RESOLUTION,
PERFORM_TURN,
@ -225,12 +226,13 @@ public:
std::vector<WEATHER_POWER*> availablePowers;
WEATHER_POWER*BATTLE_CARD_SELECTION=HAILSTORM;
int BATTLE_CARD_SELECTION_IND=0;
int PLAYER_SELECTED_TARGET=-1;
Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL,*PLANT_DECAL,
*PLAYER_DECAL,
*WEATHERNODE_EFFECT_DECAL,*POWER_HAILSTORM_DECAL,*POWER_HURRICANE_DECAL,*POWER_METEOR_SHOWER_DECAL,*POWER_METEOR_STORM_DECAL,*POWER_SNOWSTORM_DECAL,
*SPIDEY_DECAL;
*SPIDEY_DECAL,*TARGETING_CIRCLE,*TARGETING_RANGE_CIRCLE;
std::map<std::string,ObjectLoadInfo*> BASE_OBJECTS;
std::vector<Encounter> ENCOUNTERS;
Encounter ENCOUNTER_SPIDEY_1;
@ -255,6 +257,8 @@ public:
POWER_METEOR_STORM_DECAL=new Decal(new Sprite("assets/meteor_storm.png"));
POWER_SNOWSTORM_DECAL=new Decal(new Sprite("assets/snowstorm_icon.png"));
SPIDEY_DECAL=new Decal(new Sprite("assets/spidey.png"));
TARGETING_CIRCLE=new Decal(new Sprite("assets/targetCircle.png"));
TARGETING_RANGE_CIRCLE=new Decal(new Sprite("assets/targetRange.png"));
current_playerAnim.spr=PLAYER_DECAL;
playerAnim.spr=PLAYER_DECAL;
@ -380,6 +384,20 @@ public:
}
}break;
}
switch (BATTLE_STATE) {
case battle::PLAYER_SELECTION:{
BATTLE_STATE=battle::PLAYER_TARGET_SELECTION;
if (PLAYER_SELECTED_TARGET==-1||CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].hp<=0) {
for (int i=0;i<CURRENT_ENCOUNTER.entities.size();i++) {
Entity ent = CURRENT_ENCOUNTER.entities[i];
if (!ent.ally&&ent.hp>0) {
PLAYER_SELECTED_TARGET=i;
break;
}
}
}
}break;
}
}
bool OnUserUpdate(float fElapsedTime) override
@ -437,6 +455,26 @@ public:
BATTLE_CARD_SELECTION=availablePowers[BATTLE_CARD_SELECTION_IND];
}
}break;
case battle::PLAYER_TARGET_SELECTION:{
if (GetKey(D).bPressed||GetKey(RIGHT).bPressed||GetKey(NP6).bPressed||GetKey(W).bReleased||GetKey(UP).bReleased||GetKey(NP8).bReleased) {
while (true) {
PLAYER_SELECTED_TARGET=(PLAYER_SELECTED_TARGET+1)%CURRENT_ENCOUNTER.entities.size();
if (CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].hp>0) {
break;
}
}
}
if (GetKey(A).bPressed||GetKey(LEFT).bPressed||GetKey(NP4).bPressed||GetKey(S).bReleased||GetKey(DOWN).bReleased||GetKey(NP5).bReleased||GetKey(NP2).bReleased) {
while (true) {
if (--PLAYER_SELECTED_TARGET<0) {
PLAYER_SELECTED_TARGET=CURRENT_ENCOUNTER.entities.size()-1;
}
if (CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].hp>0) {
break;
}
}
}
}break;
}
}
drawGame();
@ -623,6 +661,7 @@ public:
}
BATTLE_CARD_SELECTION_IND=0;
BATTLE_CARD_SELECTION=availablePowers[BATTLE_CARD_SELECTION_IND];
PLAYER_SELECTED_TARGET=-1;
}
}
}
@ -841,6 +880,12 @@ public:
DrawCard(availablePowers[(BATTLE_CARD_SELECTION_IND-1<0)?availablePowers.size()-1:BATTLE_CARD_SELECTION_IND-1],{-96,32},{0.7,0.7},0.4);
DrawCard(BATTLE_CARD_SELECTION);
}break;
case battle::PLAYER_TARGET_SELECTION:{
if (PLAYER_SELECTED_TARGET>=0) {
DrawWrappedText({5,5},"Target "+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].name+" "+(char)('A'+PLAYER_SELECTED_TARGET)+" with "+BATTLE_CARD_SELECTION->name,WIDTH-8,BLACK,{2,2});
DrawWrappedText({4,4},"Target "+CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].name+" "+(char)('A'+PLAYER_SELECTED_TARGET)+" with "+BATTLE_CARD_SELECTION->name,WIDTH-8,WHITE,{2,2});
}
}break;
}
if (messageBoxVisible) {
DrawDialogBox({4,HEIGHT-60},{WIDTH/2,16},Pixel(18, 0, 33,180));
@ -895,8 +940,18 @@ public:
}
}
for (auto&enc:ENCOUNTERS) {
int targetX=-1,targetY=-1;
for (auto&ent:enc.entities) {
DrawDecal({(enc.x+ent.x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent.y-PLAYER_COORDS[1])*32+HEIGHT/2},ent.spr);
if (PLAYER_SELECTED_TARGET>=0&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].hp>0&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].x==ent.x&&CURRENT_ENCOUNTER.entities[PLAYER_SELECTED_TARGET].y==ent.y) {
DrawDecal({(enc.x+ent.x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent.y-PLAYER_COORDS[1])*32+HEIGHT/2},TARGETING_CIRCLE,{ent.spr->sprite->width/32,ent.spr->sprite->height/32},{255,210,0,255});
DrawDecal({(enc.x+ent.x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent.y-PLAYER_COORDS[1])*32+HEIGHT/2},ent.spr,{1,1},{(0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175,(0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175,(0.5*(float)sin(frameCount*4/60.0)+0.5)*80+175,255});
targetX=ent.x;targetY=ent.y;
} else {
DrawDecal({(enc.x+ent.x-PLAYER_COORDS[0])*32+WIDTH/2,(enc.y+ent.y-PLAYER_COORDS[1])*32+HEIGHT/2},ent.spr);
}
}
if (targetX!=-1&&targetY!=-1) {
DrawDecal({(enc.x+targetX-PLAYER_COORDS[0])*32+WIDTH/2-BATTLE_CARD_SELECTION->range+16,(enc.y+targetY-PLAYER_COORDS[1])*32+HEIGHT/2-BATTLE_CARD_SELECTION->range+16},TARGETING_RANGE_CIRCLE,{BATTLE_CARD_SELECTION->range*2/32.0,BATTLE_CARD_SELECTION->range*2/32.0},{255,60,0,(0.5*(float)sin(frameCount*4/60.0)+0.5)*100});
}
}
}
@ -1040,6 +1095,27 @@ public:
PLAYER_COORDS[1]>=obj.y&&PLAYER_COORDS[1]<=obj.y+HEIGHT/32;
}
void DrawWrappedText(vf2d pos,std::string text,int targetWidth,Pixel col,vf2d scale) {
std::string wrappedText;
int marker=0;
while (marker<text.length()) {
wrappedText+=text[marker];
if (GetTextSize(wrappedText).x*scale.x>targetWidth) {
int tempMarker=marker;
while (wrappedText[tempMarker]!=' ') {
wrappedText.erase(tempMarker--);
}
wrappedText.erase(tempMarker++);
wrappedText+='\n';
while (tempMarker<marker+1) {
wrappedText+=text[tempMarker++];
}
}
marker++;
}
DrawStringDecal(pos,wrappedText,col,scale);
}
void DrawWrappedPropText(vf2d pos,std::string text,int targetWidth,Pixel col,vf2d scale) {
std::string wrappedText;
int marker=0;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 776 B

Loading…
Cancel
Save