mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-16 08:10:32 +02:00
159 lines
5.3 KiB
C++
159 lines
5.3 KiB
C++
// 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;
|
|
}
|