void CScoreboard::OnRender() { if(!Active()) return; // if the score board is active, then we should clear the motd message aswell if(m_pClient->m_pMotd->IsActive()) m_pClient->m_pMotd->Clear(); float Width = 400*3.0f*Graphics()->ScreenAspect(); float Height = 400*3.0f; Graphics()->MapScreen(0, 0, Width, Height); float w = 700.0f; if(m_pClient->m_Snap.m_pGameInfoObj) { if(!(m_pClient->m_Snap.m_pGameInfoObj->m_GameFlags&GAMEFLAG_TEAMS)) RenderScoreboard(Width/2-w/2, 150.0f, w, 0, 0); else { const char *pRedClanName = GetClanName(TEAM_RED); const char *pBlueClanName = GetClanName(TEAM_BLUE); if(m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER && m_pClient->m_Snap.m_pGameDataObj) { char aText[256]; str_copy(aText, Localize("Draw!"), sizeof(aText)); if(m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreRed > m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreBlue) { if(pRedClanName) str_format(aText, sizeof(aText), Localize("%s wins!"), pRedClanName); else str_copy(aText, Localize("Red team wins!"), sizeof(aText)); } else if(m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreBlue > m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreRed) { if(pBlueClanName) str_format(aText, sizeof(aText), Localize("%s wins!"), pBlueClanName); else str_copy(aText, Localize("Blue team wins!"), sizeof(aText)); } float w = TextRender()->TextWidth(0, 86.0f, aText, -1); TextRender()->Text(0, Width/2-w/2, 39, 86.0f, aText, -1); } RenderScoreboard(Width/2-w-5.0f, 150.0f, w, TEAM_RED, pRedClanName ? pRedClanName : Localize("Red team")); RenderScoreboard(Width/2+5.0f, 150.0f, w, TEAM_BLUE, pBlueClanName ? pBlueClanName : Localize("Blue team")); } } RenderGoals(Width/2-w/2, 150+760+10, w); RenderSpectators(Width/2-w/2, 150+760+10+50+10, w); RenderRecordingNotification((Width/7)*4); }
void CScoreboard::OnRender() { // check if we need to reset the player stats if(!m_SkipPlayerStatsReset && m_pClient->m_Snap.m_pGameData && m_pClient->m_Snap.m_pGameData->m_GameStartTick == Client()->GameTick()) { m_SkipPlayerStatsReset = true; for(int i = 0; i < MAX_CLIENTS; i++) ResetPlayerStats(i); } else if(m_SkipPlayerStatsReset && m_pClient->m_Snap.m_pGameData && m_pClient->m_Snap.m_pGameData->m_GameStartTick != Client()->GameTick()) m_SkipPlayerStatsReset = false; // postpone the active state till the render area gets updated during the rendering if(m_Activate) { m_Active = true; m_Activate = false; } // close the motd if we actively wanna look on the scoreboard if(m_Active) m_pClient->m_pMotd->Clear(); if(!Active()) return; // don't render scoreboard if menu or motd is open if(m_pClient->m_pMenus->IsActive() || m_pClient->m_pMotd->IsActive()) return; CUIRect Screen = *UI()->Screen(); Graphics()->MapScreen(Screen.x, Screen.y, Screen.w, Screen.h); float Width = Screen.w; float y = 85.f; float w = 364.0f; float FontSize = 86.0f; const char* pCustomRedClanName = GetClanName(TEAM_RED); const char* pCustomBlueClanName = GetClanName(TEAM_BLUE); const char* pRedClanName = pCustomRedClanName ? pCustomRedClanName : Localize("Red team"); const char* pBlueClanName = pCustomBlueClanName ? pCustomBlueClanName : Localize("Blue team"); if(m_pClient->m_Snap.m_pGameData) { if(!(m_pClient->m_GameInfo.m_GameFlags&GAMEFLAG_TEAMS)) { float ScoreboardHeight = RenderScoreboard(Width/2-w/2, y, w, 0, 0, -1); float SpectatorHeight = RenderSpectators(Width/2-w/2, y+3.0f+ScoreboardHeight, w); RenderGoals(Width/2-w/2, y+3.0f+ScoreboardHeight, w); // scoreboard size m_TotalRect.x = Width/2-w/2; m_TotalRect.y = y; m_TotalRect.w = w; m_TotalRect.h = ScoreboardHeight+SpectatorHeight+3.0f; } else if(m_pClient->m_Snap.m_pGameDataTeam) { float ScoreboardHeight = RenderScoreboard(Width/2-w-1.5f, y, w, TEAM_RED, pRedClanName, -1); RenderScoreboard(Width/2+1.5f, y, w, TEAM_BLUE, pBlueClanName, 1); float SpectatorHeight = RenderSpectators(Width/2-w-1.5f, y+3.0f+ScoreboardHeight, w*2.0f+3.0f); RenderGoals(Width/2-w-1.5f, y+3.0f+ScoreboardHeight, w*2.0f+3.0f); // scoreboard size m_TotalRect.x = Width/2-w-1.5f; m_TotalRect.y = y; m_TotalRect.w = w*2.0f+3.0f; m_TotalRect.h = ScoreboardHeight+SpectatorHeight+3.0f; } } Width = 400*3.0f*Graphics()->ScreenAspect(); Graphics()->MapScreen(0, 0, Width, 400*3.0f); if(m_pClient->m_Snap.m_pGameData && (m_pClient->m_GameInfo.m_GameFlags&GAMEFLAG_TEAMS) && m_pClient->m_Snap.m_pGameDataTeam) { if(m_pClient->m_Snap.m_pGameData->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER) { char aText[256]; if(m_pClient->m_Snap.m_pGameDataTeam->m_TeamscoreRed > m_pClient->m_Snap.m_pGameDataTeam->m_TeamscoreBlue) str_format(aText, sizeof(aText), Localize("%s wins!"), pRedClanName); else if(m_pClient->m_Snap.m_pGameDataTeam->m_TeamscoreBlue > m_pClient->m_Snap.m_pGameDataTeam->m_TeamscoreRed) str_format(aText, sizeof(aText), Localize("%s wins!"), pBlueClanName); else str_copy(aText, Localize("Draw!"), sizeof(aText)); float tw = TextRender()->TextWidth(0, FontSize, aText, -1, -1.0f); TextRender()->Text(0, Width/2-tw/2, 39, FontSize, aText, -1.0f); } else if(m_pClient->m_Snap.m_pGameData->m_GameStateFlags&GAMESTATEFLAG_ROUNDOVER) { char aText[256]; str_copy(aText, Localize("Round over!"), sizeof(aText)); float tw = TextRender()->TextWidth(0, FontSize, aText, -1, -1.0f); TextRender()->Text(0, Width/2-tw/2, 39, FontSize, aText, -1.0f); m_SkipPlayerStatsReset = true; } } RenderRecordingNotification((Width/7)*4); }
void CScoreboard::OnRender() { static bool s_NeedUpdate = true; if(!Active()) return; // if the score board is active, then we should clear the motd message aswell if(m_pClient->m_pMotd->IsActive()) m_pClient->m_pMotd->Clear(); float Width = 400*3.0f*Graphics()->ScreenAspect(); float Height = 400*3.0f; Graphics()->MapScreen(0, 0, Width, Height); float w = 700.0f; if(m_pClient->m_Snap.m_pGameInfoObj) { if(!(m_pClient->m_Snap.m_pGameInfoObj->m_GameFlags&GAMEFLAG_TEAMS)) { // H-Client: DDNet CServerInfo SInfo; Client()->GetServerInfo(&SInfo); if (SInfo.m_MaxPlayers > 16) RenderScoreboard64(10.0f, 270.0f, Width-20.0f, 0, 0); else RenderScoreboard(Width/2-w/2, 270.0f, w, 0, 0); // if (Client()->State() != IClient::STATE_DEMOPLAYBACK && s_NeedUpdate) { CServerInfoReg *ServerInfo = ServerBrowser()->GetServerInfoReg(Client()->GetCurrentServerAddress()); //H-Client if (ServerInfo) { if (m_pClient->m_Snap.m_paInfoByScore[0]->m_ClientID != m_pClient->m_Snap.m_LocalClientID) ServerInfo->m_Losts++; else ServerInfo->m_Wins++; } s_NeedUpdate = false; } } else { const char *pRedClanName = GetClanName(TEAM_RED); const char *pBlueClanName = GetClanName(TEAM_BLUE); if ((m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER) && m_pClient->m_Snap.m_pGameDataObj) { char aText[256]; str_copy(aText, Localize("Draw!"), sizeof(aText)); if(m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreRed > m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreBlue) { if(pRedClanName) str_format(aText, sizeof(aText), Localize("%s wins!"), pRedClanName); else str_copy(aText, Localize("Red team wins!"), sizeof(aText)); if (s_NeedUpdate) { CServerInfoReg *ServerInfo = ServerBrowser()->GetServerInfoReg(Client()->GetCurrentServerAddress()); //H-Client if (ServerInfo) { if (m_pClient->m_Snap.m_pLocalInfo->m_Team == TEAM_RED) ServerInfo->m_Wins++; else ServerInfo->m_Losts++; } s_NeedUpdate = false; } } else if(m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreBlue > m_pClient->m_Snap.m_pGameDataObj->m_TeamscoreRed) { if(pBlueClanName) str_format(aText, sizeof(aText), Localize("%s wins!"), pBlueClanName); else str_copy(aText, Localize("Blue team wins!"), sizeof(aText)); if (s_NeedUpdate) { CServerInfoReg *ServerInfo = ServerBrowser()->GetServerInfoReg(Client()->GetCurrentServerAddress()); //H-Client if (ServerInfo) { if (m_pClient->m_Snap.m_pLocalInfo->m_Team == TEAM_BLUE) ServerInfo->m_Wins++; else ServerInfo->m_Losts++; } s_NeedUpdate = false; } } float w = TextRender()->TextWidth(0, 86.0f, aText, -1); TextRender()->Text(0, Width/2-w/2, 150.0f, 86.0f, aText, -1); } else if (!(m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER) && !s_NeedUpdate) s_NeedUpdate = true; RenderScoreboard(Width/2-w-5.0f, 270.0f, w, TEAM_RED, pRedClanName ? pRedClanName : Localize("Red team")); RenderScoreboard(Width/2+5.0f, 270.0f, w, TEAM_BLUE, pBlueClanName ? pBlueClanName : Localize("Blue team")); } } RenderGoals(Width/2-w/2, 0, w); RenderSpectators(Width/2-w/2, 230+760+10+50+10, w); RenderRecordingNotification(); RenderLocalTime(); }