mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 21:26:57 +00:00
1
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
// tf_bot_manager.h
|
||||
// Team Fortress NextBotManager
|
||||
// Tom Bui, May 2010
|
||||
|
||||
#ifndef TF_BOT_MANAGER_H
|
||||
#define TF_BOT_MANAGER_H
|
||||
|
||||
#include "NextBotManager.h"
|
||||
#include "tf_team.h"
|
||||
|
||||
class CTFBot;
|
||||
class CTFPlayer;
|
||||
class CTFBotSquad;
|
||||
class CStuckBotEvent;
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
// For parsing and displaying stuck events from server logs.
|
||||
class CStuckBot
|
||||
{
|
||||
public:
|
||||
CStuckBot( int id, const char *name )
|
||||
{
|
||||
m_id = id;
|
||||
Q_strncpy( m_name, name, 256 );
|
||||
}
|
||||
|
||||
bool IsMatch( int id, const char *name )
|
||||
{
|
||||
return ( id == m_id && FStrEq( name, m_name ) );
|
||||
}
|
||||
|
||||
char m_name[256];
|
||||
int m_id;
|
||||
|
||||
CUtlVector< CStuckBotEvent * > m_stuckEventVector;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
// For parsing and displaying stuck events from server logs.
|
||||
class CStuckBotEvent
|
||||
{
|
||||
public:
|
||||
Vector m_stuckSpot;
|
||||
float m_stuckDuration;
|
||||
Vector m_goalSpot;
|
||||
bool m_isGoalValid;
|
||||
|
||||
void Draw( float deltaT = 0.1f )
|
||||
{
|
||||
NDebugOverlay::Cross3D( m_stuckSpot, 5.0f, 255, 255, 0, true, deltaT );
|
||||
|
||||
if ( m_isGoalValid )
|
||||
{
|
||||
if ( m_stuckDuration > 6.0f )
|
||||
{
|
||||
NDebugOverlay::HorzArrow( m_stuckSpot, m_goalSpot, 2.0f, 255, 0, 0, 255, true, deltaT );
|
||||
}
|
||||
else if ( m_stuckDuration > 3.0f )
|
||||
{
|
||||
NDebugOverlay::HorzArrow( m_stuckSpot, m_goalSpot, 2.0f, 255, 255, 0, 255, true, deltaT );
|
||||
}
|
||||
else
|
||||
{
|
||||
NDebugOverlay::HorzArrow( m_stuckSpot, m_goalSpot, 2.0f, 0, 255, 0, 255, true, deltaT );
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
class CTFBotManager : public NextBotManager
|
||||
{
|
||||
public:
|
||||
CTFBotManager();
|
||||
virtual ~CTFBotManager();
|
||||
|
||||
virtual void Update();
|
||||
void LevelShutdown();
|
||||
|
||||
virtual void OnMapLoaded( void ); // when the server has changed maps
|
||||
virtual void OnRoundRestart( void ); // when the scenario restarts
|
||||
|
||||
bool IsAllBotTeam( int iTeam );
|
||||
bool IsInOfflinePractice() const;
|
||||
bool IsMeleeOnly() const;
|
||||
|
||||
CTFBot* GetAvailableBotFromPool();
|
||||
|
||||
void OnForceAddedBots( int iNumAdded );
|
||||
void OnForceKickedBots( int iNumKicked );
|
||||
|
||||
void ClearStuckBotData();
|
||||
CStuckBot *FindOrCreateStuckBot( int id, const char *playerClass ); // for parsing and debugging stuck bot server logs
|
||||
void DrawStuckBotData( float deltaT = 0.1f );
|
||||
|
||||
#ifdef TF_CREEP_MODE
|
||||
void OnCreepKilled( CTFPlayer *killer );
|
||||
#endif
|
||||
|
||||
bool RemoveBotFromTeamAndKick( int nTeam );
|
||||
|
||||
protected:
|
||||
void MaintainBotQuota();
|
||||
void SetIsInOfflinePractice( bool bIsInOfflinePractice );
|
||||
void RevertOfflinePracticeConvars();
|
||||
|
||||
float m_flNextPeriodicThink;
|
||||
|
||||
#ifdef TF_CREEP_MODE
|
||||
void UpdateCreepWaves();
|
||||
CountdownTimer m_creepWaveTimer;
|
||||
|
||||
void SpawnCreep( int team, CTFBotSquad *squad );
|
||||
void SpawnCreepWave( int team );
|
||||
|
||||
int m_creepExperience[ TF_TEAM_COUNT ];
|
||||
#endif
|
||||
|
||||
void UpdateMedievalBossScenario();
|
||||
bool m_isMedeivalBossScenarioSetup;
|
||||
void SetupMedievalBossScenario();
|
||||
|
||||
CUtlVector< CBaseEntity * > m_archerSpawnVector;
|
||||
|
||||
struct ArcherAssignmentInfo
|
||||
{
|
||||
CHandle< CBaseCombatCharacter > m_archer;
|
||||
CHandle< CBaseEntity > m_mark;
|
||||
};
|
||||
CUtlVector< ArcherAssignmentInfo > m_archerMarkVector;
|
||||
|
||||
CountdownTimer m_archerTimer;
|
||||
|
||||
CUtlVector< CStuckBot * > m_stuckBotVector;
|
||||
CountdownTimer m_stuckDisplayTimer;
|
||||
};
|
||||
|
||||
// singleton accessor
|
||||
CTFBotManager &TheTFBots( void );
|
||||
|
||||
#endif // TF_BOT_MANAGER_H
|
||||
Reference in New Issue
Block a user