2010-11-20 10:37:14 +00:00
|
|
|
/* (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. */
|
2010-05-29 07:25:38 +00:00
|
|
|
#include <engine/graphics.h>
|
2020-09-26 19:41:58 +00:00
|
|
|
#include <engine/shared/config.h>
|
2010-05-29 07:25:38 +00:00
|
|
|
#include <engine/textrender.h>
|
|
|
|
#include <game/generated/client_data.h>
|
2020-09-26 19:41:58 +00:00
|
|
|
#include <game/generated/protocol.h>
|
2008-08-27 15:48:50 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
#include <game/client/gameclient.h>
|
2008-08-27 15:48:50 +00:00
|
|
|
|
2011-01-17 12:46:59 +00:00
|
|
|
#include <game/client/components/motd.h>
|
2011-01-12 00:18:07 +00:00
|
|
|
#include <game/client/components/scoreboard.h>
|
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
#include "broadcast.h"
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void CBroadcast::OnReset()
|
2008-08-27 15:48:50 +00:00
|
|
|
{
|
2019-04-02 21:28:10 +00:00
|
|
|
m_BroadcastTick = 0;
|
2008-08-27 15:48:50 +00:00
|
|
|
}
|
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void CBroadcast::OnRender()
|
2008-08-27 15:48:50 +00:00
|
|
|
{
|
2015-01-11 12:22:20 +00:00
|
|
|
if(m_pClient->m_pScoreboard->Active() || m_pClient->m_pMotd->IsActive() || !g_Config.m_ClShowBroadcasts)
|
2011-01-12 00:18:07 +00:00
|
|
|
return;
|
|
|
|
|
2020-09-26 19:41:58 +00:00
|
|
|
Graphics()->MapScreen(0, 0, 300 * Graphics()->ScreenAspect(), 300);
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-02-19 10:24:58 +00:00
|
|
|
if(Client()->GameTick(g_Config.m_ClDummy) < m_BroadcastTick)
|
2008-08-27 15:48:50 +00:00
|
|
|
{
|
2010-12-16 02:17:16 +00:00
|
|
|
CTextCursor Cursor;
|
2020-09-26 19:41:58 +00:00
|
|
|
TextRender()->SetCursor(&Cursor, m_BroadcastRenderOffset, 40.0f, 12.0f, TEXTFLAG_RENDER | TEXTFLAG_STOP_AT_END);
|
|
|
|
Cursor.m_LineWidth = 300 * Graphics()->ScreenAspect() - m_BroadcastRenderOffset;
|
2010-12-16 02:17:16 +00:00
|
|
|
TextRender()->TextEx(&Cursor, m_aBroadcastText, -1);
|
2008-08-27 15:48:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void CBroadcast::OnMessage(int MsgType, void *pRawMsg)
|
2008-08-27 15:48:50 +00:00
|
|
|
{
|
2010-05-29 07:25:38 +00:00
|
|
|
if(MsgType == NETMSGTYPE_SV_BROADCAST)
|
2008-08-27 15:48:50 +00:00
|
|
|
{
|
2010-05-29 07:25:38 +00:00
|
|
|
CNetMsg_Sv_Broadcast *pMsg = (CNetMsg_Sv_Broadcast *)pRawMsg;
|
|
|
|
str_copy(m_aBroadcastText, pMsg->m_pMessage, sizeof(m_aBroadcastText));
|
2010-12-16 02:17:16 +00:00
|
|
|
CTextCursor Cursor;
|
|
|
|
TextRender()->SetCursor(&Cursor, 0, 0, 12.0f, TEXTFLAG_STOP_AT_END);
|
2020-09-26 19:41:58 +00:00
|
|
|
Cursor.m_LineWidth = 300 * Graphics()->ScreenAspect();
|
2010-12-16 02:17:16 +00:00
|
|
|
TextRender()->TextEx(&Cursor, m_aBroadcastText, -1);
|
2020-09-26 19:41:58 +00:00
|
|
|
m_BroadcastRenderOffset = 150 * Graphics()->ScreenAspect() - Cursor.m_X / 2;
|
|
|
|
m_BroadcastTick = Client()->GameTick(g_Config.m_ClDummy) + Client()->GameTickSpeed() * 10;
|
|
|
|
if(g_Config.m_ClPrintBroadcasts)
|
2014-09-23 17:06:25 +00:00
|
|
|
{
|
|
|
|
char aBuf[1024];
|
|
|
|
int i, ii;
|
2020-09-26 19:41:58 +00:00
|
|
|
for(i = 0, ii = 0; i < str_length(m_aBroadcastText); i++)
|
2014-09-23 17:06:25 +00:00
|
|
|
{
|
2020-09-26 19:41:58 +00:00
|
|
|
if(m_aBroadcastText[i] == '\n')
|
2014-09-23 17:06:25 +00:00
|
|
|
{
|
|
|
|
aBuf[ii] = '\0';
|
|
|
|
ii = 0;
|
2020-09-26 19:41:58 +00:00
|
|
|
if(aBuf[0])
|
2017-05-20 11:59:39 +00:00
|
|
|
m_pClient->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "broadcast", aBuf, true);
|
2014-09-23 17:06:25 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
aBuf[ii] = m_aBroadcastText[i];
|
|
|
|
ii++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
aBuf[ii] = '\0';
|
2020-09-26 19:41:58 +00:00
|
|
|
if(aBuf[0])
|
2017-05-20 11:59:39 +00:00
|
|
|
m_pClient->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "broadcast", aBuf, true);
|
2014-09-23 17:06:25 +00:00
|
|
|
}
|
2008-08-27 15:48:50 +00:00
|
|
|
}
|
|
|
|
}
|