Portable Half-Life SDK. GoldSource and Xash3D. Crossplatform.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

167 lines
3.8 KiB

//++ BulliT
#include "hud.h"
#include "cl_util.h"
#include <string.h>
#include <stdio.h>
#include <demo_api.h>
#include "parsemsg.h"
//#include "vgui_TeamFortressViewport.h"
//#include "vgui_ScorePanel.h"
DECLARE_MESSAGE(m_CTF, CTF )
DECLARE_MESSAGE(m_CTF, CTFSound )
DECLARE_MESSAGE(m_CTF, CTFFlag )
int g_iPlayerFlag1 = 0;
int g_iPlayerFlag2 = 0;
int iTeamColors[5][3] =
{
{ 255, 170, 0 }, // HL orange (default)
{ 125, 165, 210 }, // Blue
{ 200, 90, 70 }, // Red
{ 225, 205, 45 }, // Yellow
{ 145, 215, 140 }, // Green
};
int AgHudCTF::Init(void)
{
HOOK_MESSAGE( CTF );
HOOK_MESSAGE( CTFSound );
HOOK_MESSAGE( CTFFlag );
m_iFlags = 0;
m_iFlagStatus1 = 0;
m_iFlagStatus2 = 0;
g_iPlayerFlag1 = 0;
g_iPlayerFlag2 = 0;
gHUD.AddHudElem(this);
return 1;
};
int AgHudCTF::VidInit(void)
{
int iSprite = 0;
iSprite = gHUD.GetSpriteIndex("icon_ctf_home");
m_IconFlagStatus[Home].spr = gHUD.GetSprite(iSprite);
m_IconFlagStatus[Home].rc = gHUD.GetSpriteRect(iSprite);
iSprite = gHUD.GetSpriteIndex("icon_ctf_stolen");
m_IconFlagStatus[Stolen].spr = gHUD.GetSprite(iSprite);
m_IconFlagStatus[Stolen].rc = gHUD.GetSpriteRect(iSprite);
iSprite = gHUD.GetSpriteIndex("icon_ctf_lost");
m_IconFlagStatus[Lost].spr = gHUD.GetSprite(iSprite);
m_IconFlagStatus[Lost].rc = gHUD.GetSpriteRect(iSprite);
iSprite = gHUD.GetSpriteIndex("icon_ctf_carry");
m_IconFlagStatus[Carry].spr = gHUD.GetSprite(iSprite);
m_IconFlagStatus[Carry].rc = gHUD.GetSpriteRect(iSprite);
m_iFlagStatus1 = 0;
m_iFlagStatus2 = 0;
g_iPlayerFlag1 = 0;
g_iPlayerFlag2 = 0;
return 1;
}
void AgHudCTF::Reset(void)
{
if (CTF != AgGametype() || gHUD.m_iIntermission)
m_iFlags &= ~HUD_ACTIVE;
}
int AgHudCTF::Draw(float fTime)
{
if (m_iFlagStatus1 == Off
||m_iFlagStatus2 == Off || gHUD.m_iIntermission)
{
Reset();
return 0;
}
int x = 30;
int y = ScreenHeight / 2;
//Draw Blue
if (m_IconFlagStatus[m_iFlagStatus1].spr)
{
SPR_Set(m_IconFlagStatus[m_iFlagStatus1].spr, iTeamColors[1][0], iTeamColors[1][1], iTeamColors[1][2]);
int yBlue = y - ((m_IconFlagStatus[m_iFlagStatus2].rc.bottom - m_IconFlagStatus[m_iFlagStatus2].rc.top) + 5);
SPR_DrawAdditive( 0, x, yBlue, &m_IconFlagStatus[m_iFlagStatus1].rc );
}
//Draw Red
if (m_IconFlagStatus[m_iFlagStatus2].spr)
{
//y += (m_IconFlagStatus[m_iFlagStatus2].rc.bottom - m_IconFlagStatus[m_iFlagStatus2].rc.top) + 5;
SPR_Set(m_IconFlagStatus[m_iFlagStatus2].spr, iTeamColors[2][0], iTeamColors[2][1], iTeamColors[2][2]);
SPR_DrawAdditive( 0, x, y, &m_IconFlagStatus[m_iFlagStatus2].rc );
}
return 0;
}
int AgHudCTF::MsgFunc_CTF(const char *pszName, int iSize, void *pbuf)
{
BEGIN_READ( pbuf, iSize );
m_iFlagStatus1 = READ_BYTE();
m_iFlagStatus2 = READ_BYTE();
if (m_iFlagStatus1 != Off
&&m_iFlagStatus2 != Off)
m_iFlags |= HUD_ACTIVE;
else
m_iFlags &= ~HUD_ACTIVE;
return 1;
}
static const char* s_szSounds[] =
{
"ctf/youhaveflag.wav",
"ctf/teamhaveflag.wav",
"ctf/enemyhaveflag.wav",
"ctf/blueflagreturned.wav",
"ctf/redflagreturned.wav",
"ctf/bluescores.wav",
"ctf/redscores.wav",
"ctf/blueflagstolen.wav",
"ctf/redflagstolen.wav",
//Not used but can be good to have...
"ctf/blueleads",
"ctf/redleads",
"ctf/teamstied",
"ctf/suddendeath",
"ctf/stolen"
"ctf/capture"
};
extern cvar_t* g_pcl_ctf_volume;
int AgHudCTF::MsgFunc_CTFSound(const char *pszName, int iSize, void *pbuf)
{
BEGIN_READ( pbuf, iSize );
int iSound = READ_BYTE();
if (iSound >= 0 && iSound < sizeof(s_szSounds)/sizeof(s_szSounds[0]))
gEngfuncs.pfnPlaySoundByName( s_szSounds[iSound], g_pcl_ctf_volume->value);
return 1;
}
int AgHudCTF::MsgFunc_CTFFlag(const char *pszName, int iSize, void *pbuf)
{
BEGIN_READ( pbuf, iSize );
g_iPlayerFlag1 = READ_BYTE();
g_iPlayerFlag2 = READ_BYTE();
return 1;
}
//-- Martin Webrant