// AI_character_prone.cpp // Native state-machine replacement for ai_character_prone.script. #include "precompiled.h" #pragma hdrstop #include "../Game_local.h" void rvmAICharacterProne::Init( idAI* aiOwner ) { rvmAIObject::Init( aiOwner ); SetState( "state_Begin" ); } void rvmAICharacterProne::Destroy() { rvmAIObject::Destroy(); } stateResult_t rvmAICharacterProne::RunStateByName( const char* stateName, stateParms_t* parms ) { AI_DISPATCH_STATE( "Torso_Dead", Torso_Dead ); AI_DISPATCH_STATE( "Torso_PlayDead", Torso_PlayDead ); AI_DISPATCH_STATE( "Torso_Idle", Torso_Idle ); AI_DISPATCH_STATE( "Torso_TalkPrimary", Torso_TalkPrimary ); AI_DISPATCH_STATE( "Torso_TalkTrigger", Torso_TalkTrigger ); AI_DISPATCH_STATE( "Torso_TalkSecondary", Torso_TalkSecondary ); AI_DISPATCH_STATE( "Torso_Pain", Torso_Pain ); AI_DISPATCH_STATE( "state_Idle", state_Idle ); AI_DISPATCH_STATE( "state_Pain", state_Pain ); AI_DISPATCH_STATE( "state_Dead", state_Dead ); AI_DISPATCH_STATE( "state_Killed", state_Killed ); AI_DISPATCH_STATE( "idle_talk", idle_talk ); return rvmAIObject::RunStateByName( stateName, parms ); } stateResult_t rvmAICharacterProne::Torso_Dead( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_TORSO, "idle" ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_TORSO, 4 ) ) { return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::Torso_PlayDead( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_TORSO, "idle" ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_TORSO, 4 ) ) { return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::Torso_Idle( stateParms_t* parms ) { if ( parms->stage == 0 ) { IdleAnim( ANIMCHANNEL_TORSO, "stand" ); parms->stage = 1; } if ( Pain() ) { SetAnimState( ANIMCHANNEL_TORSO, "Torso_Pain", 4 ); return SRESULT_DONE; } return SRESULT_WAIT; } stateResult_t rvmAICharacterProne::Torso_TalkPrimary( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_TORSO, "idle" ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_TORSO, 4 ) ) { return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::Torso_TalkTrigger( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_TORSO, "idle" ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_TORSO, 4 ) ) { return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::Torso_TalkSecondary( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_TORSO, "idle" ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_TORSO, 4 ) ) { return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::Torso_Pain( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_TORSO, GetPainAnim() ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_TORSO, 4 ) ) { FinishAction( "pain" ); return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::state_Idle( stateParms_t* parms ) { if ( GetEnemy() ) { SetState( "state_Combat" ); return SRESULT_DONE; } return SRESULT_WAIT; } stateResult_t rvmAICharacterProne::state_Pain( stateParms_t* parms ) { enum { STAGE_START, STAGE_ANIM }; switch ( parms->stage ) { case STAGE_START: PlayAnim( ANIMCHANNEL_HEAD, GetPainAnim() ); parms->stage = STAGE_ANIM; return SRESULT_WAIT; case STAGE_ANIM: if ( AnimDone( ANIMCHANNEL_HEAD, 4 ) ) { FinishAction( "pain" ); return SRESULT_DONE; } return SRESULT_WAIT; } return SRESULT_ERROR; } stateResult_t rvmAICharacterProne::state_Dead( stateParms_t* parms ) { return SRESULT_DONE; } stateResult_t rvmAICharacterProne::state_Killed( stateParms_t* parms ) { StopMove(); SetAnimState( ANIMCHANNEL_TORSO, "Torso_Death", 0 ); SetAnimState( ANIMCHANNEL_LEGS, "Legs_Death", 0 ); StopThinking(); return SRESULT_DONE; } stateResult_t rvmAICharacterProne::idle_talk( stateParms_t* parms ) { return SRESULT_DONE; }