Added coloring to the title ability tooltip text for more flavor. Made entire ability tooltip global state. Ready for merge. Release Build 12137.

abilityTooltips
sigonasr2 2 weeks ago
parent afe958d617
commit 5664ee327c
  1. 3
      Adventures in Lestoria/Ability.cpp
  2. 3
      Adventures in Lestoria/Ability.h
  3. 14
      Adventures in Lestoria/AdventuresInLestoria.cpp
  4. 2
      Adventures in Lestoria/Version.h
  5. 11
      Adventures in Lestoria/drawutil.cpp
  6. 2
      Adventures in Lestoria/drawutil.h
  7. BIN
      x64/Release/Adventures in Lestoria.exe

@ -51,6 +51,9 @@ InputGroup Ability::DEFAULT;
float Ability::iconMouseoverTime{};
float Ability::alphaMouseoverTime{};
std::string Ability::tooltipText{""};
std::string Ability::tooltipTitle{""};
Pixel Ability::tooltipTitleCol{};
Ability::Ability()
:name("???"),shortName("???"),description("???"),cooldown(0),COOLDOWN_TIME(0),input(&DEFAULT){};

@ -87,6 +87,9 @@ struct Ability{
const bool operator==(const Ability&a)const;
static float iconMouseoverTime;
static float alphaMouseoverTime; //Goes from 0 to 0.5 which affects the alpha of the tooltip.
static std::string tooltipText;
static std::string tooltipTitle;
static Pixel tooltipTitleCol;
constexpr static float MAX_DESCRIPTION_HOVER_TIME{0.3f};
Ability();
//NOTE: icon expects the actual name relative to the "Ability Icons" directory for this constructor!

@ -2178,8 +2178,13 @@ void AiL::RenderCooldowns(){
Ability::iconMouseoverTime=std::min(Ability::iconMouseoverTime+GetElapsedTime(),1.5f);
mouseHoveredOverSkill=true;
if(Ability::iconMouseoverTime>=1.5f)Ability::alphaMouseoverTime=std::min(Ability::alphaMouseoverTime+GetElapsedTime(),Ability::MAX_DESCRIPTION_HOVER_TIME);
const std::string abilityTooltipText{std::format("{}\n{}",a.GetName(),a.GetDescription())};
drawutil::DrawAbilityTooltipAtMouseCursor(this,abilityTooltipText,util::lerp(0U,255U,Ability::alphaMouseoverTime/Ability::MAX_DESCRIPTION_HOVER_TIME));
Pixel abilityTitleCol{0x00FF51};
if(HasEnchantWithAbilityAffected)abilityTitleCol=Pixel{0xFFCD00};
if(a.itemAbility)abilityTitleCol=Pixel{0xA2FF00};
Ability::tooltipTitleCol=abilityTitleCol;
Ability::tooltipTitle=std::format("{}",a.GetName());
Ability::tooltipText=std::format("{}",a.GetDescription());
}
}else heldDownAnyAbilityKey=true;
#pragma endregion
@ -2212,6 +2217,9 @@ void AiL::RenderCooldowns(){
Ability::iconMouseoverTime=std::max(0.f,Ability::iconMouseoverTime-GetElapsedTime());
Ability::alphaMouseoverTime=std::max(0.f,Ability::alphaMouseoverTime-GetElapsedTime());
}
drawutil::DrawAbilityTooltipAtMouseCursor(this);
}
std::pair<ForegroundWrapper,BackgroundWrapper>AiL::AddEffect(std::unique_ptr<Effect>foreground,std::unique_ptr<Effect> background){
@ -3930,7 +3938,7 @@ void AiL::SetLoadoutItem(int slot,std::string itemName){
inputGroup=&Player::KEY_ITEM3;
}break;
}
Ability itemAbility{itemName,"","","Item.Item Cooldown Time"_F,0,inputGroup,"items/"+itemName+".png",VERY_DARK_RED,DARK_RED,PrecastData{GetLoadoutItem(slot).lock()->CastTime(),GetLoadoutItem(slot).lock()->CastRange(),GetLoadoutItem(slot).lock()->CastSize()},true};
Ability itemAbility{itemName,"",GetLoadoutItem(slot).lock()->Description(),"Item.Item Cooldown Time"_F,0,inputGroup,"items/"+itemName+".png",VERY_DARK_RED,DARK_RED,PrecastData{GetLoadoutItem(slot).lock()->CastTime(),GetLoadoutItem(slot).lock()->CastRange(),GetLoadoutItem(slot).lock()->CastSize()},true};
itemAbility.actionPerformedDuringCast=GetLoadoutItem(slot).lock()->UseDuringCast();
itemAbility.itemAbility=true;

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_PATCH 0
#define VERSION_BUILD 12130
#define VERSION_BUILD 12137
#define stringify(a) stringify_(a)
#define stringify_(a) #a

@ -207,17 +207,22 @@ void drawutil::DrawCrosshairDecalViewPort(olc::ViewPort&window,geom2d::rect<floa
window.FillRectDecal(pos,size,RED);
}
void drawutil::DrawAbilityTooltipAtMouseCursor(AiL*game,const std::string_view tooltipText,const uint8_t alpha){
void drawutil::DrawAbilityTooltipAtMouseCursor(AiL*game){
constexpr int ABILITY_TOOLTIP_WIDTH{200};
const uint8_t alpha{util::lerp(uint8_t(0),uint8_t(255),Ability::alphaMouseoverTime/Ability::MAX_DESCRIPTION_HOVER_TIME)};
const float alphaMult{alpha/255.f};
const Pixel topColor{0,0,0,uint8_t(192*alphaMult)};
const Pixel bottomColor{0,0,0,uint8_t(164*alphaMult)};
const vf2d abilityTooltipSize{game->GetWrappedTextSizeProp(tooltipText,ABILITY_TOOLTIP_WIDTH)+vi2d{6,6}}; //Add 3 pixel padding to the edges of the tooltip.
const vf2d abilityTooltipSize{game->GetWrappedTextSizeProp(std::format("{}\n\n{}",Ability::tooltipTitle,Ability::tooltipText),ABILITY_TOOLTIP_WIDTH)+vi2d{6,6}}; //Add 3 pixel padding to the edges of the tooltip.
const vf2d abilityTitleSize{game->GetWrappedTextSizeProp(std::format("{}\n",Ability::tooltipTitle),ABILITY_TOOLTIP_WIDTH)}; //Just the title, because we need to position the description below it.
geom2d::rect<float>tooltipRect{game->GetMousePos()-vf2d{abilityTooltipSize.x/2,abilityTooltipSize.y},abilityTooltipSize}; //We will attempt to center it horizontally and bottom-align it to the cursor.
tooltipRect.pos.x=std::clamp(tooltipRect.pos.x,1.f,WINDOW_SIZE.x-tooltipRect.size.x-1); //It's possible the tooltip goes off-screen along the x-axis, clamp it to edges by a 1-pixel border.
game->GradientFillRectDecal(tooltipRect.pos,tooltipRect.size,topColor,bottomColor,bottomColor,topColor);
game->DrawShadowStringPropDecal(tooltipRect.pos+vf2d{2.f,2.f},tooltipText,{255,255,255,uint8_t(255*alphaMult)},{32,32,32,uint8_t(255*alphaMult)},{1.f,1.f},{1.f,1.f},tooltipRect.size.x-4.f);
Pixel tooltipTitleCol{Ability::tooltipTitleCol};
tooltipTitleCol.a=alpha;
game->DrawShadowStringPropDecal(tooltipRect.pos+vf2d{2.f,2.f},Ability::tooltipTitle,tooltipTitleCol,{32,32,32,uint8_t(255*alphaMult)},{1.f,1.f},{1.f,1.f},tooltipRect.size.x-4.f);
game->DrawShadowStringPropDecal(tooltipRect.pos+vf2d{2.f,2.f+abilityTitleSize.y},Ability::tooltipText,{255,255,255,uint8_t(255*alphaMult)},{32,32,32,uint8_t(255*alphaMult)},{1.f,1.f},{1.f,1.f},tooltipRect.size.x-4.f);
game->DrawRectDecal(tooltipRect.pos+vf2d{1.f,1.f},tooltipRect.size-vf2d{2.f,2.f},{220,220,220,uint8_t(255*alphaMult)});
}

@ -48,5 +48,5 @@ namespace drawutil{
void DrawCrosshairDecal(AiL*game,geom2d::rect<float>rect,float accTime,float pulsatingAmt=2,float borderThickness=4);
void DrawCrosshairDecalTransformedView(TransformedView&view,geom2d::rect<float>rect,float accTime,float pulsatingAmt=2,float borderThickness=4);
void DrawCrosshairDecalViewPort(ViewPort&window,geom2d::rect<float>rect,float accTime,float pulsatingAmt=2,float borderThickness=4);
void DrawAbilityTooltipAtMouseCursor(AiL*game,const std::string_view tooltipText,const uint8_t alpha);
void DrawAbilityTooltipAtMouseCursor(AiL*game);
}
Loading…
Cancel
Save