diff options
| -rw-r--r-- | src/game/client/components/chat.cpp | 3 | ||||
| -rw-r--r-- | src/game/client/components/menus_ingame.cpp | 84 | ||||
| -rw-r--r-- | src/game/client/gameclient.cpp | 43 | ||||
| -rw-r--r-- | src/game/client/gameclient.h | 3 |
4 files changed, 96 insertions, 37 deletions
diff --git a/src/game/client/components/chat.cpp b/src/game/client/components/chat.cpp index 4360fc02..fd08d9d0 100644 --- a/src/game/client/components/chat.cpp +++ b/src/game/client/components/chat.cpp @@ -199,7 +199,8 @@ void CChat::OnMessage(int MsgType, void *pRawMsg) void CChat::AddLine(int ClientID, int Team, const char *pLine) { - if(ClientID != -1 && m_pClient->m_aClients[ClientID].m_aName[0] == '\0') // unknown client + if(ClientID != -1 && m_pClient->m_aClients[ClientID].m_aName[0] == '\0' || // unknown client + m_pClient->m_aClients[ClientID].m_ChatIgnore) return; bool Highlighted = false; diff --git a/src/game/client/components/menus_ingame.cpp b/src/game/client/components/menus_ingame.cpp index ef3d0236..2e7c33e8 100644 --- a/src/game/client/components/menus_ingame.cpp +++ b/src/game/client/components/menus_ingame.cpp @@ -10,10 +10,11 @@ #include <game/generated/protocol.h> #include <game/generated/client_data.h> -#include <game/client/ui.h> -#include <game/client/gameclient.h> -#include <game/client/animstate.h> #include <game/localization.h> +#include <game/client/animstate.h> +#include <game/client/gameclient.h> +#include <game/client/render.h> +#include <game/client/ui.h> #include "menus.h" #include "motd.h" @@ -21,16 +22,16 @@ void CMenus::RenderGame(CUIRect MainView) { - CUIRect Button; - //CUIRect votearea; - MainView.HSplitTop(45.0f, &MainView, 0); + CUIRect Button, ButtonBar, Options; RenderTools()->DrawUIRect(&MainView, ms_ColorTabbarActive, CUI::CORNER_ALL, 10.0f); - - MainView.HSplitTop(10.0f, 0, &MainView); - MainView.HSplitTop(25.0f, &MainView, 0); - MainView.VMargin(10.0f, &MainView); - MainView.VSplitRight(120.0f, &MainView, &Button); + // button bar + MainView.HSplitTop(45.0f, &ButtonBar, &MainView); + ButtonBar.HSplitTop(10.0f, 0, &ButtonBar); + ButtonBar.HSplitTop(25.0f, &ButtonBar, 0); + ButtonBar.VMargin(10.0f, &ButtonBar); + + ButtonBar.VSplitRight(120.0f, &ButtonBar, &Button); static int s_DisconnectButton = 0; if(DoButton_Menu(&s_DisconnectButton, Localize("Disconnect"), 0, &Button)) Client()->Disconnect(); @@ -39,8 +40,8 @@ void CMenus::RenderGame(CUIRect MainView) { if(m_pClient->m_Snap.m_pLocalInfo->m_Team != TEAM_SPECTATORS) { - MainView.VSplitLeft(10.0f, &Button, &MainView); - MainView.VSplitLeft(120.0f, &Button, &MainView); + ButtonBar.VSplitLeft(10.0f, 0, &ButtonBar); + ButtonBar.VSplitLeft(120.0f, &Button, &ButtonBar); static int s_SpectateButton = 0; if(DoButton_Menu(&s_SpectateButton, Localize("Spectate"), 0, &Button)) { @@ -53,8 +54,8 @@ void CMenus::RenderGame(CUIRect MainView) { if(m_pClient->m_Snap.m_pLocalInfo->m_Team != TEAM_RED) { - MainView.VSplitLeft(10.0f, &Button, &MainView); - MainView.VSplitLeft(120.0f, &Button, &MainView); + ButtonBar.VSplitLeft(10.0f, 0, &ButtonBar); + ButtonBar.VSplitLeft(120.0f, &Button, &ButtonBar); static int s_SpectateButton = 0; if(DoButton_Menu(&s_SpectateButton, Localize("Join red"), 0, &Button)) { @@ -65,8 +66,8 @@ void CMenus::RenderGame(CUIRect MainView) if(m_pClient->m_Snap.m_pLocalInfo->m_Team != TEAM_BLUE) { - MainView.VSplitLeft(10.0f, &Button, &MainView); - MainView.VSplitLeft(120.0f, &Button, &MainView); + ButtonBar.VSplitLeft(10.0f, 0, &ButtonBar); + ButtonBar.VSplitLeft(120.0f, &Button, &ButtonBar); static int s_SpectateButton = 0; if(DoButton_Menu(&s_SpectateButton, Localize("Join blue"), 0, &Button)) { @@ -79,8 +80,8 @@ void CMenus::RenderGame(CUIRect MainView) { if(m_pClient->m_Snap.m_pLocalInfo->m_Team != 0) { - MainView.VSplitLeft(10.0f, &Button, &MainView); - MainView.VSplitLeft(120.0f, &Button, &MainView); + ButtonBar.VSplitLeft(10.0f, 0, &ButtonBar); + ButtonBar.VSplitLeft(120.0f, &Button, &ButtonBar); static int s_SpectateButton = 0; if(DoButton_Menu(&s_SpectateButton, Localize("Join game"), 0, &Button)) { @@ -91,8 +92,8 @@ void CMenus::RenderGame(CUIRect MainView) } } - MainView.VSplitLeft(100.0f, &Button, &MainView); - MainView.VSplitLeft(150.0f, &Button, &MainView); + ButtonBar.VSplitLeft(100.0f, 0, &ButtonBar); + ButtonBar.VSplitLeft(150.0f, &Button, &ButtonBar); static int s_DemoButton = 0; bool Recording = DemoRecorder()->IsRecording(); @@ -103,6 +104,47 @@ void CMenus::RenderGame(CUIRect MainView) else Client()->DemoRecorder_Stop(); } + + // player options + MainView.Margin(10.0f, &Options); + RenderTools()->DrawUIRect(&Options, vec4(1.0f, 1.0f, 1.0f, 0.25f), CUI::CORNER_ALL, 10.0f); + Options.Margin(10.0f, &Options); + Options.HSplitTop(50.0f, &Button, &Options); + UI()->DoLabelScaled(&Button, Localize("Player options"), 34.0f, -1); + + CUIRect Player; + static int s_aPlayerIDs[MAX_CLIENTS] = {0}; + for(int i = 0; i < MAX_CLIENTS; ++i) + { + if(!m_pClient->m_Snap.m_paPlayerInfos[i] || i == m_pClient->m_Snap.m_LocalClientID) + continue; + + Options.HSplitTop(25.0f, &ButtonBar, &Options); + ButtonBar.VSplitRight(200.0f, &Player, &ButtonBar); + + // player info + Player.VSplitLeft(25.0f, &Button, &Player); + CTeeRenderInfo Info = m_pClient->m_aClients[i].m_RenderInfo; + Info.m_Size = Button.h; + RenderTools()->RenderTee(CAnimState::GetIdle(), &Info, EMOTE_NORMAL, vec2(1.0f, 0.0f), vec2(Button.x+Button.h/2, Button.y+Button.h/2)); + + Player.HSplitTop(1.5f, 0, &Player); + Player.VSplitMid(&Player, &Button); + CTextCursor Cursor; + TextRender()->SetCursor(&Cursor, Player.x, Player.y, 14.0f, TEXTFLAG_RENDER|TEXTFLAG_STOP_AT_END); + Cursor.m_LineWidth = Player.w; + TextRender()->TextEx(&Cursor, m_pClient->m_aClients[i].m_aName, -1); + + TextRender()->SetCursor(&Cursor, Button.x,Button.y, 14.0f, TEXTFLAG_RENDER|TEXTFLAG_STOP_AT_END); + Cursor.m_LineWidth = Button.w; + TextRender()->TextEx(&Cursor, m_pClient->m_aClients[i].m_aClan, -1); + + // ignore button + ButtonBar.VSplitMid(&Button, &ButtonBar); + Button.VSplitRight(10.0f, &Button, 0); + if(DoButton_CheckBox(&s_aPlayerIDs[i], Localize("Ignore"), m_pClient->m_aClients[i].m_ChatIgnore, &Button)) + m_pClient->m_aClients[i].m_ChatIgnore ^= 1; + } /* CUIRect bars; diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index a7e9e66f..9f0898fc 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -341,20 +341,7 @@ void CGameClient::OnReset() mem_zero(&g_GameClient.m_Snap, sizeof(g_GameClient.m_Snap)); for(int i = 0; i < MAX_CLIENTS; i++) - { - m_aClients[i].m_aName[0] = 0; - m_aClients[i].m_aClan[0] = 0; - m_aClients[i].m_Country = -1; - m_aClients[i].m_SkinID = 0; - m_aClients[i].m_Team = 0; - m_aClients[i].m_Angle = 0; - m_aClients[i].m_Emoticon = 0; - m_aClients[i].m_EmoticonStart = -1; - m_aClients[i].m_SkinInfo.m_Texture = g_GameClient.m_pSkins->Get(0)->m_ColorTexture; - m_aClients[i].m_SkinInfo.m_ColorBody = vec4(1,1,1,1); - m_aClients[i].m_SkinInfo.m_ColorFeet = vec4(1,1,1,1); - m_aClients[i].UpdateRenderInfo(); - } + m_aClients[i].Reset(); for(int i = 0; i < m_All.m_Num; i++) m_All.m_paComponents[i]->OnReset(); @@ -744,7 +731,6 @@ void CGameClient::OnNewSnapshot() } m_aClients[ClientID].UpdateRenderInfo(); - g_GameClient.m_Snap.m_NumPlayers++; } else if(Item.m_Type == NETOBJTYPE_PLAYERINFO) @@ -752,7 +738,9 @@ void CGameClient::OnNewSnapshot() const CNetObj_PlayerInfo *pInfo = (const CNetObj_PlayerInfo *)pData; m_aClients[pInfo->m_ClientID].m_Team = pInfo->m_Team; + m_aClients[pInfo->m_ClientID].m_Active = true; m_Snap.m_paPlayerInfos[pInfo->m_ClientID] = pInfo; + m_Snap.m_NumPlayers++; if(pInfo->m_Local) { @@ -839,6 +827,13 @@ void CGameClient::OnNewSnapshot() m_Snap.m_SpecInfo.m_SpectatorID = SPEC_FREEVIEW; } + // clear out unneeded client data + for(int i = 0; i < MAX_CLIENTS; ++i) + { + if(!m_Snap.m_paPlayerInfos[i] && m_aClients[i].m_Active) + m_aClients[i].Reset(); + } + // sort player infos by score mem_copy(m_Snap.m_paInfoByScore, m_Snap.m_paPlayerInfos, sizeof(m_Snap.m_paInfoByScore)); for(int k = 0; k < MAX_CLIENTS-1; k++) // ffs, bubblesort @@ -1017,6 +1012,24 @@ void CGameClient::CClientData::UpdateRenderInfo() } } +void CGameClient::CClientData::Reset() +{ + m_aName[0] = 0; + m_aClan[0] = 0; + m_Country = -1; + m_SkinID = 0; + m_Team = 0; + m_Angle = 0; + m_Emoticon = 0; + m_EmoticonStart = -1; + m_Active = false; + m_ChatIgnore = false; + m_SkinInfo.m_Texture = g_GameClient.m_pSkins->Get(0)->m_ColorTexture; + m_SkinInfo.m_ColorBody = vec4(1,1,1,1); + m_SkinInfo.m_ColorFeet = vec4(1,1,1,1); + UpdateRenderInfo(); +} + void CGameClient::SendSwitchTeam(int Team) { CNetMsg_Cl_SetTeam Msg; diff --git a/src/game/client/gameclient.h b/src/game/client/gameclient.h index e807592f..22caa740 100644 --- a/src/game/client/gameclient.h +++ b/src/game/client/gameclient.h @@ -176,8 +176,11 @@ public: CTeeRenderInfo m_RenderInfo; // this is what we use float m_Angle; + bool m_Active; + bool m_ChatIgnore; void UpdateRenderInfo(); + void Reset(); }; CClientData m_aClients[MAX_CLIENTS]; |