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)
{
static int temp = 0;
static int temp2 = 0;
CServerEntry *pEntry = 0;
if(Type == IServerBrowser::SET_MASTER_ADD)
{
if(m_ServerlistType != IServerBrowser::TYPE_INTERNET)
return;
m_LastPacketTick = 0;
++temp2;
++temp;
if(!Find(Addr))
{
pEntry = Add(Addr);
QueueRequest(pEntry);
// dbg_msg("Test", "%d, %d", ++temp, temp2);
}
}
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. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
#include <engine/graphics.h>
#include <engine/serverbrowser.h>
#include <engine/textrender.h>
#include <engine/shared/config.h>
@ -33,8 +34,6 @@ void CHud::OnReset()
m_CheckpointTick = 0;
m_DDRaceTick = 0;
m_FinishTime = false;
m_ServerRecord = -1.0f;
m_PlayerRecord = -1.0f;
m_DDRaceTimeReceived = false;
}
@ -201,7 +200,20 @@ void CHud::RenderScoreHud()
for(int t = 0; t < 2; ++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
aScore[t][0] = 0;
}
@ -490,7 +502,6 @@ void CHud::OnRender()
RenderConnectionWarning();
RenderTeambalanceWarning();
RenderVoting();
RenderRecord();
}
RenderCursor();
}
@ -526,12 +537,6 @@ void CHud::OnMessage(int MsgType, void *pRawMsg)
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()
@ -593,24 +598,3 @@ void CHud::RenderDDRaceEffects()
if(m_DDRaceTick >= 100)
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_DDRaceTick;
bool m_FinishTime;
float m_ServerRecord;
float m_PlayerRecord;
bool m_DDRaceTimeReceived;
};

View file

@ -32,13 +32,14 @@ void CScoreboard::ConKeyScoreboard(IConsole::IResult *pResult, void *pUserData)
CServerInfo 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;
}
void CScoreboard::OnReset()
{
m_Active = false;
m_ServerRecord = -1.0f;
}
void CScoreboard::OnRelease()
@ -46,6 +47,16 @@ void CScoreboard::OnRelease()
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()
{
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);
}
}
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);
TextRender()->Text(0, x+w-tw-20.0f, y, TitleFontsize, aBuf, -1);

View file

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