// AI_character_sentry.h // Native state-machine replacement for ai_character_sentry.script. #pragma once class rvmCharSentry : public rvmCharacter { public: CLASS_PROTOTYPE( rvmCharSentry ); rvmCharSentry(); virtual void Init( idAI* aiOwner ) override; virtual void Destroy() override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: enum { RETREATING = -1, NOT_MOVING = 0, APPROACHING = 1, PLAYER_LOST = 0, PLAYER_BEHIND_ME = 1, PLAYER_OK = 2, PLAYER_AHEAD_OF_ME = 3 }; bool lead_player; bool hanging; bool awake; bool fire; float playerMoveState; idEntityPtr light; bool light_on; float nextPositionSearch; idEntityPtr ignore_enemy; float ignore_enemy_time; idVec3 lastValidPlayerPosition; bool playerPositionThread; float nextLookTime; float leadTimeout; int shotsFired; float nextFireTime; virtual stateResult_t Torso_Death( stateParms_t* parms ); virtual stateResult_t Torso_Idle( stateParms_t* parms ); virtual stateResult_t Torso_Pain( stateParms_t* parms ); virtual stateResult_t Torso_RangeAttack( stateParms_t* parms ); virtual stateResult_t Legs_Death( stateParms_t* parms ); virtual stateResult_t Legs_Idle( stateParms_t* parms ); virtual stateResult_t Legs_Walk( stateParms_t* parms ); virtual stateResult_t Legs_Fold( stateParms_t* parms ); virtual stateResult_t Legs_Folded( stateParms_t* parms ); virtual stateResult_t Legs_Unfold( stateParms_t* parms ); virtual stateResult_t Legs_Hanging( stateParms_t* parms ); virtual stateResult_t Legs_TurnLeft( stateParms_t* parms ); virtual stateResult_t Legs_TurnRight( stateParms_t* parms ); virtual stateResult_t state_Begin( stateParms_t* parms ); virtual stateResult_t updatePlayerPositionThread( stateParms_t* parms ); virtual stateResult_t path_sentry_light_on( stateParms_t* parms ); virtual stateResult_t path_sentry_light_off( stateParms_t* parms ); virtual stateResult_t path_sentry_shutdown( stateParms_t* parms ); virtual stateResult_t path_sentry_unlock_door( stateParms_t* parms ); virtual stateResult_t path_corner( stateParms_t* parms ); virtual stateResult_t path_sentry_lead_player( stateParms_t* parms ); virtual stateResult_t path_sentry_ignore_player( stateParms_t* parms ); virtual stateResult_t state_Killed( stateParms_t* parms ); virtual stateResult_t state_WaitForTrigger( stateParms_t* parms ); virtual stateResult_t state_Idle( stateParms_t* parms ); virtual stateResult_t state_FollowPath( stateParms_t* parms ); virtual stateResult_t state_Wait( stateParms_t* parms ); virtual stateResult_t state_GetCloser( stateParms_t* parms ); virtual stateResult_t state_CantReachPlayer( stateParms_t* parms ); virtual stateResult_t state_Lead( stateParms_t* parms ); virtual stateResult_t state_FindPlayer( stateParms_t* parms ); virtual stateResult_t state_Combat( stateParms_t* parms ); virtual stateResult_t combat_chase( stateParms_t* parms ); virtual stateResult_t combat_range( stateParms_t* parms ); virtual void spawn_flashlight( ); virtual void flashlight_off( ); virtual void flashlight_on( ); virtual void ignore( idEntity* ignore_ent ); virtual bool checkForEnemy( float use_fov ); virtual float checkDestinationDistance( ); virtual bool find_attack_position( ); virtual void do_attack( int attack_flags ); virtual int check_attacks( ); };