mirror of https://github.com/FWGS/hlsdk-xash3d
141 lines
2.7 KiB
C++
141 lines
2.7 KiB
C++
/***
|
|
*
|
|
* (C) 2008 Vyacheslav Dzhura
|
|
*
|
|
****/
|
|
//
|
|
// mode.cpp
|
|
//
|
|
// implementation of CHudModeIcon class
|
|
//
|
|
|
|
#include "hud.h"
|
|
#include "cl_util.h"
|
|
#include "parsemsg.h"
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
DECLARE_MESSAGE(m_AlienCrosshair, AlienState)
|
|
|
|
// gHUD.m_AlienCrosshair.m_iState
|
|
|
|
/*
|
|
class CHudAlienCrosshair: public CHudBase
|
|
{
|
|
public:
|
|
int Init( void );
|
|
int VidInit( void );
|
|
int Draw(float flTime);
|
|
void Reset( void );
|
|
int MsgFunc_AlienState(const char *pszName, int iSize, void *pbuf );
|
|
|
|
private:
|
|
HSPRITE m_hCrosshair[4];
|
|
wrect_t *m_prcCrosshair[4];
|
|
int m_iState;
|
|
};
|
|
*/
|
|
|
|
int CHudAlienCrosshair::Init(void)
|
|
{
|
|
m_iState = 0;
|
|
|
|
HOOK_MESSAGE(AlienState);
|
|
|
|
m_iFlags |= HUD_ACTIVE;
|
|
m_iFlags |= HUD_ALIEN;
|
|
|
|
gHUD.AddHudElem(this);
|
|
|
|
return 1;
|
|
};
|
|
|
|
void CHudAlienCrosshair::Reset(void)
|
|
{
|
|
m_iState = 0;
|
|
}
|
|
|
|
int CHudAlienCrosshair::VidInit(void)
|
|
{
|
|
int sCenter = gHUD.GetSpriteIndex( "islave_center" );
|
|
int sCharged = gHUD.GetSpriteIndex( "islave_charged" );
|
|
int sInner = gHUD.GetSpriteIndex( "islave_inner" );
|
|
int sOuter = gHUD.GetSpriteIndex( "islave_outer" );
|
|
|
|
if ( (sCenter == -1) || (sCharged == -1) || (sInner == -1) || (sOuter == -1) )
|
|
return 0;
|
|
|
|
m_hCrosshair[0] = gHUD.GetSprite(sOuter);
|
|
m_hCrosshair[1] = gHUD.GetSprite(sInner);
|
|
m_hCrosshair[2] = gHUD.GetSprite(sCenter);
|
|
m_hCrosshair[3] = gHUD.GetSprite(sCharged);
|
|
|
|
m_prcCrosshair[0] = &gHUD.GetSpriteRect( sOuter );
|
|
m_prcCrosshair[1] = &gHUD.GetSpriteRect( sInner );
|
|
m_prcCrosshair[2] = &gHUD.GetSpriteRect( sCenter );
|
|
m_prcCrosshair[3] = &gHUD.GetSpriteRect( sCharged );
|
|
|
|
return 1;
|
|
};
|
|
|
|
int CHudAlienCrosshair:: MsgFunc_AlienState(const char *pszName, int iSize, void *pbuf )
|
|
{
|
|
BEGIN_READ( pbuf, iSize );
|
|
m_iState = READ_BYTE();
|
|
|
|
return 1;
|
|
}
|
|
|
|
int CHudAlienCrosshair::Draw(float flTime)
|
|
{
|
|
if ( gHUD.m_iHideHUDDisplay & ( HIDEHUD_ALL ) )
|
|
return 1;
|
|
|
|
if ( !gHUD.m_bAlienMode )
|
|
return 1;
|
|
|
|
if (m_iState > 3)
|
|
m_iState = 3;
|
|
|
|
int chR, chG, chB;
|
|
chR = chG = chB = 0;
|
|
|
|
for (int i = 0; i < 4; i++ )
|
|
{
|
|
if ( i > m_iState )
|
|
break;
|
|
|
|
m_hActiveSprite = m_hCrosshair[i];
|
|
m_prcActiveRect = m_prcCrosshair[i];
|
|
|
|
if ( i < 3 )
|
|
{ // 180, 255, 96
|
|
chR = 180;
|
|
chG = 255;
|
|
chB = 96;
|
|
} else
|
|
{
|
|
chR = 255;
|
|
chG = 0;
|
|
chB = 0;
|
|
}
|
|
|
|
if (( i == 2 ) && ( m_iState == 3 ))
|
|
continue;
|
|
|
|
int x,y, SWidth, SHeight;
|
|
SWidth = m_prcActiveRect->right - m_prcActiveRect->left;
|
|
SHeight = m_prcActiveRect->bottom - m_prcActiveRect->top; // SPR_Height(m_hActiveSprite,0);
|
|
x = ScreenWidth / 2 - ( SWidth / 2 );
|
|
y = ScreenHeight / 2 - ( SHeight / 2 );
|
|
|
|
SPR_Set(m_hActiveSprite, chR, chG, chB );
|
|
SPR_DrawAdditive(0, x, y, m_prcActiveRect);
|
|
}
|
|
|
|
//char szMes[20];
|
|
//sprintf(szMes,"%d %d/%d", m_fMode, SWidth, SHeight);
|
|
//gHUD.DrawHudString( 5, 5, ScreenWidth, szMes, r, g, b);
|
|
return 1;
|
|
} |