Team Fortress 2 Source Code as on 22/4/2020
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.
 
 
 
 
 
 

286 lines
7.5 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Entities for use in the Robot Destruction TF2 game mode.
//
//=========================================================================//
#ifndef TF_LOGIC_HALLOWEEN_2014_H
#define TF_LOGIC_HALLOWEEN_2014_H
#include "cbase.h"
#include "tf_shareddefs.h"
#ifdef GAME_DLL
#include "tf_player.h"
#else
#include "c_tf_player.h"
#endif
#ifdef CLIENT_DLL
#define CTFMinigameLogic C_TFMinigameLogic
#define CTFMiniGame C_TFMiniGame
#define CTFHalloweenMinigame C_TFHalloweenMinigame
#define CTFHalloweenMinigame_FallingPlatforms C_TFHalloweenMinigame_FallingPlatforms
#endif
#define MINIGAME_INVALID -1
DECLARE_AUTO_LIST( IMinigameAutoList );
class CTFMiniGame : public CBaseEntity
#ifdef GAME_DLL
, public CGameEventListener
#endif
, public IMinigameAutoList
{
public:
enum EScoringType
{
SCORING_TYPE_POINTS = 0,
SCORING_TYPE_PLAYERS_ALIVE,
NUM_SCORING_TYPES
};
enum EMinigameType
{
MINIGAME_GENERIC = 0,
MINIGAME_HALLOWEEN2014_COLLECTION,
MINIGAME_HALLOWEEN2014_PLATFORMS,
MINIGAME_HALLOWEEN2014_SOCCER,
// don't change the order of these first three types because the TF_HALLOWEEN_DOOMSDAY_WIN_MINIROUNDS achievement depends on it
NUM_MINIGAME_TYPES
};
DECLARE_CLASS( CTFMiniGame, CBaseEntity )
DECLARE_NETWORKCLASS();
#ifdef GAME_DLL
DECLARE_DATADESC();
#endif
CTFMiniGame();
#ifdef GAME_DLL
virtual void Spawn() OVERRIDE;
virtual void Precache() OVERRIDE;
virtual void FireGameEvent( IGameEvent * event ) OVERRIDE;
virtual int UpdateTransmitState() OVERRIDE { return SetTransmitState( FL_EDICT_ALWAYS ); }
void InputScoreTeamRed( inputdata_t &inputdata );
void InputScoreTeamBlue( inputdata_t &inputdata );
void InputChangeHudResFile( inputdata_t &inputdata );
virtual void ScorePointsForTeam( int nTeamNum, int nPoints );
virtual void TeleportAllPlayers();
virtual void OnTeleportPlayerToMinigame( CTFPlayer *pPlayer );
virtual void ReturnAllPlayers();
const char *GetTeamSpawnPointName( int nTeamNum ) const;
const bool AllowedInRandom() const { return m_bMinigameAllowedInRamdomPool; }
virtual void UpdateDeadPlayers( int nTeam, COutputEvent& eventWin, COutputEvent& eventAllDead, bool& bCanWin );
EMinigameType GetMinigameType() const { return m_eMinigameType; }
void SetAdvantagedTeam ( int iAdvantageTeam ) { m_iAdvantagedTeam = iAdvantageTeam; }
#else
const char *GetResFile() const { return m_pszHudResFile; }
int GetMaxScore( void ) const { return m_nMaxScoreForMiniGame; }
int GetScoreForTeam( int nTeamNum ) const;
#endif
protected:
#ifdef GAME_DLL
virtual void InternalHandleInputScore( inputdata_t &inputdata ){}
virtual void SuddenDeathTimeStartThink();
COutputEvent m_OnRedHitMaxScore;
COutputEvent m_OnBlueHitMaxScore;
COutputEvent m_OnTeleportToMinigame;
COutputEvent m_OnReturnFromMinigame;
COutputEvent m_OnAllRedDead;
COutputEvent m_OnAllBlueDead;
COutputEvent m_OnSuddenDeathStart;
const char *m_pszTeamSpawnPoint[ TF_TEAM_COUNT ];
bool m_bMinigameAllowedInRamdomPool;
bool m_bIsActive;
string_t m_iszHudResFile;
EMinigameType m_eMinigameType;
string_t m_iszYourTeamScoreSound;
string_t m_iszEnemyTeamScoreSound;
float m_flSuddenDeathTime; // -1: No sudden death, 0: In sudden death, >0: Sudden death time.
int m_iAdvantagedTeam;
#endif
CNetworkString( m_pszHudResFile, MAX_PATH );
CNetworkVar( int, m_nMaxScoreForMiniGame );
CNetworkArray( int, m_nMinigameTeamScore, TF_TEAM_COUNT );
CNetworkVar( EScoringType, m_eScoringType );
};
class CTFHalloweenMinigame : public CTFMiniGame
{
DECLARE_CLASS( CTFHalloweenMinigame, CTFMiniGame )
DECLARE_NETWORKCLASS();
public:
#ifdef GAME_DLL
CTFHalloweenMinigame();
DECLARE_DATADESC();
virtual void Spawn() OVERRIDE;
virtual void FireGameEvent( IGameEvent * event ) OVERRIDE;
virtual void TeleportAllPlayers() OVERRIDE;
virtual void OnTeleportPlayerToMinigame( CTFPlayer *pPlayer ) OVERRIDE;
virtual void ReturnAllPlayers() OVERRIDE;
void InputKartWinAnimationRed( inputdata_t &inputdata );
void InputKartWinAnimationBlue( inputdata_t &inputdata );
void InputKartLoseAnimationRed( inputdata_t &inputdata );
void InputKartLoseAnimationBlue( inputdata_t &inputdata );
void InputEnableSpawnBoss( inputdata_t &inputdata );
void InputDisableSpawnBoss( inputdata_t &inputdata );
protected:
virtual void InternalHandleInputScore( inputdata_t &inputdata ) OVERRIDE;
private:
void TeleportAllPlayersThink();
EHANDLE m_hBossSpawnPoint;
EHANDLE m_hHalloweenBoss;
#endif // GAME_DLL
};
class CTFHalloweenMinigame_FallingPlatforms : public CTFHalloweenMinigame
{
DECLARE_CLASS( CTFHalloweenMinigame_FallingPlatforms, CTFHalloweenMinigame )
DECLARE_NETWORKCLASS();
public:
#ifdef GAME_DLL
CTFHalloweenMinigame_FallingPlatforms();
DECLARE_DATADESC();
void InputChoosePlatform( inputdata_t &inputdata );
virtual void FireGameEvent( IGameEvent * event ) OVERRIDE;
COutputInt m_OutputSafePlatform;
COutputInt m_OutputRemovePlatform;
private:
CCopyableUtlVector< int > m_vecRemainingPlatforms;
#endif
};
class CTFMinigameLogic : public CBaseEntity
{
DECLARE_CLASS( CTFMinigameLogic, CBaseEntity )
DECLARE_NETWORKCLASS();
public:
CTFMinigameLogic();
virtual ~CTFMinigameLogic();
static CTFMinigameLogic* GetMinigameLogic() { return m_sMinigameLogic; }
CTFMiniGame *GetActiveMinigame() const { return m_hActiveMinigame; }
#ifdef GAME_DLL
DECLARE_DATADESC();
virtual int UpdateTransmitState() OVERRIDE { return SetTransmitState( FL_EDICT_ALWAYS ); }
void InputReturnFromMinigame( inputdata_t &inputdata );
void InputTeleportToMinigame( inputdata_t &inputdata );
void InputSetAdvantageTeam( inputdata_t &inputdata );
void InputTeleportToRandomMinigame( inputdata_t &inputdata );
#endif
protected:
static CTFMinigameLogic* m_sMinigameLogic;
#ifdef GAME_DLL
virtual void TeleportToMinigame( int nMiniGameIndex );
virtual void ReturnFromMinigame();
int m_iAdvantagedTeam;
#endif
CNetworkHandle( CTFMiniGame, m_hActiveMinigame );
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CTFHalloweenFortuneTeller : public CBaseAnimating
#ifdef GAME_DLL
, public CGameEventListener
#endif
{
DECLARE_CLASS( CTFHalloweenFortuneTeller, CBaseAnimating );
DECLARE_DATADESC();
enum ETellerType
{
TELLER_TYPE_EVERYBODY = 0,
TELLER_TYPE_PERSONAL,
NUM_TELLER_TYPES
};
public:
CTFHalloweenFortuneTeller();
~CTFHalloweenFortuneTeller();
virtual void Spawn() OVERRIDE;
virtual void UpdateOnRemove() OVERRIDE;
#ifdef GAME_DLL
void InputEnableFortuneTelling( inputdata_t & );
void InputDisableFortuneTelling( inputdata_t & );
void InputStartFortuneTelling( inputdata_t & );
void InputEndFortuneTelling( inputdata_t & );
#endif // GAME_DLL
protected:
virtual void Precache() OVERRIDE;
#ifdef GAME_DLL
void FireGameEvent( IGameEvent* pEvent );
void UpdateFortuneTellerTime();
void PauseTimer();
void ResetTimer();
void StartFortuneWarning();
void StartFortuneTell();
void EndFortuneTell();
void TellFortune();
void ApplyFortuneEffect();
void StopTalkingAnim();
void DanceThink();
void SpeakThink();
#endif // GAME_DLL
private:
#ifdef GAME_DLL
COutputEvent m_OnFortuneWarning;
COutputEvent m_OnFortuneTold;
COutputEvent m_OnFortuneCurse;
COutputEvent m_OnFortuneEnd;
class CConditionFortuneTellerEffect* m_pActiveFortune;
string_t m_iszRedTeleport;
string_t m_iszBlueTeleport;
bool m_bUseTimer;
bool m_bWasUsingTimer;
float m_flStartTime;
float m_flPauseTime;
#endif // GAME_DLL
};
#endif // TF_LOGIC_HALLOWEEN_2014