//========= 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