Show keystrokes in the nametag and new option cl_show_direction_below to show the keypresses below the players

This commit is contained in:
c0d3d3v 2022-02-11 14:03:16 +01:00
parent d3fd837723
commit 724a49dc59
No known key found for this signature in database
GPG key ID: 068AF680530DFF31
5 changed files with 51 additions and 38 deletions

View file

@ -380,6 +380,7 @@ MACRO_CONFIG_INT(ClChatReset, cl_chat_reset, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_S
MACRO_CONFIG_INT(ClChatOld, cl_chat_old, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Old chat style: No tee, no background");
MACRO_CONFIG_INT(ClShowDirection, cl_show_direction, 1, 0, 2, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Show key presses (1 = other players', 2 = also your own)")
MACRO_CONFIG_INT(ClShowDirectionBelow, cl_show_direction_below, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Position of the shown key presses (0 = above players, 1 = below players)")
MACRO_CONFIG_INT(ClHttpMapDownload, cl_http_map_download, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Try fast HTTP map download first")
MACRO_CONFIG_INT(ClOldGunPosition, cl_old_gun_position, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Tees hold gun a bit higher like in TW 0.6.1 and older")
MACRO_CONFIG_INT(ClConfirmDisconnectTime, cl_confirm_disconnect_time, 20, -1, 1440, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Confirmation popup before disconnecting after game time (in minutes, -1 to turn off, 0 to always turn on)")

View file

@ -50,6 +50,47 @@ void CNamePlates::RenderNameplatePos(vec2 Position, const CNetObj_PlayerInfo *pP
float YOffset = Position.y - 38;
ColorRGBA rgb = ColorRGBA(1.0f, 1.0f, 1.0f);
// render players' key presses
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->QuadsSetRotation(0);
int ShowDirection = g_Config.m_ClShowDirection;
#if defined(CONF_VIDEORECORDER)
if(IVideo::Current())
ShowDirection = g_Config.m_ClVideoShowDirection;
#endif
if((pPlayerInfo->m_Local && ShowDirection == 2) || (!pPlayerInfo->m_Local && ShowDirection >= 1))
{
const float ShowDirectionImgSize = 22.0f;
vec2 ShowDirectionPos;
if(g_Config.m_ClShowDirectionBelow)
ShowDirectionPos = vec2(Position.x - 11.0f, Position.y + ShowDirectionImgSize);
else
{
YOffset -= ShowDirectionImgSize;
ShowDirectionPos = vec2(Position.x - 11.0f, YOffset);
}
if(m_pClient->m_Snap.m_aCharacters[pPlayerInfo->m_ClientID].m_Cur.m_Direction == -1)
{
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_ARROW].m_Id);
Graphics()->QuadsSetRotation(pi);
Graphics()->RenderQuadContainerAsSprite(m_DirectionQuadContainerIndex, 0, ShowDirectionPos.x - 30.f, ShowDirectionPos.y);
}
else if(m_pClient->m_Snap.m_aCharacters[pPlayerInfo->m_ClientID].m_Cur.m_Direction == 1)
{
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_ARROW].m_Id);
Graphics()->RenderQuadContainerAsSprite(m_DirectionQuadContainerIndex, 0, ShowDirectionPos.x + 30.f, ShowDirectionPos.y);
}
if(m_pClient->m_Snap.m_aCharacters[pPlayerInfo->m_ClientID].m_Cur.m_Jumped & 1)
{
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_ARROW].m_Id);
Graphics()->QuadsSetRotation(pi * 3 / 2);
Graphics()->RenderQuadContainerAsSprite(m_DirectionQuadContainerIndex, 0, ShowDirectionPos.x, ShowDirectionPos.y);
}
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->QuadsSetRotation(0);
}
// render name plate
if(!pPlayerInfo->m_Local || g_Config.m_ClNameplatesOwn)
{
@ -314,4 +355,11 @@ void CNamePlates::OnWindowResize()
void CNamePlates::OnInit()
{
ResetNamePlates();
// the direction
m_DirectionQuadContainerIndex = Graphics()->CreateQuadContainer(false);
IGraphics::CQuadItem QuadItem(0.f, 0.f, 22.f, 22.f);
Graphics()->QuadContainerAddQuads(m_DirectionQuadContainerIndex, &QuadItem, 1);
Graphics()->QuadContainerUpload(m_DirectionQuadContainerIndex);
}

View file

@ -50,6 +50,8 @@ class CNamePlates : public CComponent
void ResetNamePlates();
int m_DirectionQuadContainerIndex;
public:
virtual int Sizeof() const override { return sizeof(*this); }
virtual void OnWindowResize() override;

View file

@ -552,37 +552,6 @@ void CPlayers::RenderPlayer(
RenderInfo.m_Size = 64.0f; // force some settings
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
Graphics()->QuadsSetRotation(0);
int ShowDirection = g_Config.m_ClShowDirection;
#if defined(CONF_VIDEORECORDER)
if(IVideo::Current())
ShowDirection = g_Config.m_ClVideoShowDirection;
#endif
vec2 ShowDirectionPos(Position.x - 11.0f, Position.y - 70.f);
if((Local && ShowDirection == 2) || (!Local && ShowDirection >= 1))
{
if(Player.m_Direction == -1)
{
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_ARROW].m_Id);
Graphics()->QuadsSetRotation(pi);
Graphics()->RenderQuadContainerAsSprite(m_DirectionQuadContainerIndex, 0, ShowDirectionPos.x - 30.f, ShowDirectionPos.y);
}
else if(Player.m_Direction == 1)
{
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_ARROW].m_Id);
Graphics()->RenderQuadContainerAsSprite(m_DirectionQuadContainerIndex, 0, ShowDirectionPos.x + 30.f, ShowDirectionPos.y);
}
if(Player.m_Jumped & 1)
{
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_ARROW].m_Id);
Graphics()->QuadsSetRotation(pi * 3 / 2);
Graphics()->RenderQuadContainerAsSprite(m_DirectionQuadContainerIndex, 0, ShowDirectionPos.x, ShowDirectionPos.y);
}
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->QuadsSetRotation(0);
}
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Position, Alpha);
int QuadOffsetToEmoticon = NUM_WEAPONS * 2 + 2 + 2;
@ -811,10 +780,4 @@ void CPlayers::OnInit()
Graphics()->QuadsSetSubset(0.f, 0.f, 1.f, 1.f);
Graphics()->QuadsSetRotation(0.f);
// the direction
m_DirectionQuadContainerIndex = Graphics()->CreateQuadContainer(false);
IGraphics::CQuadItem QuadItem(0.f, 0.f, 22.f, 22.f);
Graphics()->QuadContainerAddQuads(m_DirectionQuadContainerIndex, &QuadItem, 1);
Graphics()->QuadContainerUpload(m_DirectionQuadContainerIndex);
}

View file

@ -28,7 +28,6 @@ class CPlayers : public CComponent
float Intra = 0.f);
int m_WeaponEmoteQuadContainerIndex;
int m_DirectionQuadContainerIndex;
int m_WeaponSpriteMuzzleQuadContainerIndex[NUM_WEAPONS];
public: