You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.6 KiB
106 lines
2.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef AI_BEHAVIOR_POLICE_H |
|
#define AI_BEHAVIOR_POLICE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "ai_behavior.h" |
|
#include "ai_goal_police.h" |
|
#include "ai_sentence.h" |
|
|
|
#define PATROL_RADIUS_RATIO 2.0f |
|
#define POLICE_MAX_WARNINGS 4 |
|
|
|
class CAI_PolicingBehavior : public CAI_SimpleBehavior |
|
{ |
|
DECLARE_CLASS( CAI_PolicingBehavior, CAI_SimpleBehavior ); |
|
public: |
|
DECLARE_DATADESC(); |
|
CAI_PolicingBehavior(); |
|
|
|
enum |
|
{ |
|
// Schedules |
|
SCHED_POLICE_RETURN_FROM_HARASS = BaseClass::NEXT_SCHEDULE, |
|
SCHED_POLICE_WARN_TARGET, |
|
SCHED_POLICE_HARASS_TARGET, |
|
SCHED_POLICE_SUPPRESS_TARGET, |
|
SCHED_POLICE_FACE_ALONG_GOAL, |
|
SCHED_POLICE_TRACK_TARGET, |
|
NEXT_SCHEDULE, |
|
|
|
// Tasks |
|
TASK_POLICE_GET_PATH_TO_HARASS_GOAL = BaseClass::NEXT_TASK, |
|
TASK_POLICE_GET_PATH_TO_POLICE_GOAL, |
|
TASK_POLICE_FACE_ALONG_GOAL, |
|
TASK_POLICE_ANNOUNCE_HARASS, |
|
NEXT_TASK, |
|
|
|
// Conditions |
|
COND_POLICE_TARGET_TOO_CLOSE_HARASS = BaseClass::NEXT_CONDITION, |
|
COND_POLICE_TARGET_TOO_CLOSE_SUPPRESS, |
|
NEXT_CONDITION, |
|
}; |
|
|
|
virtual const char *GetName() { return "Policing"; } |
|
|
|
void Enable( CAI_PoliceGoal *pGoal ); |
|
void Disable( void ); |
|
bool CanSelectSchedule( void ); |
|
void BuildScheduleTestBits( void ); |
|
|
|
bool IsEnabled( void ) { return m_bEnabled; } |
|
bool TargetIsHostile( void ); |
|
|
|
bool ShouldKnockOutTarget( CBaseEntity *pTarget ); |
|
void KnockOutTarget( CBaseEntity *pTarget ); |
|
|
|
int SelectFailSchedule( int failedSchedule, int failedTask, AI_TaskFailureCode_t taskFailCode ); |
|
|
|
CBaseEntity *GetGoalTarget( void ); |
|
|
|
private: |
|
|
|
void HostSpeakSentence( const char *pSentence, SentencePriority_t nSoundPriority, SentenceCriteria_t nCriteria ); |
|
|
|
int TranslateSchedule( int scheduleType ); |
|
|
|
int SelectSchedule( void ); |
|
int SelectSuppressSchedule( void ); |
|
int SelectHarassSchedule( void ); |
|
|
|
Activity NPC_TranslateActivity( Activity newActivity ); |
|
void GatherConditions( void ); |
|
bool OverrideMoveFacing( const AILocalMoveGoal_t &move, float flInterval ); |
|
void StartTask( const Task_t *pTask ); |
|
void RunTask( const Task_t *pTask ); |
|
|
|
void AnnouncePolicing( void ); |
|
void HostSetBatonState( bool state ); |
|
bool HostBatonIsOn( void ); |
|
|
|
void SetTargetHostileDuration( float time ); |
|
bool MaintainGoalPosition( void ); |
|
|
|
protected: |
|
|
|
bool m_bEnabled; |
|
bool m_bStartPolicing; |
|
float m_flNextHarassTime; |
|
float m_flAggressiveTime; |
|
int m_nNumWarnings; |
|
bool m_bTargetIsHostile; |
|
float m_flTargetHostileTime; |
|
|
|
CHandle<CAI_PoliceGoal> m_hPoliceGoal; |
|
|
|
DEFINE_CUSTOM_SCHEDULE_PROVIDER; |
|
}; |
|
|
|
#endif // AI_BEHAVIOR_POLICE_H
|
|
|