Make tooltips more user-friendly and responsive to being in combat. Release Build 12130.

abilityTooltips
sigonasr2 6 days ago
parent 41c3731e91
commit afe958d617
  1. 3
      Adventures in Lestoria/Ability.cpp
  2. 5
      Adventures in Lestoria/Ability.h
  3. 33
      Adventures in Lestoria/AdventuresInLestoria.cpp
  4. 2
      Adventures in Lestoria/Version.h
  5. BIN
      x64/Release/Adventures in Lestoria.exe

@ -49,6 +49,9 @@ PrecastData::PrecastData(float castTime,float range,float size)
InputGroup Ability::DEFAULT;
float Ability::iconMouseoverTime{};
float Ability::alphaMouseoverTime{};
Ability::Ability()
:name("???"),shortName("???"),description("???"),cooldown(0),COOLDOWN_TIME(0),input(&DEFAULT){};
Ability::Ability(std::string name,std::string shortName,std::string description,float cooldownTime,int manaCost,InputGroup*input,std::string icon,Pixel barColor1,Pixel barColor2,PrecastData precastInfo,bool canCancelCast)

@ -85,8 +85,9 @@ struct Ability{
static InputGroup DEFAULT;
const float GetCooldownTime()const;
const bool operator==(const Ability&a)const;
float iconMouseoverTime{};
float alphaMouseoverTime{}; //Goes from 0 to 0.5 which affects the alpha of the tooltip.
static float iconMouseoverTime;
static float alphaMouseoverTime; //Goes from 0 to 0.5 which affects the alpha of the tooltip.
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!
Ability(std::string name,std::string shortName,std::string description,float cooldownTime,int manaCost,InputGroup*input,std::string icon,Pixel barColor1=VERY_DARK_RED,Pixel barColor2=DARK_RED,PrecastData precastInfo={},bool canCancelCast=false);

@ -534,7 +534,7 @@ void AiL::HandleUserInput(float fElapsedTime){
if(GetKey(SCROLL).bPressed)displayHud=!displayHud;
bool setIdleAnimation=true;
bool heldDownMovementKey=false; //Is true when a movement key has been held down.
bool heldDownMovementKey=false;
if(KEY_MENU.Released()){
if(GameState::GetCurrentState()==States::GAME_HUB)Menu::OpenMenu(MenuType::HUB_PAUSE);
@ -2069,6 +2069,9 @@ void AiL::RenderCooldowns(){
player->GetAbility4(),
};
bool mouseHoveredOverSkill{false};
bool heldDownAnyAbilityKey=false;
const auto DrawCooldown=[&](vf2d pos,Ability&a,int loadoutSlot=-1/*Set to 0-2 to get an item slot rendered instead*/){
bool circle=loadoutSlot==-1;
if(a.name!="???"){
@ -2169,16 +2172,16 @@ void AiL::RenderCooldowns(){
DrawShadowStringDecal(iconPos+vf2d{1,12}-shortNameSize/2,a.shortName,shortNameCol,shadowCol,{0.5f,0.75f},{0.5f,0.75f});
#pragma region Mouseover Detection
if(circle&&geom2d::overlaps(geom2d::circle<float>{iconPos,16},GetMousePos())||
!circle&&geom2d::overlaps(geom2d::rect<float>{pos-vf2d{2,2},vf2d{16,16}},GetMousePos())){
a.iconMouseoverTime+=GetElapsedTime();
a.alphaMouseoverTime=std::min(a.alphaMouseoverTime+GetElapsedTime(),0.5f);
}else{
a.iconMouseoverTime=0.f;
a.alphaMouseoverTime=std::max(0.f,a.alphaMouseoverTime-GetElapsedTime());
}
const std::string abilityTooltipText{std::format("{}\n{}",a.GetName(),a.GetDescription())};
drawutil::DrawAbilityTooltipAtMouseCursor(this,abilityTooltipText,util::lerp(0U,255U,a.alphaMouseoverTime/0.5f));
if(!KEY_ATTACK.Held()&&!a.input->Held()){ //Attacking indicates we are busy in combat.
if(circle&&geom2d::overlaps(geom2d::circle<float>{iconPos,12},GetMousePos())||
!circle&&geom2d::overlaps(geom2d::rect<float>{pos,vf2d{24,24}},GetMousePos())){
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));
}
}else heldDownAnyAbilityKey=true;
#pragma endregion
}
};
@ -2201,6 +2204,14 @@ void AiL::RenderCooldowns(){
if(loadoutSlot==2){a=&GetPlayer()->useItem3;}
DrawCooldown({float(ScreenWidth()/2+i*26-12),float(ScreenHeight()-26)},*a,loadoutSlot);
}
if(heldDownAnyAbilityKey){
Ability::iconMouseoverTime=0.f;
Ability::alphaMouseoverTime=0.f;
}else if(!mouseHoveredOverSkill){
Ability::iconMouseoverTime=std::max(0.f,Ability::iconMouseoverTime-GetElapsedTime());
Ability::alphaMouseoverTime=std::max(0.f,Ability::alphaMouseoverTime-GetElapsedTime());
}
}
std::pair<ForegroundWrapper,BackgroundWrapper>AiL::AddEffect(std::unique_ptr<Effect>foreground,std::unique_ptr<Effect> background){

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

Loading…
Cancel
Save