diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/episodic/ai_behavior_alyx_injured.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/episodic/ai_behavior_alyx_injured.h')
| -rw-r--r-- | game/server/episodic/ai_behavior_alyx_injured.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/game/server/episodic/ai_behavior_alyx_injured.h b/game/server/episodic/ai_behavior_alyx_injured.h new file mode 100644 index 0000000..2eb1ff1 --- /dev/null +++ b/game/server/episodic/ai_behavior_alyx_injured.h @@ -0,0 +1,95 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: FIXME: This will ultimately become a more generic implementation +// +//============================================================================= + +#ifndef AI_BEHAVIOR_ALYX_INJURED_H +#define AI_BEHAVIOR_ALYX_INJURED_H +#ifdef _WIN32 +#pragma once +#endif + +#include "utlmap.h" + +extern bool IsAlyxInInjuredMode( void ); + +// +// +// + +class CAI_InjuredFollowGoal : public CAI_FollowGoal +{ + DECLARE_CLASS( CAI_InjuredFollowGoal, CAI_FollowGoal ); + +public: + + virtual void EnableGoal( CAI_BaseNPC *pAI ); + virtual void DisableGoal( CAI_BaseNPC *pAI ); + + DECLARE_DATADESC(); +}; + +// +// +// + +class CAI_BehaviorAlyxInjured : public CAI_FollowBehavior +{ + DECLARE_CLASS( CAI_BehaviorAlyxInjured, CAI_FollowBehavior ); + DECLARE_DATADESC(); + +public: + CAI_BehaviorAlyxInjured( void ); + + virtual const char *GetName( void ) { return "AlyxInjuredFollow"; } + virtual Activity NPC_TranslateActivity( Activity nActivity ); + virtual int TranslateSchedule( int scheduleType ); + virtual void Spawn( void ); + virtual void OnRestore( void ); + virtual void StartTask( const Task_t *pTask ); + virtual int SelectFailSchedule( int failedSchedule, int failedTask, AI_TaskFailureCode_t taskFailCode ); + virtual void GatherConditions( void ); + virtual Activity GetFlinchActivity( bool bHeavyDamage, bool bGesture ); + + enum + { + // Schedules + SCHED_INJURED_COWER = BaseClass::NEXT_SCHEDULE, + SCHED_INJURED_FEAR_FACE, + SCHED_INJURED_RUN_FROM_ENEMY, + NEXT_SCHEDULE, + + // Tasks + TASK_FIND_INJURED_COVER_FROM_ENEMY = BaseClass::NEXT_TASK, + NEXT_TASK, + + // Conditions + COND_INJURED_TOO_FAR_FROM_PLAYER = BaseClass::NEXT_CONDITION, + COND_INJURED_OVERWHELMED, + NEXT_CONDITION + }; + + bool IsReadinessCapable( void ) { return ( IsInjured() == false ); } // Never use the readiness system when injured + bool IsInjured( void ) const; + +private: + + void SpeakIfAllowed( AIConcept_t concept ); + bool ShouldRunToCover( void ); + bool ShouldRunToFollowGoal( void ); + bool FindThreatDirection2D( const Vector &vecSource, Vector *vecOut ); + bool FindCoverFromEnemyBehindTarget( CBaseEntity *pTarget, float flRadius, Vector *vecOut ); + void PopulateActivityMap( void ); + int NumKnownEnemiesInRadius( const Vector &vecSource, float flRadius ); + + CUtlMap<Activity,Activity> m_ActivityMap; + + float m_flNextWarnTime; + +protected: + DEFINE_CUSTOM_SCHEDULE_PROVIDER; +}; + + +#endif // AI_BEHAVIOR_ALYX_INJURED_H |