//========= 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 m_hPoliceGoal; DEFINE_CUSTOM_SCHEDULE_PROVIDER; }; #endif // AI_BEHAVIOR_POLICE_H