Better time/score messages

This commit is contained in:
def 2014-01-10 16:19:46 +01:00
parent 19419617e5
commit 9743b0cb58
5 changed files with 42 additions and 37 deletions

View file

@ -421,19 +421,17 @@ CServerBrowser::CServerEntry *CServerBrowser::Add(const NETADDR &Addr)
void CServerBrowser::Set(const NETADDR &Addr, int Type, int Token, const CServerInfo *pInfo) void CServerBrowser::Set(const NETADDR &Addr, int Type, int Token, const CServerInfo *pInfo)
{ {
static int temp = 0; static int temp = 0;
static int temp2 = 0;
CServerEntry *pEntry = 0; CServerEntry *pEntry = 0;
if(Type == IServerBrowser::SET_MASTER_ADD) if(Type == IServerBrowser::SET_MASTER_ADD)
{ {
if(m_ServerlistType != IServerBrowser::TYPE_INTERNET) if(m_ServerlistType != IServerBrowser::TYPE_INTERNET)
return; return;
m_LastPacketTick = 0; m_LastPacketTick = 0;
++temp2; ++temp;
if(!Find(Addr)) if(!Find(Addr))
{ {
pEntry = Add(Addr); pEntry = Add(Addr);
QueueRequest(pEntry); QueueRequest(pEntry);
// dbg_msg("Test", "%d, %d", ++temp, temp2);
} }
} }
else if(Type == IServerBrowser::SET_FAV_ADD) else if(Type == IServerBrowser::SET_FAV_ADD)

View file

@ -1,6 +1,7 @@
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */ /* If you are missing that file, acquire a complete release at teeworlds.com. */
#include <engine/graphics.h> #include <engine/graphics.h>
#include <engine/serverbrowser.h>
#include <engine/textrender.h> #include <engine/textrender.h>
#include <engine/shared/config.h> #include <engine/shared/config.h>
@ -33,8 +34,6 @@ void CHud::OnReset()
m_CheckpointTick = 0; m_CheckpointTick = 0;
m_DDRaceTick = 0; m_DDRaceTick = 0;
m_FinishTime = false; m_FinishTime = false;
m_ServerRecord = -1.0f;
m_PlayerRecord = -1.0f;
m_DDRaceTimeReceived = false; m_DDRaceTimeReceived = false;
} }
@ -201,7 +200,20 @@ void CHud::RenderScoreHud()
for(int t = 0; t < 2; ++t) for(int t = 0; t < 2; ++t)
{ {
if(apPlayerInfo[t]) if(apPlayerInfo[t])
str_format(aScore[t], sizeof(aScore)/2, "%d", apPlayerInfo[t]->m_Score); {
CServerInfo Info;
Client()->GetServerInfo(&Info);
bool IsGameTypeRace = str_find_nocase(Info.m_aGameType, "race") || str_find_nocase(Info.m_aGameType, "fastcap");
if(IsGameTypeRace && g_Config.m_ClDDRaceScoreBoard)
{
if (apPlayerInfo[t]->m_Score != -9999)
str_format(aScore[t], sizeof(aScore[t]), "%02d:%02d", abs(apPlayerInfo[t]->m_Score)/60, abs(apPlayerInfo[t]->m_Score)%60);
else
aScore[t][0] = 0;
}
else
str_format(aScore[t], sizeof(aScore)/2, "%d", apPlayerInfo[t]->m_Score);
}
else else
aScore[t][0] = 0; aScore[t][0] = 0;
} }
@ -490,7 +502,6 @@ void CHud::OnRender()
RenderConnectionWarning(); RenderConnectionWarning();
RenderTeambalanceWarning(); RenderTeambalanceWarning();
RenderVoting(); RenderVoting();
RenderRecord();
} }
RenderCursor(); RenderCursor();
} }
@ -526,12 +537,6 @@ void CHud::OnMessage(int MsgType, void *pRawMsg)
m_DDRaceTime = 0; m_DDRaceTime = 0;
} }
} }
else if(MsgType == NETMSGTYPE_SV_RECORD)
{
CNetMsg_Sv_Record *pMsg = (CNetMsg_Sv_Record *)pRawMsg;
m_ServerRecord = (float)pMsg->m_ServerTimeBest/100;
m_PlayerRecord = (float)pMsg->m_PlayerTimeBest/100;
}
} }
void CHud::RenderDDRaceEffects() void CHud::RenderDDRaceEffects()
@ -593,24 +598,3 @@ void CHud::RenderDDRaceEffects()
if(m_DDRaceTick >= 100) if(m_DDRaceTick >= 100)
m_DDRaceTick = 0; m_DDRaceTick = 0;
} }
void CHud::RenderRecord()
{
if(m_ServerRecord > 0 )
{
char aBuf[64];
str_format(aBuf, sizeof(aBuf), "Server best:");
TextRender()->Text(0, 5, 40, 6, aBuf, -1);
str_format(aBuf, sizeof(aBuf), "%02d:%05.2f", (int)m_ServerRecord/60, m_ServerRecord-((int)m_ServerRecord/60*60));
TextRender()->Text(0, 53, 40, 6, aBuf, -1);
}
if(m_PlayerRecord > 0 )
{
char aBuf[64];
str_format(aBuf, sizeof(aBuf), "Personal best:");
TextRender()->Text(0, 5, 47, 6, aBuf, -1);
str_format(aBuf, sizeof(aBuf), "%02d:%05.2f", (int)m_PlayerRecord/60, m_PlayerRecord-((int)m_PlayerRecord/60*60));
TextRender()->Text(0, 53, 47, 6, aBuf, -1);
}
}

View file

@ -44,8 +44,6 @@ private:
int m_CheckpointTick; int m_CheckpointTick;
int m_DDRaceTick; int m_DDRaceTick;
bool m_FinishTime; bool m_FinishTime;
float m_ServerRecord;
float m_PlayerRecord;
bool m_DDRaceTimeReceived; bool m_DDRaceTimeReceived;
}; };

View file

@ -32,13 +32,14 @@ void CScoreboard::ConKeyScoreboard(IConsole::IResult *pResult, void *pUserData)
CServerInfo Info; CServerInfo Info;
pSelf->Client()->GetServerInfo(&Info); pSelf->Client()->GetServerInfo(&Info);
pSelf->m_IsGameTypeRace = str_find_nocase(Info.m_aGameType, "race"); pSelf->m_IsGameTypeRace = str_find_nocase(Info.m_aGameType, "race") || str_find_nocase(Info.m_aGameType, "fastcap");
pSelf->m_Active = pResult->GetInteger(0) != 0; pSelf->m_Active = pResult->GetInteger(0) != 0;
} }
void CScoreboard::OnReset() void CScoreboard::OnReset()
{ {
m_Active = false; m_Active = false;
m_ServerRecord = -1.0f;
} }
void CScoreboard::OnRelease() void CScoreboard::OnRelease()
@ -46,6 +47,16 @@ void CScoreboard::OnRelease()
m_Active = false; m_Active = false;
} }
void CScoreboard::OnMessage(int MsgType, void *pRawMsg)
{
if(MsgType == NETMSGTYPE_SV_RECORD)
{
CNetMsg_Sv_Record *pMsg = (CNetMsg_Sv_Record *)pRawMsg;
m_ServerRecord = (float)pMsg->m_ServerTimeBest/100;
//m_PlayerRecord = (float)pMsg->m_PlayerTimeBest/100;
}
}
void CScoreboard::OnConsoleInit() void CScoreboard::OnConsoleInit()
{ {
Console()->Register("+scoreboard", "", CFGFLAG_CLIENT, ConKeyScoreboard, this, "Show scoreboard"); Console()->Register("+scoreboard", "", CFGFLAG_CLIENT, ConKeyScoreboard, this, "Show scoreboard");
@ -203,6 +214,17 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
str_format(aBuf, sizeof(aBuf), "%d", Score); str_format(aBuf, sizeof(aBuf), "%d", Score);
} }
} }
if(m_IsGameTypeRace && g_Config.m_ClDDRaceScoreBoard)
{
if (m_ServerRecord > 0)
{
str_format(aBuf, sizeof(aBuf), "%02d:%02d", round(m_ServerRecord)/60, round(m_ServerRecord)%60);
}
else
aBuf[0] = 0;
}
float tw = TextRender()->TextWidth(0, TitleFontsize, aBuf, -1); float tw = TextRender()->TextWidth(0, TitleFontsize, aBuf, -1);
TextRender()->Text(0, x+w-tw-20.0f, y, TitleFontsize, aBuf, -1); TextRender()->Text(0, x+w-tw-20.0f, y, TitleFontsize, aBuf, -1);

View file

@ -29,9 +29,12 @@ public:
// DDRace // DDRace
virtual void OnMessage(int MsgType, void *pRawMsg);
private: private:
bool m_IsGameTypeRace; bool m_IsGameTypeRace;
float m_ServerRecord;
}; };
#endif #endif