diff options
Diffstat (limited to 'game/server/tf/player_vs_environment/tf_boss_battle_logic.cpp')
| -rw-r--r-- | game/server/tf/player_vs_environment/tf_boss_battle_logic.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/game/server/tf/player_vs_environment/tf_boss_battle_logic.cpp b/game/server/tf/player_vs_environment/tf_boss_battle_logic.cpp new file mode 100644 index 0000000..6e0a66d --- /dev/null +++ b/game/server/tf/player_vs_environment/tf_boss_battle_logic.cpp @@ -0,0 +1,125 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// tf_boss_battle_logic.cpp +// Boss battle game mode singleton manager +// Michael Booth, April 2011 + +#include "cbase.h" + +#ifdef TF_RAID_MODE + +#include "tf_team.h" +#include "bot/map_entities/tf_bot_generator.h" +#include "player_vs_environment/tf_boss_battle_logic.h" + +CBossBattleLogic *g_pBossBattleLogic = NULL; + + +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +BEGIN_DATADESC( CBossBattleLogic ) + DEFINE_THINKFUNC( Update ), +END_DATADESC() + +LINK_ENTITY_TO_CLASS( tf_logic_boss_battle, CBossBattleLogic ); + + +ConVar tf_bot_npc_minion_wave_launch_count( "tf_bot_npc_minion_wave_launch_count", "0"/*, FCVAR_CHEAT*/ ); +ConVar tf_bot_npc_minion_wave_initial_launch_interval( "tf_bot_npc_minion_wave_initial_launch_interval", "15"/*, FCVAR_CHEAT*/ ); +ConVar tf_bot_npc_minion_wave_launch_interval( "tf_bot_npc_minion_wave_launch_interval", "30"/*, FCVAR_CHEAT*/ ); + +ConVar tf_bot_npc_grunt_wave_launch_count( "tf_bot_npc_grunt_wave_launch_count", "2"/*, FCVAR_CHEAT*/ ); +ConVar tf_bot_npc_grunt_wave_initial_launch_interval( "tf_bot_grunt_wave_initial_launch_interval", "25"/*, FCVAR_CHEAT*/ ); +ConVar tf_bot_npc_grunt_wave_launch_interval( "tf_bot_npc_grunt_wave_launch_interval", "30"/*, FCVAR_CHEAT*/ ); + + +//------------------------------------------------------------------------- +CBossBattleLogic::CBossBattleLogic() +{ + ListenForGameEvent( "teamplay_round_win" ); + ListenForGameEvent( "teamplay_round_start" ); +} + + +//------------------------------------------------------------------------- +CBossBattleLogic::~CBossBattleLogic() +{ + g_pBossBattleLogic = NULL; +} + + +//------------------------------------------------------------------------- +void CBossBattleLogic::Spawn( void ) +{ + BaseClass::Spawn(); + + Reset(); + + SetThink( &CBossBattleLogic::Update ); + SetNextThink( gpGlobals->curtime ); + + g_pBossBattleLogic = this; +} + + +//------------------------------------------------------------------------- +void CBossBattleLogic::Reset( void ) +{ + // unspawn entire red team + CTeam *defendingTeam = GetGlobalTeam( TF_TEAM_RED ); + int i; + for( i=0; i<defendingTeam->GetNumPlayers(); ++i ) + { + engine->ServerCommand( UTIL_VarArgs( "kickid %d\n", defendingTeam->GetPlayer(i)->GetUserID() ) ); + } + + // remove all minions + CBaseEntity *minion = NULL; + while( ( minion = gEntList.FindEntityByClassname( minion, "bot_npc_minion" ) ) != NULL ) + { + UTIL_Remove( minion ); + } +} + + +//------------------------------------------------------------------------- +void CBossBattleLogic::OnRoundStart( void ) +{ + if ( !TFGameRules() || !TFGameRules()->IsBossBattleMode() ) + return; + + Reset(); +} + + +//-------------------------------------------------------------------------------------------------------- +void CBossBattleLogic::FireGameEvent( IGameEvent *event ) +{ + const char *eventName = event->GetName(); + + if ( !Q_strcmp( eventName, "teamplay_round_win" ) ) + { + if ( event->GetInt( "team" ) == TF_TEAM_RED ) + { + } + } + else if ( !Q_strcmp( eventName, "teamplay_round_start" ) ) + { + OnRoundStart(); + } +} + + +//-------------------------------------------------------------------------------------------------------- +void CBossBattleLogic::Update( void ) +{ + VPROF_BUDGET( "CBossBattleLogic::Update", "Game" ); + + const float deltaT = 0.33f; + SetNextThink( gpGlobals->curtime + deltaT ); + + if ( !TFGameRules()->IsBossBattleMode() ) + return; +} + + +#endif // TF_RAID_MODE |