mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 01:58:19 +00:00
add cl_show_jumps_indicator option
This commit is contained in:
parent
f28b71d5cc
commit
781f2e7b57
|
@ -318,7 +318,8 @@ MACRO_CONFIG_INT(ClRaceSaveGhost, cl_race_save_ghost, 1, 0, 1, CFGFLAG_CLIENT |
|
|||
|
||||
MACRO_CONFIG_INT(ClDDRaceHud, cl_ddrace_hud, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Enable DDRace HUD")
|
||||
MACRO_CONFIG_INT(ClDDRaceScoreBoard, cl_ddrace_scoreboard, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Enable DDRace Scoreboard")
|
||||
MACRO_CONFIG_INT(ClShowFreezeBars, cl_show_freeze_bars, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Show a freeze bar under frozen players to indicate the thaw time")
|
||||
MACRO_CONFIG_INT(ClShowJumpsIndicator, cl_show_jumps_indicator, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Whether to show in the HUD how many jumps you have and have used")
|
||||
MACRO_CONFIG_INT(ClShowFreezeBars, cl_show_freeze_bars, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Whether to show a freeze bar under frozen players to indicate the thaw time")
|
||||
MACRO_CONFIG_INT(SvResetPickups, sv_reset_pickups, 0, 0, 1, CFGFLAG_SERVER | CFGFLAG_GAME, "Whether the weapons are reset on passing the start tile or not")
|
||||
MACRO_CONFIG_INT(ClShowOthers, cl_show_others, 0, 0, 2, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show players in other teams (2 to show own team only)")
|
||||
MACRO_CONFIG_INT(ClShowOthersAlpha, cl_show_others_alpha, 40, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show players in other teams (alpha value, 0 invisible, 100 fully visible)")
|
||||
|
|
|
@ -843,73 +843,75 @@ void CHud::RenderPlayerState(const int ClientID)
|
|||
|
||||
// pCharacter contains the predicted character for local players or the last snap for players who are spectated
|
||||
CCharacterCore *pCharacter = &m_pClient->m_aClients[ClientID].m_Predicted;
|
||||
|
||||
int TotalJumpsToDisplay, AvailableJumpsToDisplay;
|
||||
if(m_pClient->m_Snap.m_aCharacters[ClientID].m_HasExtendedDisplayInfo)
|
||||
int TotalJumpsToDisplay = 0, AvailableJumpsToDisplay = 0;
|
||||
if(g_Config.m_ClShowJumpsIndicator)
|
||||
{
|
||||
bool Grounded = false;
|
||||
if(Collision()->CheckPoint(pCharacter->m_Pos.x + CCharacterCore::PhysicalSize() / 2,
|
||||
pCharacter->m_Pos.y + CCharacterCore::PhysicalSize() / 2 + 5))
|
||||
if(m_pClient->m_Snap.m_aCharacters[ClientID].m_HasExtendedDisplayInfo)
|
||||
{
|
||||
Grounded = true;
|
||||
bool Grounded = false;
|
||||
if(Collision()->CheckPoint(pCharacter->m_Pos.x + CCharacterCore::PhysicalSize() / 2,
|
||||
pCharacter->m_Pos.y + CCharacterCore::PhysicalSize() / 2 + 5))
|
||||
{
|
||||
Grounded = true;
|
||||
}
|
||||
if(Collision()->CheckPoint(pCharacter->m_Pos.x - CCharacterCore::PhysicalSize() / 2,
|
||||
pCharacter->m_Pos.y + CCharacterCore::PhysicalSize() / 2 + 5))
|
||||
{
|
||||
Grounded = true;
|
||||
}
|
||||
|
||||
int UsedJumps = pCharacter->m_JumpedTotal;
|
||||
if(pCharacter->m_Jumps > 1)
|
||||
{
|
||||
UsedJumps += !Grounded;
|
||||
}
|
||||
else if(pCharacter->m_Jumps == 1)
|
||||
{
|
||||
// If the player has only one jump, each jump is the last one
|
||||
UsedJumps = pCharacter->m_Jumped & 2;
|
||||
}
|
||||
else if(pCharacter->m_Jumps == -1)
|
||||
{
|
||||
// The player has only one ground jump
|
||||
UsedJumps = !Grounded;
|
||||
}
|
||||
|
||||
if(pCharacter->m_EndlessJump && UsedJumps >= abs(pCharacter->m_Jumps))
|
||||
{
|
||||
UsedJumps = abs(pCharacter->m_Jumps) - 1;
|
||||
}
|
||||
|
||||
int UnusedJumps = abs(pCharacter->m_Jumps) - UsedJumps;
|
||||
if(!(pCharacter->m_Jumped & 2) && UnusedJumps <= 0)
|
||||
{
|
||||
// In some edge cases when the player just got another number of jumps, UnusedJumps is not correct
|
||||
UnusedJumps = 1;
|
||||
}
|
||||
TotalJumpsToDisplay = maximum(minimum(abs(pCharacter->m_Jumps), 10), 0);
|
||||
AvailableJumpsToDisplay = maximum(minimum(UnusedJumps, TotalJumpsToDisplay), 0);
|
||||
}
|
||||
if(Collision()->CheckPoint(pCharacter->m_Pos.x - CCharacterCore::PhysicalSize() / 2,
|
||||
pCharacter->m_Pos.y + CCharacterCore::PhysicalSize() / 2 + 5))
|
||||
else
|
||||
{
|
||||
Grounded = true;
|
||||
TotalJumpsToDisplay = AvailableJumpsToDisplay = abs(m_pClient->m_Snap.m_aCharacters[ClientID].m_ExtendedData.m_Jumps);
|
||||
}
|
||||
|
||||
int UsedJumps = pCharacter->m_JumpedTotal;
|
||||
if(pCharacter->m_Jumps > 1)
|
||||
// render available and used jumps
|
||||
int JumpsOffsetY = ((GameClient()->m_GameInfo.m_HudHealthArmor && g_Config.m_ClShowhudHealthAmmo ? 24 : 0) +
|
||||
(GameClient()->m_GameInfo.m_HudAmmo && g_Config.m_ClShowhudHealthAmmo ? 12 : 0));
|
||||
if(JumpsOffsetY > 0)
|
||||
{
|
||||
UsedJumps += !Grounded;
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjump);
|
||||
Graphics()->RenderQuadContainerEx(m_HudQuadContainerIndex, m_AirjumpOffset, AvailableJumpsToDisplay, 0, JumpsOffsetY);
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjumpEmpty);
|
||||
Graphics()->RenderQuadContainerEx(m_HudQuadContainerIndex, m_AirjumpEmptyOffset + AvailableJumpsToDisplay, TotalJumpsToDisplay - AvailableJumpsToDisplay, 0, JumpsOffsetY);
|
||||
}
|
||||
else if(pCharacter->m_Jumps == 1)
|
||||
else
|
||||
{
|
||||
// If the player has only one jump, each jump is the last one
|
||||
UsedJumps = pCharacter->m_Jumped & 2;
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjump);
|
||||
Graphics()->RenderQuadContainer(m_HudQuadContainerIndex, m_AirjumpOffset, AvailableJumpsToDisplay);
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjumpEmpty);
|
||||
Graphics()->RenderQuadContainer(m_HudQuadContainerIndex, m_AirjumpEmptyOffset + AvailableJumpsToDisplay, TotalJumpsToDisplay - AvailableJumpsToDisplay);
|
||||
}
|
||||
else if(pCharacter->m_Jumps == -1)
|
||||
{
|
||||
// The player has only one ground jump
|
||||
UsedJumps = !Grounded;
|
||||
}
|
||||
|
||||
if(pCharacter->m_EndlessJump && UsedJumps >= abs(pCharacter->m_Jumps))
|
||||
{
|
||||
UsedJumps = abs(pCharacter->m_Jumps) - 1;
|
||||
}
|
||||
|
||||
int UnusedJumps = abs(pCharacter->m_Jumps) - UsedJumps;
|
||||
if(!(pCharacter->m_Jumped & 2) && UnusedJumps <= 0)
|
||||
{
|
||||
// In some edge cases when the player just got another number of jumps, UnusedJumps is not correct
|
||||
UnusedJumps = 1;
|
||||
}
|
||||
TotalJumpsToDisplay = maximum(minimum(abs(pCharacter->m_Jumps), 10), 0);
|
||||
AvailableJumpsToDisplay = maximum(minimum(UnusedJumps, TotalJumpsToDisplay), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
TotalJumpsToDisplay = AvailableJumpsToDisplay = abs(m_pClient->m_Snap.m_aCharacters[ClientID].m_ExtendedData.m_Jumps);
|
||||
}
|
||||
|
||||
// render available and used jumps
|
||||
int JumpsOffsetY = ((GameClient()->m_GameInfo.m_HudHealthArmor && g_Config.m_ClShowhudHealthAmmo ? 24 : 0) +
|
||||
(GameClient()->m_GameInfo.m_HudAmmo && g_Config.m_ClShowhudHealthAmmo ? 12 : 0));
|
||||
if(JumpsOffsetY > 0)
|
||||
{
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjump);
|
||||
Graphics()->RenderQuadContainerEx(m_HudQuadContainerIndex, m_AirjumpOffset, AvailableJumpsToDisplay, 0, JumpsOffsetY);
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjumpEmpty);
|
||||
Graphics()->RenderQuadContainerEx(m_HudQuadContainerIndex, m_AirjumpEmptyOffset + AvailableJumpsToDisplay, TotalJumpsToDisplay - AvailableJumpsToDisplay, 0, JumpsOffsetY);
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjump);
|
||||
Graphics()->RenderQuadContainer(m_HudQuadContainerIndex, m_AirjumpOffset, AvailableJumpsToDisplay);
|
||||
Graphics()->TextureSet(m_pClient->m_HudSkin.m_SpriteHudAirjumpEmpty);
|
||||
Graphics()->RenderQuadContainer(m_HudQuadContainerIndex, m_AirjumpEmptyOffset + AvailableJumpsToDisplay, TotalJumpsToDisplay - AvailableJumpsToDisplay);
|
||||
}
|
||||
|
||||
float x = 5 + 12;
|
||||
|
|
|
@ -2541,10 +2541,9 @@ void CMenus::RenderSettingsHUD(CUIRect MainView)
|
|||
// ***** HUD ***** //
|
||||
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowhud, Localize("Show ingame HUD"), &g_Config.m_ClShowhud, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClDDRaceHud, Localize("Use DDRace HUD"), &g_Config.m_ClDDRaceHud, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClDDRaceScoreBoard, Localize("Use DDRace Scoreboard"), &g_Config.m_ClDDRaceScoreBoard, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowhudDummyActions, Localize("Show dummy actions"), &g_Config.m_ClShowhudDummyActions, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowFreezeBars, Localize("Show freeze bars"), &g_Config.m_ClShowFreezeBars, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowJumpsIndicator, Localize("Show jump indicator"), &g_Config.m_ClShowJumpsIndicator, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowIDs, Localize("Show client IDs"), &g_Config.m_ClShowIDs, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowhudPlayerPosition, Localize("Show player position"), &g_Config.m_ClShowhudPlayerPosition, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowhudPlayerSpeed, Localize("Show player speed"), &g_Config.m_ClShowhudPlayerSpeed, &MainView, LineMargin);
|
||||
|
@ -2555,32 +2554,22 @@ void CMenus::RenderSettingsHUD(CUIRect MainView)
|
|||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClChatTeamColors, Localize("Show names in chat in team colors"), &g_Config.m_ClChatTeamColors, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowVotesAfterVoting, Localize("Show votes window after voting"), &g_Config.m_ClShowVotesAfterVoting, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowKillMessages, Localize("Show kill messages"), &g_Config.m_ClShowKillMessages, &MainView, LineMargin);
|
||||
DoButton_CheckBoxAutoVMarginAndSet(&g_Config.m_ClShowFreezeBars, Localize("Show freeze bars"), &g_Config.m_ClShowFreezeBars, &MainView, LineMargin);
|
||||
{
|
||||
CUIRect Button, Label;
|
||||
MainView.HSplitTop(2.5f, 0, &MainView);
|
||||
MainView.HSplitTop(20.0f, &Label, &MainView);
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
str_format(aBuf, sizeof(aBuf), "%s: %i", Localize("Opacity of freeze bars inside freeze"), g_Config.m_ClFreezeBarsAlphaInsideFreeze);
|
||||
UI()->DoLabel(&Label, aBuf, 13.0f, TEXTALIGN_LEFT);
|
||||
g_Config.m_ClFreezeBarsAlphaInsideFreeze = (int)(UIEx()->DoScrollbarH(&g_Config.m_ClFreezeBarsAlphaInsideFreeze, &Button, g_Config.m_ClFreezeBarsAlphaInsideFreeze / 100.0f) * 100.0f);
|
||||
if(g_Config.m_ClShowFreezeBars)
|
||||
{
|
||||
CUIRect Button, Label;
|
||||
MainView.HSplitTop(2.5f, 0, &MainView);
|
||||
MainView.HSplitTop(20.0f, &Label, &MainView);
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
str_format(aBuf, sizeof(aBuf), "%s: %i", Localize("Opacity of freeze bars inside freeze"), g_Config.m_ClFreezeBarsAlphaInsideFreeze);
|
||||
UI()->DoLabel(&Label, aBuf, 13.0f, TEXTALIGN_LEFT);
|
||||
g_Config.m_ClFreezeBarsAlphaInsideFreeze = (int)(UIEx()->DoScrollbarH(&g_Config.m_ClFreezeBarsAlphaInsideFreeze, &Button, g_Config.m_ClFreezeBarsAlphaInsideFreeze / 100.0f) * 100.0f);
|
||||
}
|
||||
}
|
||||
|
||||
MainView.HSplitTop(30.0f, 0x0, &MainView);
|
||||
|
||||
// ***** Kill Messages ***** //
|
||||
|
||||
MainView.HSplitTop(30.0f, &Section, &MainView);
|
||||
UI()->DoLabel(&Section, Localize("Kill Messages"), 20.0f, TEXTALIGN_LEFT);
|
||||
MainView.VSplitLeft(5.0f, 0x0, &MainView);
|
||||
|
||||
MainView.HSplitTop(10.0f, 0x0, &MainView);
|
||||
|
||||
static int KillMessageNormalColorID;
|
||||
DoLine_ColorPicker(&KillMessageNormalColorID, 25.0f, 250.0f, 13.0f, 5.0f, &MainView, Localize("Kill Message Normal Color"), &g_Config.m_ClKillMessageNormalColor, ColorRGBA(1.0f, 1.0f, 1.0f), false);
|
||||
|
||||
static int KillMessageHighlightColorID;
|
||||
DoLine_ColorPicker(&KillMessageHighlightColorID, 25.0f, 250.0f, 13.0f, 5.0f, &MainView, Localize("Kill Message Highlight Color"), &g_Config.m_ClKillMessageHighlightColor, ColorRGBA(1.0f, 1.0f, 1.0f), false);
|
||||
|
||||
// ***** Laser ***** //
|
||||
|
||||
MainView = Column;
|
||||
|
@ -2607,6 +2596,8 @@ void CMenus::RenderSettingsHUD(CUIRect MainView)
|
|||
|
||||
DoLaserPreview(&Section, LaserOutlineColor, LaserInnerColor);
|
||||
|
||||
// ***** Hookline ***** //
|
||||
|
||||
MainView.HSplitTop(25.0f, 0x0, &MainView);
|
||||
MainView.HSplitTop(20.0f, &SectionTwo, &MainView);
|
||||
|
||||
|
@ -2646,6 +2637,23 @@ void CMenus::RenderSettingsHUD(CUIRect MainView)
|
|||
MainView.HSplitTop(25.0f, &SectionTwo, &MainView);
|
||||
|
||||
DoLine_ColorPicker(&HookCollTeeCollResetID, 25.0f, 180.0f, 13.0f, 5.0f, &SectionTwo, Localize("Tee"), &g_Config.m_ClHookCollColorTeeColl, ColorRGBA(1.0f, 1.0f, 0.0f, 1.0f), false);
|
||||
|
||||
// ***** Kill Messages ***** //
|
||||
|
||||
MainView.HSplitTop(25.0f, 0x0, &MainView);
|
||||
MainView.HSplitTop(20.0f, &Section, &MainView);
|
||||
UI()->DoLabel(&Section, Localize("Kill Messages"), 20.0f, TEXTALIGN_LEFT);
|
||||
|
||||
MainView.HSplitTop(5.0f, 0x0, &MainView);
|
||||
MainView.HSplitTop(25.0f, &SectionTwo, &MainView);
|
||||
|
||||
static int KillMessageNormalColorID, KillMessageHighlightColorID;
|
||||
DoLine_ColorPicker(&KillMessageNormalColorID, 25.0f, 180.0f, 13.0f, 5.0f, &SectionTwo, Localize("Normal Color"), &g_Config.m_ClKillMessageNormalColor, ColorRGBA(1.0f, 1.0f, 1.0f), false);
|
||||
|
||||
MainView.HSplitTop(5.0f, 0x0, &MainView);
|
||||
MainView.HSplitTop(25.0f, &SectionTwo, &MainView);
|
||||
|
||||
DoLine_ColorPicker(&KillMessageHighlightColorID, 25.0f, 180.0f, 13.0f, 5.0f, &SectionTwo, Localize("Highlight Color"), &g_Config.m_ClKillMessageHighlightColor, ColorRGBA(1.0f, 1.0f, 1.0f), false);
|
||||
}
|
||||
else if(s_CurTab == 1)
|
||||
{ // ***** CHAT TAB ***** //
|
||||
|
|
Loading…
Reference in a new issue