diff options
Diffstat (limited to 'game/shared/tf/tf_logic_halloween_2014.h')
| -rw-r--r-- | game/shared/tf/tf_logic_halloween_2014.h | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/game/shared/tf/tf_logic_halloween_2014.h b/game/shared/tf/tf_logic_halloween_2014.h new file mode 100644 index 0000000..e40ffab --- /dev/null +++ b/game/shared/tf/tf_logic_halloween_2014.h @@ -0,0 +1,286 @@ +//========= 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
\ No newline at end of file |