Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

147 lines
4.3 KiB

5 years ago
//========= 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