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.
256 lines
6.1 KiB
256 lines
6.1 KiB
/*** |
|
* |
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved. |
|
* |
|
* This product contains software technology licensed from Id |
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. |
|
* All Rights Reserved. |
|
* |
|
* Use, distribution, and modification of this source code and/or resulting |
|
* object code is restricted to non-commercial enhancements to products from |
|
* Valve LLC. All other use, distribution, or modification is prohibited |
|
* without written permission from Valve LLC. |
|
* |
|
****/ |
|
|
|
#include "hud.h" |
|
#include "cl_util.h" |
|
#include "parsemsg.h" |
|
|
|
#include "const.h" |
|
#include "entity_state.h" |
|
#include "cl_entity.h" |
|
#include "entity_types.h" |
|
#include "usercmd.h" |
|
#include "pm_defs.h" |
|
#include "pm_materials.h" |
|
#include "ref_params.h" |
|
#include <string.h> |
|
#include "vgui_viewport.h" |
|
#include "vgui_ScorePanel.h" |
|
|
|
#define RED_FLAG_STOLE 1 |
|
#define BLUE_FLAG_STOLE 2 |
|
#define RED_FLAG_LOST 3 |
|
#define BLUE_FLAG_LOST 4 |
|
#define RED_FLAG_ATBASE 5 |
|
#define BLUE_FLAG_ATBASE 6 |
|
|
|
#define ITEM_RUNE1_FLAG 1 |
|
#define ITEM_RUNE2_FLAG 2 |
|
#define ITEM_RUNE3_FLAG 3 |
|
#define ITEM_RUNE4_FLAG 4 |
|
|
|
DECLARE_MESSAGE(m_FlagStat, FlagStat) |
|
DECLARE_MESSAGE(m_FlagStat, RuneStat) |
|
DECLARE_MESSAGE(m_FlagStat, FlagCarrier) |
|
|
|
int CHudFlagStatus::Init(void) |
|
{ |
|
HOOK_MESSAGE( FlagStat ); |
|
HOOK_MESSAGE( RuneStat ); |
|
HOOK_MESSAGE( FlagCarrier ); |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
gHUD.AddHudElem(this); |
|
|
|
Reset(); |
|
|
|
return 1; |
|
}; |
|
|
|
int CHudFlagStatus::VidInit(void) |
|
{ |
|
m_iBlueAtBaseIndex = gHUD.GetSpriteIndex( "blue_atbase" ); |
|
m_iBlueLostIndex = gHUD.GetSpriteIndex( "blue_lost" ); |
|
m_iBlueStolenIndex = gHUD.GetSpriteIndex( "blue_stolen" ); |
|
|
|
m_iRedAtBaseIndex = gHUD.GetSpriteIndex( "red_atbase" ); |
|
m_iRedLostIndex = gHUD.GetSpriteIndex( "red_lost" ); |
|
m_iRedStolenIndex = gHUD.GetSpriteIndex( "red_stolen" ); |
|
|
|
m_iRune1Index = gHUD.GetSpriteIndex( "rune1" ); |
|
m_iRune2Index = gHUD.GetSpriteIndex( "rune2" ); |
|
m_iRune3Index = gHUD.GetSpriteIndex( "rune3" ); |
|
m_iRune4Index = gHUD.GetSpriteIndex( "rune4" ); |
|
|
|
m_hBlueAtBase = gHUD.GetSprite( m_iBlueAtBaseIndex ); |
|
m_hBlueLost = gHUD.GetSprite( m_iBlueLostIndex ); |
|
m_hBlueStolen = gHUD.GetSprite( m_iBlueStolenIndex ); |
|
|
|
m_hRedAtBase = gHUD.GetSprite( m_iRedAtBaseIndex ); |
|
m_hRedLost = gHUD.GetSprite( m_iRedLostIndex ); |
|
m_hRedStolen = gHUD.GetSprite( m_iRedStolenIndex ); |
|
|
|
m_hRune1 = gHUD.GetSprite( m_iRune1Index ); |
|
m_hRune2 = gHUD.GetSprite( m_iRune2Index ); |
|
m_hRune3 = gHUD.GetSprite( m_iRune3Index ); |
|
m_hRune4 = gHUD.GetSprite( m_iRune4Index ); |
|
|
|
// Load sprites here |
|
m_iBlueFlagIndex = gHUD.GetSpriteIndex( "b_flag_c" ); |
|
m_iRedFlagIndex = gHUD.GetSpriteIndex( "r_flag_c" ); |
|
|
|
m_hBlueFlag = gHUD.GetSprite( m_iBlueFlagIndex ); |
|
m_hRedFlag = gHUD.GetSprite( m_iRedFlagIndex ); |
|
|
|
return 1; |
|
} |
|
|
|
void CHudFlagStatus :: Reset( void ) |
|
{ |
|
return; |
|
} |
|
|
|
|
|
int CHudFlagStatus ::Draw(float flTime ) |
|
{ |
|
|
|
if ( !iDrawStatus ) |
|
return 1; |
|
|
|
int x, y; |
|
int r,g,b; |
|
|
|
r = g = b = 255; |
|
|
|
x = 20; |
|
y = ( ScreenHeight - gHUD.m_iFontHeight ) - ( gHUD.m_iFontHeight / 2 ) - 40; |
|
|
|
|
|
switch ( iBlueFlagStatus ) |
|
{ |
|
case BLUE_FLAG_STOLE: |
|
SPR_Set( m_hBlueStolen, r, g, b ); |
|
SPR_DrawHoles( 1, x, y, NULL ); |
|
break; |
|
case BLUE_FLAG_LOST: |
|
SPR_Set( m_hBlueLost, r, g, b ); |
|
SPR_DrawHoles( 1, x, y, NULL ); |
|
break; |
|
case BLUE_FLAG_ATBASE: |
|
SPR_Set( m_hBlueAtBase, r, g, b ); |
|
SPR_DrawHoles( 1, x, y, NULL ); |
|
break; |
|
} |
|
|
|
x = 50; |
|
|
|
if ( iBlueTeamScore < 10) |
|
{ |
|
x += 3; |
|
gHUD.DrawHudNumber( x, y + 4, DHN_DRAWZERO, iBlueTeamScore, 255, 255, 255 ); |
|
} |
|
else if ( iBlueTeamScore >= 10 && iBlueTeamScore < 100 ) |
|
gHUD.DrawHudNumber( x, y + 4, DHN_2DIGITS | DHN_DRAWZERO, iBlueTeamScore, 255, 255, 255 ); |
|
|
|
x = 20; |
|
y = ( ScreenHeight - gHUD.m_iFontHeight ) - ( gHUD.m_iFontHeight / 2 ) - 75; |
|
|
|
switch ( iRedFlagStatus ) |
|
{ |
|
case RED_FLAG_STOLE: |
|
SPR_Set( m_hRedStolen, r, g, b ); |
|
SPR_DrawHoles( 1, x, y, NULL ); |
|
break; |
|
case RED_FLAG_LOST: |
|
SPR_Set( m_hRedLost, r, g, b ); |
|
SPR_DrawHoles( 1, x, y, NULL ); |
|
break; |
|
case RED_FLAG_ATBASE: |
|
SPR_Set( m_hRedAtBase, r, g, b ); |
|
SPR_DrawHoles( 1, x, y, NULL ); |
|
break; |
|
} |
|
|
|
x = 50; |
|
if ( iRedTeamScore < 10) |
|
{ |
|
x += 3; |
|
gHUD.DrawHudNumber( x, y + 4, DHN_DRAWZERO, iRedTeamScore, 255, 255, 255 ); |
|
} |
|
else if ( iBlueTeamScore >= 10 && iBlueTeamScore < 100 ) |
|
gHUD.DrawHudNumber( x, y + 4, DHN_2DIGITS | DHN_DRAWZERO, iRedTeamScore, 255, 255, 255 ); |
|
|
|
x = 20; |
|
y = ( ScreenHeight - gHUD.m_iFontHeight ) - ( gHUD.m_iFontHeight / 2 ) - 110; |
|
|
|
switch ( m_iRuneStat ) |
|
{ |
|
case ITEM_RUNE1_FLAG: |
|
SPR_Set( m_hRune1, r, g, b ); |
|
SPR_Draw( 1, x, y, NULL ); |
|
break; |
|
|
|
case ITEM_RUNE2_FLAG: |
|
SPR_Set( m_hRune2, r, g, b ); |
|
SPR_Draw( 1, x, y, NULL ); |
|
break; |
|
|
|
case ITEM_RUNE3_FLAG: |
|
SPR_Set( m_hRune3, r, g, b ); |
|
SPR_Draw( 1, x, y, NULL ); |
|
break; |
|
|
|
case ITEM_RUNE4_FLAG: |
|
SPR_Set( m_hRune4, r, g, b ); |
|
SPR_Draw( 1, x, y, NULL ); |
|
break; |
|
} |
|
|
|
return 1; |
|
} |
|
|
|
int CHudFlagStatus::MsgFunc_FlagStat(const char *pszName, int iSize, void *pbuf) |
|
{ |
|
BEGIN_READ( pbuf, iSize ); |
|
|
|
iDrawStatus = READ_BYTE(); |
|
iRedFlagStatus = READ_BYTE(); |
|
iBlueFlagStatus = READ_BYTE(); |
|
|
|
iRedTeamScore = READ_BYTE(); |
|
iBlueTeamScore = READ_BYTE(); |
|
|
|
return 1; |
|
} |
|
|
|
int CHudFlagStatus::MsgFunc_RuneStat(const char *pszName, int iSize, void *pbuf) |
|
{ |
|
BEGIN_READ( pbuf, iSize ); |
|
|
|
m_iRuneStat = READ_BYTE(); |
|
|
|
return 1; |
|
} |
|
|
|
int CHudFlagStatus::MsgFunc_FlagCarrier(const char *pszName, int iSize, void *pbuf) |
|
{ |
|
BEGIN_READ( pbuf, iSize ); |
|
|
|
int index = READ_BYTE(); |
|
|
|
bool bRedFlag = false; |
|
bool bBlueFlag = false; |
|
|
|
g_PlayerExtraInfo[ index ].iHasFlag = READ_BYTE(); |
|
|
|
for ( int i = 1; i < MAX_PLAYERS + 1; i++ ) |
|
{ |
|
if ( g_PlayerExtraInfo[ i ].iHasFlag ) |
|
{ |
|
if ( g_PlayerExtraInfo[ i ].teamnumber == 1 ) |
|
bRedFlag = true; |
|
else if ( g_PlayerExtraInfo[ i ].teamnumber == 2 ) |
|
bBlueFlag = true; |
|
} |
|
} |
|
|
|
if ( !bRedFlag ) |
|
gViewPort->m_pScoreBoard->m_pImages[ 5 ]->setVisible( false ); |
|
if ( !bBlueFlag ) |
|
gViewPort->m_pScoreBoard->m_pImages[ 4 ]->setVisible( false ); |
|
|
|
return 1; |
|
}
|
|
|