Mana costs and ability short names are now displayed on the HUD.

This commit is contained in:
sigonasr2 2023-09-26 00:32:54 -05:00
parent b80d791578
commit 388cf0ba2d
16 changed files with 93 additions and 47 deletions

View File

@ -10,5 +10,5 @@ PrecastData::PrecastData(float castTime,float range,float size)
}; };
Ability::Ability(){}; Ability::Ability(){};
Ability::Ability(std::string name,float cooldownTime,int manaCost,Pixel barColor1,Pixel barColor2,PrecastData precastInfo,bool canCancelCast) Ability::Ability(std::string name,std::string shortName,float cooldownTime,int manaCost,Pixel barColor1,Pixel barColor2,PrecastData precastInfo,bool canCancelCast)
:name(name),cooldown(0),COOLDOWN_TIME(cooldownTime),manaCost(manaCost),barColor1(barColor1),barColor2(barColor2),precastInfo(precastInfo),canCancelCast(canCancelCast){} :name(name),shortName(shortName),cooldown(0),COOLDOWN_TIME(cooldownTime),manaCost(manaCost),barColor1(barColor1),barColor2(barColor2),precastInfo(precastInfo),canCancelCast(canCancelCast){}

View File

@ -18,6 +18,7 @@ struct PrecastData{
//Abilities are tied to class data which is defined in Class.cpp. //Abilities are tied to class data which is defined in Class.cpp.
struct Ability{ struct Ability{
std::string name=""; std::string name="";
std::string shortName="";
float cooldown=0; float cooldown=0;
float COOLDOWN_TIME=0; float COOLDOWN_TIME=0;
int manaCost=0; int manaCost=0;
@ -26,5 +27,5 @@ struct Ability{
bool canCancelCast=false; bool canCancelCast=false;
std::function<bool(Player*,vf2d)>action=[](Player*,vf2d){return false;}; std::function<bool(Player*,vf2d)>action=[](Player*,vf2d){return false;};
Ability(); Ability();
Ability(std::string name,float cooldownTime,int manaCost,Pixel barColor1=VERY_DARK_RED,Pixel barColor2=DARK_RED,PrecastData precastInfo={},bool canCancelCast=false); Ability(std::string name,std::string shortName,float cooldownTime,int manaCost,Pixel barColor1=VERY_DARK_RED,Pixel barColor2=DARK_RED,PrecastData precastInfo={},bool canCancelCast=false);
}; };

View File

@ -993,42 +993,7 @@ Player*Crawler::GetPlayer(){
} }
void Crawler::RenderHud(){ void Crawler::RenderHud(){
const std::function<std::string(std::string)>capitalize=[](std::string name)->std::string{ RenderCooldowns();
std::string newName="";
for(int i=0;i<name.length();i++){
newName.append(1,name[i]>='a'?name[i]-32:name[i]);
newName.append(1,' ');
}
return newName;
};
std::vector<Ability>cooldowns{
player->GetAbility1(),
player->GetAbility2(),
player->GetAbility3(),
player->GetAbility4(),
};
const auto DrawCooldown=[&](vf2d pos,Ability&a){
if(a.name!="???"){
if(a.cooldown>0.1){
DrawPie(pos+vf2d{12,12},12,360-(a.cooldown/a.COOLDOWN_TIME)*360,PixelLerp(a.barColor1,a.barColor2,(a.cooldown/a.COOLDOWN_TIME)));
std::stringstream cooldownTimeDisplay;
cooldownTimeDisplay<<std::fixed<<std::setprecision(1)<<a.cooldown;
DrawShadowStringPropDecal(pos+vf2d{12,12}-vf2d{float(GetTextSizeProp(cooldownTimeDisplay.str()).x*0.5),float(GetTextSizeProp(cooldownTimeDisplay.str()).y*1)}/2,cooldownTimeDisplay.str(),WHITE,BLACK,{0.5,1});
}
DrawDecal(pos,GFX["skill_overlay_icon.png"].Decal());
}
};
vf2d iconPos={8.f,float(ScreenHeight()-32)};
for(Ability&a:cooldowns){
if(a.name!="???"){
DrawCooldown(iconPos,a);
iconPos+={32,0};
}
}
DrawCooldown({float(ScreenWidth()-32),float(ScreenHeight()-32)},player->GetRightClickAbility());
if(GetPlayer()->GetCastInfo().castTimer>0){ if(GetPlayer()->GetCastInfo().castTimer>0){
FillRectDecal(vf2d{ScreenWidth()/2-92.f,ScreenHeight()-90.f},{184,20},BLACK); FillRectDecal(vf2d{ScreenWidth()/2-92.f,ScreenHeight()-90.f},{184,20},BLACK);
@ -1065,6 +1030,56 @@ void Crawler::RenderHud(){
} }
} }
void Crawler::RenderCooldowns(){
std::vector<Ability>cooldowns{
player->GetAbility1(),
player->GetAbility2(),
player->GetAbility3(),
player->GetAbility4(),
};
const auto DrawCooldown=[&](vf2d pos,Ability&a){
if(a.name!="???"){
if(a.cooldown>0.1){
DrawPie(pos+vf2d{12,12},12,360-(a.cooldown/a.COOLDOWN_TIME)*360,PixelLerp(a.barColor1,a.barColor2,(a.cooldown/a.COOLDOWN_TIME)));
std::stringstream cooldownTimeDisplay;
cooldownTimeDisplay<<std::fixed<<std::setprecision(1)<<a.cooldown;
DrawShadowStringPropDecal(pos+vf2d{12,12}-vf2d{float(GetTextSizeProp(cooldownTimeDisplay.str()).x*0.5),float(GetTextSizeProp(cooldownTimeDisplay.str()).y*1)}/2,cooldownTimeDisplay.str(),WHITE,BLACK,{0.5,1});
}
DrawDecal(pos,GFX["skill_overlay_icon.png"].Decal());
Pixel shortNameCol=BLUE,manaCostShadowCol=DARK_BLUE;
if(player->GetMana()<a.manaCost){
DrawDecal(pos,GFX["skill_overlay_icon_overlay.png"].Decal(),{1,1},DARK_RED);
shortNameCol=RED;
manaCostShadowCol=DARK_RED;
}else
if(a.cooldown>0){
shortNameCol=GREY;
manaCostShadowCol=DARK_GREY;
}
if(a.manaCost>0){
vf2d manaCostSize=vf2d{GetTextSize(std::to_string(a.manaCost))}*vf2d{0.5,0.75};
DrawShadowStringDecal(pos+vf2d{20,4}-manaCostSize/2,std::to_string(a.manaCost),{192,192,255},manaCostShadowCol,{0.5,0.75});
}
vf2d shortNameSize=vf2d{GetTextSize(a.shortName)}*vf2d{0.5,0.75};
DrawShadowStringDecal(pos+vf2d{13,24}-shortNameSize/2,a.shortName,shortNameCol,{255,255,255,64},{0.5,0.75});
}
};
vf2d iconPos={8.f,float(ScreenHeight()-32)};
for(Ability&a:cooldowns){
if(a.name!="???"){
DrawCooldown(iconPos,a);
iconPos+={32,0};
}
}
DrawCooldown({float(ScreenWidth()-32),float(ScreenHeight()-32)},player->GetRightClickAbility());
}
void Crawler::AddEffect(std::unique_ptr<Effect>foreground,std::unique_ptr<Effect> background){ void Crawler::AddEffect(std::unique_ptr<Effect>foreground,std::unique_ptr<Effect> background){
AddEffect(std::move(background),true); AddEffect(std::move(background),true);
AddEffect(std::move(foreground)); AddEffect(std::move(foreground));

View File

@ -113,6 +113,7 @@ public:
bool IsReflectiveTile(TilesheetData tileSheet,int tileID); bool IsReflectiveTile(TilesheetData tileSheet,int tileID);
void SpawnMonster(vf2d pos,MonsterData*data,bool upperLevel=false); //Queues a monster for spawning on the next frame. void SpawnMonster(vf2d pos,MonsterData*data,bool upperLevel=false); //Queues a monster for spawning on the next frame.
void DrawPie(vf2d center,float radius,float degreesCut,Pixel col); void DrawPie(vf2d center,float radius,float degreesCut,Pixel col);
void RenderCooldowns();
struct TileGroupData{ struct TileGroupData{
vi2d tilePos; vi2d tilePos;

View File

@ -42,11 +42,11 @@ std::string&class::GetIdleSAnimation(){return idle_s;}; \
std::string&class::GetIdleWAnimation(){return idle_w;}; \ std::string&class::GetIdleWAnimation(){return idle_w;}; \
std::string class::name=""; \ std::string class::name=""; \
Class class::cl=ANY; \ Class class::cl=ANY; \
Ability class::rightClickAbility=Ability("",0,0); \ Ability class::rightClickAbility=Ability("???","???",0,0); \
Ability class::ability1=Ability("",0,0); \ Ability class::ability1=Ability("???","???",0,0); \
Ability class::ability2=Ability("",0,0); \ Ability class::ability2=Ability("???","???",0,0); \
Ability class::ability3=Ability("",0,0); \ Ability class::ability3=Ability("???","???",0,0); \
Ability class::ability4=Ability("",0,0); \ Ability class::ability4=Ability("???","???",0,0); \
std::string class::idle_n="WARRIOR_IDLE_N"; \ std::string class::idle_n="WARRIOR_IDLE_N"; \
std::string class::idle_e="WARRIOR_IDLE_E"; \ std::string class::idle_e="WARRIOR_IDLE_E"; \
std::string class::idle_s="WARRIOR_IDLE_S"; \ std::string class::idle_s="WARRIOR_IDLE_S"; \

View File

@ -492,7 +492,7 @@ bool Player::CanMove(){
} }
bool Player::CanAct(){ bool Player::CanAct(){
Ability dummyAbility{"Dummy Ability",0,0}; Ability dummyAbility{"Dummy Ability","DUMMY",0,0};
return CanAct(dummyAbility); return CanAct(dummyAbility);
} }

View File

@ -350,6 +350,7 @@ struct Witch:Player{
class::cl=enum; \ class::cl=enum; \
class::rightClickAbility={ \ class::rightClickAbility={ \
#class".Right Click Ability.Name"_S, \ #class".Right Click Ability.Name"_S, \
#class".Right Click Ability.Short Name"_S, \
#class".Right Click Ability.Cooldown"_F, \ #class".Right Click Ability.Cooldown"_F, \
#class".Right Click Ability.Mana Cost"_I, \ #class".Right Click Ability.Mana Cost"_I, \
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 1"_f[3])}, \ {uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 1"_f[3])}, \
@ -359,6 +360,7 @@ struct Witch:Player{
}; \ }; \
class::ability1={ \ class::ability1={ \
#class".Ability 1.Name"_S, \ #class".Ability 1.Name"_S, \
#class".Ability 1.Short Name"_S, \
#class".Ability 1.Cooldown"_F, \ #class".Ability 1.Cooldown"_F, \
#class".Ability 1.Mana Cost"_I, \ #class".Ability 1.Mana Cost"_I, \
{uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 1.Cooldown Bar Color 1"_f[3])}, \ {uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 1.Cooldown Bar Color 1"_f[3])}, \
@ -368,6 +370,7 @@ struct Witch:Player{
}; \ }; \
class::ability2={ \ class::ability2={ \
#class".Ability 2.Name"_S, \ #class".Ability 2.Name"_S, \
#class".Ability 2.Short Name"_S, \
#class".Ability 2.Cooldown"_F, \ #class".Ability 2.Cooldown"_F, \
#class".Ability 2.Mana Cost"_I, \ #class".Ability 2.Mana Cost"_I, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 1"_f[3])}, \ {uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 1"_f[3])}, \
@ -377,6 +380,7 @@ struct Witch:Player{
}; \ }; \
class::ability3={ \ class::ability3={ \
#class".Ability 3.Name"_S, \ #class".Ability 3.Name"_S, \
#class".Ability 3.Short Name"_S, \
#class".Ability 3.Cooldown"_F, \ #class".Ability 3.Cooldown"_F, \
#class".Ability 3.Mana Cost"_I, \ #class".Ability 3.Mana Cost"_I, \
{uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 3.Cooldown Bar Color 1"_f[3])}, \ {uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 3.Cooldown Bar Color 1"_f[3])}, \
@ -384,4 +388,4 @@ struct Witch:Player{
{#class".Ability 3.Precast Time"_F,#class".Ability 3.Casting Range"_I/100.f*24,#class".Ability 3.Casting Size"_I/100.f*24}, \ {#class".Ability 3.Precast Time"_F,#class".Ability 3.Casting Range"_I/100.f*24,#class".Ability 3.Casting Size"_I/100.f*24}, \
bool(#class".Ability 3.CancelCast"_I) \ bool(#class".Ability 3.CancelCast"_I) \
}; \ }; \
class::ability4={"???",0,0}; class::ability4={"???","",0,0};

View File

@ -2,7 +2,7 @@
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 2 #define VERSION_MINOR 2
#define VERSION_PATCH 0 #define VERSION_PATCH 0
#define VERSION_BUILD 1509 #define VERSION_BUILD 1529
#define stringify(a) stringify_(a) #define stringify(a) stringify_(a)
#define stringify_(a) #a #define stringify_(a) #a

View File

@ -16,6 +16,7 @@ Ranger
Right Click Ability Right Click Ability
{ {
Name = Retreat Name = Retreat
Short Name = B.STEP
Cooldown = 7 Cooldown = 7
Mana Cost = 0 Mana Cost = 0
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -37,6 +38,7 @@ Ranger
Ability 1 Ability 1
{ {
Name = Rapid Fire Name = Rapid Fire
Short Name = RAPID
Cooldown = 12 Cooldown = 12
Mana Cost = 35 Mana Cost = 35
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -67,6 +69,7 @@ Ranger
Ability 2 Ability 2
{ {
Name = Charged Shot Name = Charged Shot
Short Name = CHRG.S
Cooldown = 15 Cooldown = 15
Mana Cost = 40 Mana Cost = 40
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -95,6 +98,7 @@ Ranger
Ability 3 Ability 3
{ {
Name = Multishot Name = Multishot
Short Name = MULTI
Cooldown = 25 Cooldown = 25
Mana Cost = 50 Mana Cost = 50
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.

View File

@ -5,6 +5,7 @@ Thief
Right Click Ability Right Click Ability
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 8 Cooldown = 8
Mana Cost = 5 Mana Cost = 5
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -21,6 +22,7 @@ Thief
Ability 1 Ability 1
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 6 Cooldown = 6
Mana Cost = 30 Mana Cost = 30
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -37,6 +39,7 @@ Thief
Ability 2 Ability 2
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 6 Cooldown = 6
Mana Cost = 25 Mana Cost = 25
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -53,6 +56,7 @@ Thief
Ability 3 Ability 3
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 40 Cooldown = 40
Mana Cost = 75 Mana Cost = 75
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.

View File

@ -5,6 +5,7 @@ Trapper
Right Click Ability Right Click Ability
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 8 Cooldown = 8
Mana Cost = 5 Mana Cost = 5
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -21,6 +22,7 @@ Trapper
Ability 1 Ability 1
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 6 Cooldown = 6
Mana Cost = 30 Mana Cost = 30
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -37,6 +39,7 @@ Trapper
Ability 2 Ability 2
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 6 Cooldown = 6
Mana Cost = 25 Mana Cost = 25
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -53,6 +56,7 @@ Trapper
Ability 3 Ability 3
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 40 Cooldown = 40
Mana Cost = 75 Mana Cost = 75
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.

View File

@ -15,6 +15,7 @@ Warrior
Right Click Ability Right Click Ability
{ {
Name = Block Name = Block
Short Name = BLOCK
Cooldown = 15 Cooldown = 15
Mana Cost = 0 Mana Cost = 0
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -39,6 +40,7 @@ Warrior
Ability 1 Ability 1
{ {
Name = Battlecry Name = Battlecry
Short Name = B.CRY
Cooldown = 12 Cooldown = 12
Mana Cost = 40 Mana Cost = 40
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -83,6 +85,7 @@ Warrior
Ability 2 Ability 2
{ {
Name = Ground Slam Name = Ground Slam
Short Name = SLAM
Cooldown = 15 Cooldown = 15
Mana Cost = 50 Mana Cost = 50
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -113,6 +116,7 @@ Warrior
Ability 3 Ability 3
{ {
Name = Sonic Slash Name = Sonic Slash
Short Name = S.SLASH
Cooldown = 40 Cooldown = 40
Mana Cost = 60 Mana Cost = 60
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.

View File

@ -5,6 +5,7 @@ Witch
Right Click Ability Right Click Ability
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 8 Cooldown = 8
Mana Cost = 5 Mana Cost = 5
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -21,6 +22,7 @@ Witch
Ability 1 Ability 1
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 6 Cooldown = 6
Mana Cost = 30 Mana Cost = 30
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -37,6 +39,7 @@ Witch
Ability 2 Ability 2
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 6 Cooldown = 6
Mana Cost = 25 Mana Cost = 25
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -53,6 +56,7 @@ Witch
Ability 3 Ability 3
{ {
Name = ??? Name = ???
Short Name = ???
Cooldown = 40 Cooldown = 40
Mana Cost = 75 Mana Cost = 75
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.

View File

@ -28,6 +28,7 @@ Wizard
Right Click Ability Right Click Ability
{ {
Name = Teleport Name = Teleport
Short Name = TELE
Cooldown = 8 Cooldown = 8
Mana Cost = 5 Mana Cost = 5
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -66,6 +67,7 @@ Wizard
Ability 1 Ability 1
{ {
Name = Firebolt Name = Firebolt
Short Name = F.BOLT
Cooldown = 6 Cooldown = 6
Mana Cost = 30 Mana Cost = 30
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -130,6 +132,7 @@ Wizard
Ability 2 Ability 2
{ {
Name = Lightning Bolt Name = Lightning Bolt
Short Name = L.BOLT
Cooldown = 6 Cooldown = 6
Mana Cost = 25 Mana Cost = 25
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.
@ -184,6 +187,7 @@ Wizard
Ability 3 Ability 3
{ {
Name = Meteor Name = Meteor
Short Name = METEOR
Cooldown = 40 Cooldown = 40
Mana Cost = 75 Mana Cost = 75
# Whether or not this ability cancels casts. # Whether or not this ability cancels casts.

View File

@ -37,4 +37,5 @@ Images
GFX_Wizard_Sheet = nico-wizard.png GFX_Wizard_Sheet = nico-wizard.png
GFX_SlimeKing_Cast = monsters/Slime King - Cast.png GFX_SlimeKing_Cast = monsters/Slime King - Cast.png
GFX_SkillOverlayIcon = skill_overlay_icon.png GFX_SkillOverlayIcon = skill_overlay_icon.png
GFX_SkillOverlayIconOverlay = skill_overlay_icon_overlay.png
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB