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.
146 lines
4.3 KiB
146 lines
4.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Entities for use in the Robot Destruction TF2 game mode.
|
|
//
|
|
//=========================================================================//
|
|
#ifndef PLAYER_DESTRUCTION_H
|
|
#define PLAYER_DESTRUCTION_H
|
|
#pragma once
|
|
|
|
#include "cbase.h"
|
|
#include "tf_logic_robot_destruction.h"
|
|
|
|
#ifdef CLIENT_DLL
|
|
#define CTFPlayerDestructionLogic C_TFPlayerDestructionLogic
|
|
#define CPlayerDestructionDispenser C_PlayerDestructionDispenser
|
|
#endif
|
|
|
|
//-----------------------------------------------------------------------------
|
|
class CTFPlayerDestructionLogic : public CTFRobotDestructionLogic
|
|
{
|
|
public:
|
|
#ifdef GAME_DLL
|
|
DECLARE_DATADESC();
|
|
#endif // GAME_DLL
|
|
DECLARE_CLASS( CTFPlayerDestructionLogic, CTFRobotDestructionLogic )
|
|
DECLARE_NETWORKCLASS();
|
|
|
|
virtual EType GetType() const { return TYPE_PLAYER_DESTRUCTION; }
|
|
|
|
CTFPlayerDestructionLogic();
|
|
static CTFPlayerDestructionLogic* GetPlayerDestructionLogic();
|
|
|
|
CTFPlayer* GetRedTeamLeader() const { return m_hRedTeamLeader.Get(); }
|
|
CTFPlayer* GetBlueTeamLeader() const { return m_hBlueTeamLeader.Get(); }
|
|
|
|
#ifdef GAME_DLL
|
|
virtual void Precache() OVERRIDE;
|
|
|
|
const char *GetPropModelName() const;
|
|
|
|
void CalcTeamLeader( int iTeam );
|
|
|
|
virtual void FireGameEvent( IGameEvent *pEvent ) OVERRIDE;
|
|
|
|
void InputScoreRedPoints( inputdata_t& inputdata );
|
|
void InputScoreBluePoints( inputdata_t& inputdata );
|
|
void InputEnableMaxScoreUpdating( inputdata_t& inputdata );
|
|
void InputDisableMaxScoreUpdating( inputdata_t& inputdata );
|
|
void InputSetCountdownTimer( inputdata_t& inputdata );
|
|
void InputSetCountdownImage( inputdata_t& inputdata );
|
|
void InputSetFlagResetDelay( inputdata_t& inputdata );
|
|
void InputSetPointsOnPlayerDeath( inputdata_t& inputdata );
|
|
|
|
void PlayPropDropSound( CTFPlayer *pPlayer );
|
|
void PlayPropPickupSound( CTFPlayer *pPlayer );
|
|
|
|
void CountdownThink( void );
|
|
int GetFlagResetDelay( void ){ return m_nFlagResetDelay; }
|
|
int GetPointsOnPlayerDeath( void ){ return m_nPointsOnPlayerDeath; }
|
|
virtual int GetHealDistance( void ) OVERRIDE { return m_nHealDistance; }
|
|
virtual void TeamWin( int nTeam ) OVERRIDE;
|
|
|
|
#endif // GAME_DLL
|
|
|
|
CTFPlayer *GetTeamLeader( int iTeam ) const OVERRIDE;
|
|
string_t GetCountdownImage( void ) OVERRIDE { return m_iszCountdownImage; }
|
|
virtual bool IsUsingCustomCountdownImage( void ) OVERRIDE{ return m_bUsingCountdownImage; }
|
|
|
|
private:
|
|
#ifdef GAME_DLL
|
|
void PlaySound( const char *pszSound, CTFPlayer *pPlayer );
|
|
virtual void OnRedScoreChanged() OVERRIDE;
|
|
virtual void OnBlueScoreChanged() OVERRIDE;
|
|
|
|
void EvaluatePlayerCount();
|
|
|
|
void SetCountdownImage( string_t iszCountdownImage ) { m_iszCountdownImage = iszCountdownImage; }
|
|
|
|
string_t m_iszPropModelName;
|
|
string_t m_iszPropDropSound;
|
|
string_t m_iszPropPickupSound;
|
|
|
|
int m_nMinPoints;
|
|
int m_nPointsPerPlayer;
|
|
bool m_bMaxScoreUpdatingAllowed;
|
|
|
|
int m_nFlagResetDelay;
|
|
int m_nHealDistance;
|
|
|
|
CObjectDispenser* CreateDispenser( int iTeam );
|
|
CHandle< CObjectDispenser > m_hRedDispenser;
|
|
CHandle< CObjectDispenser > m_hBlueDispenser;
|
|
|
|
COutputFloat m_OnRedScoreChanged;
|
|
COutputFloat m_OnBlueScoreChanged;
|
|
|
|
COutputEvent m_OnCountdownTimerExpired;
|
|
#endif // GAME_DLL
|
|
|
|
CNetworkVar( CHandle<CTFPlayer>, m_hRedTeamLeader );
|
|
CNetworkVar( CHandle<CTFPlayer>, m_hBlueTeamLeader );
|
|
|
|
CNetworkVar( bool, m_bUsingCountdownImage );
|
|
|
|
#ifdef CLIENT_DLL
|
|
char m_iszCountdownImage[MAX_PATH];
|
|
#else
|
|
CNetworkVar( string_t, m_iszCountdownImage );
|
|
int m_nPointsOnPlayerDeath;
|
|
#endif
|
|
};
|
|
|
|
class CPlayerDestructionDispenser :
|
|
#ifdef GAME_DLL
|
|
public CObjectDispenser
|
|
#else
|
|
public C_ObjectDispenser
|
|
#endif
|
|
{
|
|
#ifdef GAME_DLL
|
|
DECLARE_CLASS( CPlayerDestructionDispenser, CObjectDispenser )
|
|
#else
|
|
DECLARE_CLASS( CPlayerDestructionDispenser, C_ObjectDispenser )
|
|
#endif
|
|
DECLARE_NETWORKCLASS();
|
|
DECLARE_DATADESC();
|
|
public:
|
|
#ifdef GAME_DLL
|
|
virtual float GetDispenserRadius( void ) OVERRIDE
|
|
{
|
|
if ( CTFPlayerDestructionLogic::GetRobotDestructionLogic() && ( CTFPlayerDestructionLogic::GetRobotDestructionLogic()->GetType() == CTFPlayerDestructionLogic::TYPE_PLAYER_DESTRUCTION ) )
|
|
{
|
|
return CTFPlayerDestructionLogic::GetRobotDestructionLogic()->GetHealDistance();
|
|
}
|
|
|
|
return 450;
|
|
}
|
|
|
|
virtual void Spawn( void ) OVERRIDE;
|
|
void OnGoActive( void ) OVERRIDE;
|
|
void GetControlPanelInfo( int nPanelIndex, const char *&pPanelName ) OVERRIDE;
|
|
|
|
#endif
|
|
};
|
|
|
|
#endif// PLAYER_DESTRUCTION_H
|