|
|
|
@ -568,7 +568,17 @@ std::string InputGroup::GetDisplayName(){ |
|
|
|
|
|
|
|
|
|
void InputGroup::DrawInput(const std::variant<AiL*const,TileTransformedView*const,ViewPort*const>renderer,const vf2d pos,const std::string_view displayText,const uint8_t alpha,InputType type,vf2d textScale)const{ |
|
|
|
|
std::vector<Input>displayKeys; |
|
|
|
|
|
|
|
|
|
auto OriginalGameIcon=[](std::optional<Input>input)->bool{ |
|
|
|
|
if(input.has_value()){ |
|
|
|
|
EInputActionOrigin action=Input::steamGameInputToOrigin.at(Steam::SteamInput(input.value().key)).second[0]; |
|
|
|
|
return Input::steamIconToGameIcon.count(action); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
switch(type){ |
|
|
|
|
case STEAM:std::copy_if(keys.begin(),keys.end(),std::back_inserter(displayKeys),[](const Input&input){return input.GetType()==STEAM;});break; |
|
|
|
|
case CONTROLLER:std::copy_if(keys.begin(),keys.end(),std::back_inserter(displayKeys),[](const Input&input){return input.GetType()==CONTROLLER;});break; |
|
|
|
|
case MOUSE:std::copy_if(keys.begin(),keys.end(),std::back_inserter(displayKeys),[](const Input&input){return input.GetType()==KEY||input.GetType()==MOUSE;});break; |
|
|
|
|
default:std::copy_if(keys.begin(),keys.end(),std::back_inserter(displayKeys),[](const Input&input){return input.GetType()==KEY||input.GetType()==MOUSE;});break; |
|
|
|
@ -584,8 +594,14 @@ void InputGroup::DrawInput(const std::variant<AiL*const,TileTransformedView*cons |
|
|
|
|
buttonImgs.push_back(input.GetIcon(GameSettings::GetIconType()).Decal()); |
|
|
|
|
}else |
|
|
|
|
if(input.HasIcon()){ |
|
|
|
|
buttonImgSize.x+=input.GetIcon().Sprite()->width*textScale.x+"Interface.InputHelperSpacing"_F; |
|
|
|
|
buttonImgSize.y=std::max(buttonImgSize.y,float(input.GetIcon().Sprite()->height)); |
|
|
|
|
float alteredIconScale=1.f; |
|
|
|
|
|
|
|
|
|
if(type==STEAM&&!OriginalGameIcon(input)){ |
|
|
|
|
alteredIconScale/=2.85f; //They are initially 32x32.
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
buttonImgSize.x+=input.GetIcon().Sprite()->width*alteredIconScale*textScale.x+"Interface.InputHelperSpacing"_F; |
|
|
|
|
buttonImgSize.y=std::max(buttonImgSize.y,float(input.GetIcon().Sprite()->height*alteredIconScale)); |
|
|
|
|
buttonImgs.push_back(input.GetIcon().Decal()); |
|
|
|
|
}else{ |
|
|
|
|
buttonImgSize.x+=game->GetTextSizeProp(input.GetDisplayName()).x*textScale.x+"Interface.InputHelperSpacing"_F; |
|
|
|
@ -596,10 +612,11 @@ void InputGroup::DrawInput(const std::variant<AiL*const,TileTransformedView*cons |
|
|
|
|
|
|
|
|
|
vf2d descriptionTextSize=game->GetTextSizeProp(displayText); |
|
|
|
|
vf2d offset=-((buttonImgSize+descriptionTextSize)/2.f); |
|
|
|
|
for(auto&button:buttonImgs){ |
|
|
|
|
for(size_t index=0;auto&button:buttonImgs){ |
|
|
|
|
if(std::holds_alternative<Decal*>(button)){ |
|
|
|
|
Decal*img=std::get<Decal*>(button); |
|
|
|
|
|
|
|
|
|
float alteredIconScale=1.f; |
|
|
|
|
if(type==STEAM&&!OriginalGameIcon(displayKeys[index]))alteredIconScale/=2.85f; /*They are initially 32x32.*/ |
|
|
|
|
#pragma region Render Macro |
|
|
|
|
#define Render(rendererType) \ |
|
|
|
|
std::get<rendererType*const>(renderer)->DrawDecal(pos+offset-vf2d{0.f,2.f},img,textScale,{255,255,255,alpha}); |
|
|
|
@ -613,7 +630,7 @@ void InputGroup::DrawInput(const std::variant<AiL*const,TileTransformedView*cons |
|
|
|
|
if(std::holds_alternative<ViewPort*const>(renderer)){ |
|
|
|
|
Render(ViewPort); |
|
|
|
|
}else ERR("Could not find proper renderer for rendering Inputs!"); |
|
|
|
|
offset.x+=img->sprite->width*textScale.x+"Interface.InputHelperSpacing"_I; |
|
|
|
|
offset.x+=img->sprite->width*alteredIconScale*textScale.x+"Interface.InputHelperSpacing"_I; |
|
|
|
|
}else |
|
|
|
|
if(std::holds_alternative<std::string>(button)){ |
|
|
|
|
std::string label=std::get<std::string>(button); |
|
|
|
@ -642,6 +659,7 @@ void InputGroup::DrawInput(const std::variant<AiL*const,TileTransformedView*cons |
|
|
|
|
}else ERR("Could not find proper renderer for rendering Inputs!"); |
|
|
|
|
offset.x+=textSize.x+"Interface.InputHelperSpacing"_I; |
|
|
|
|
}else [[unlikely]]ERR("WARNING! Hit a state where no data is inside of the button! THIS SHOULD NOT BE HAPPENING!"); |
|
|
|
|
index++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#pragma region Render Display Text |
|
|
|
@ -739,12 +757,10 @@ void InputGroup::DrawPrimaryInput(const std::variant<AiL*const,TileTransformedVi |
|
|
|
|
for(auto&button:buttonImgs){ |
|
|
|
|
if(std::holds_alternative<Decal*>(button)){ |
|
|
|
|
Decal*img=std::get<Decal*>(button); |
|
|
|
|
|
|
|
|
|
float alteredIconScale=1.f; |
|
|
|
|
if(type==STEAM&&!OriginalGameIcon(primaryKey))alteredIconScale/=2.85f; /*They are initially 32x32.*/ |
|
|
|
|
#pragma region Render Macro |
|
|
|
|
#define Render(rendererType) \ |
|
|
|
|
float alteredIconScale=1.f; \
|
|
|
|
|
\
|
|
|
|
|
if(type==STEAM&&!OriginalGameIcon(primaryKey))alteredIconScale/=2.85f; /*They are initially 32x32.*/ \
|
|
|
|
|
std::get<rendererType*const>(renderer)->DrawDecal(pos+offset-vf2d{0.f,2.f},img,alteredIconScale*textScale,{255,255,255,alpha}); |
|
|
|
|
#pragma endregion |
|
|
|
|
if(std::holds_alternative<AiL*const>(renderer)){ |
|
|
|
@ -756,7 +772,7 @@ void InputGroup::DrawPrimaryInput(const std::variant<AiL*const,TileTransformedVi |
|
|
|
|
if(std::holds_alternative<ViewPort*const>(renderer)){ |
|
|
|
|
Render(ViewPort); |
|
|
|
|
}else ERR("Could not find proper renderer for rendering Inputs!"); |
|
|
|
|
offset.x+=img->sprite->width*textScale.x+"Interface.InputHelperSpacing"_I; |
|
|
|
|
offset.x+=img->sprite->width*alteredIconScale*textScale.x+"Interface.InputHelperSpacing"_I; |
|
|
|
|
}else |
|
|
|
|
if(std::holds_alternative<std::string>(button)){ |
|
|
|
|
std::string label=std::get<std::string>(button); |
|
|
|
|