// AI_character.h // Native state-machine replacement for ai_character.script. #pragma once class rvmCharacter : public rvmAIObject { public: CLASS_PROTOTYPE( rvmCharacter ); rvmCharacter(); virtual void Init( idAI* aiOwner ) override; virtual void Destroy() override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: enum { CHAR_TALK_TRIGGERED = 0, CHAR_TALK_PRIMARY = 1, CHAR_TALK_SECONDARY = 2 }; float talkMode; int talkSecondaryIndex; idStr customAnim; float customBlendOut; idStr walkAnim; bool allowTurn; bool run; bool canTalk; bool noCower; bool noCowerSaved; bool ignorePush; bool skipOutOfPath; bool followNodes; bool dontPushOthers; float lastPushTime; float pushTime; float talkEndTime; float talkChannel; float talkOriginalYaw; idEntityPtr current_path; idEntityPtr next_path; idEntityPtr listening_to_character; idEntityPtr next_listener; virtual stateResult_t Head_Idle( stateParms_t* parms ); virtual stateResult_t Anim_Disable( stateParms_t* parms ); virtual stateResult_t Head_Dead( stateParms_t* parms ); virtual stateResult_t Head_TalkHeadOnly( 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_Walk_Special( stateParms_t* parms ); virtual stateResult_t Legs_Run( stateParms_t* parms ); virtual stateResult_t Legs_TurnLeft( stateParms_t* parms ); virtual stateResult_t Legs_TurnRight( stateParms_t* parms ); virtual stateResult_t Legs_Cower( stateParms_t* parms ); virtual stateResult_t Legs_CustomCycle( stateParms_t* parms ); virtual stateResult_t Legs_CustomAnim( stateParms_t* parms ); virtual stateResult_t state_Spawner( stateParms_t* parms ); virtual stateResult_t state_Cower( stateParms_t* parms ); virtual stateResult_t state_Begin( stateParms_t* parms ); virtual stateResult_t state_TalkTrigger( stateParms_t* parms ); virtual stateResult_t state_Idle( stateParms_t* parms ); virtual stateResult_t state_Killed( stateParms_t* parms ); virtual stateResult_t idle_stand( stateParms_t* parms ); virtual stateResult_t idle_followPathEntities( stateParms_t* parms ); virtual stateResult_t idle_talk( stateParms_t* parms ); virtual stateResult_t checkBlocked( stateParms_t* parms ); virtual stateResult_t path_corner( stateParms_t* parms ); virtual stateResult_t path_anim( stateParms_t* parms ); virtual stateResult_t path_cycleanim( stateParms_t* parms ); virtual stateResult_t path_turn( stateParms_t* parms ); virtual stateResult_t path_wait( stateParms_t* parms ); virtual stateResult_t path_waitfortrigger( stateParms_t* parms ); virtual stateResult_t path_hide( stateParms_t* parms ); virtual stateResult_t path_show( stateParms_t* parms ); virtual stateResult_t path_conversation_listen( stateParms_t* parms ); virtual stateResult_t path_conversation( stateParms_t* parms ); virtual stateResult_t path_headanim( stateParms_t* parms ); virtual stateResult_t path_waitforheadanim( stateParms_t* parms ); virtual stateResult_t path_talk( stateParms_t* parms ); virtual stateResult_t path_talk_triggered( stateParms_t* parms ); virtual stateResult_t path_talk_primary( stateParms_t* parms ); virtual stateResult_t path_talk_secondary( stateParms_t* parms ); virtual stateResult_t path_lookat( stateParms_t* parms ); virtual stateResult_t state_FollowAlternatePath( stateParms_t* parms ); virtual void Anim_Disable( ); virtual void check_cower( ); virtual void target_talk( ); virtual void say_triggered( ); virtual void say_primary( ); virtual void say_secondary( ); virtual void faceTowardsEntity( idEntity* target, float duration ); virtual void playCustomCycle( const char* animname, float blendTime ); virtual void playCustomAnim( const char* animname, float blendIn, float blendOut ); virtual bool inCustomAnim( ); virtual void endCustomAnim( ); virtual void waitForCustomAnim( const char* animname, float blendIn, float blendOut ); virtual void endHeadAnim( float blend_out ); virtual float playHeadAnim( const char* animname, float blend_frames ); virtual void idle_followPathEntities( idEntity* pathnode ); virtual void executePathCommand( idEntity* pathnode ); virtual void finishPathCommand( ); virtual void cancelPathCommand( ); virtual bool getOutOfWay( ); virtual void skip_conversation( ); virtual void break_out_of_conversation( ); virtual void follow_alternate_path1( ); virtual void follow_alternate_path2( ); virtual void follow_alternate_path3( ); virtual void disable_turning( ); virtual void enable_turning( ); };