summaryrefslogtreecommitdiff
path: root/game/server/tf/player_vs_environment/tf_boss_battle_logic.cpp
diff options
context:
space:
mode:
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.cpp125
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