mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-18 11:44:51 +02:00
Missing file from previous checkin.
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
// AI_follower.cpp
|
||||
// Native state-machine replacement for ai_follower(1).script.
|
||||
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
#include "../Game_local.h"
|
||||
|
||||
|
||||
CLASS_DECLARATION( rvmAIObject, rvmFollower )
|
||||
END_CLASS
|
||||
|
||||
void rvmFollower::Init( idAI* aiOwner ) {
|
||||
rvmAIObject::Init( aiOwner );
|
||||
SetState( "state_Begin" );
|
||||
}
|
||||
|
||||
void rvmFollower::Destroy() {
|
||||
rvmAIObject::Destroy();
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::RunStateByName( const char* stateName, stateParms_t* parms ) {
|
||||
AI_DISPATCH_STATE( "Torso_CustomCycle", Torso_CustomCycle );
|
||||
AI_DISPATCH_STATE( "Torso_CustomAnim", Torso_CustomAnim );
|
||||
AI_DISPATCH_STATE( "Torso_Death", Torso_Death );
|
||||
AI_DISPATCH_STATE( "Torso_Idle", Torso_Idle );
|
||||
AI_DISPATCH_STATE( "Torso_Pain", Torso_Pain );
|
||||
AI_DISPATCH_STATE( "Legs_Death", Legs_Death );
|
||||
AI_DISPATCH_STATE( "Legs_Idle", Legs_Idle );
|
||||
AI_DISPATCH_STATE( "Legs_Walk", Legs_Walk );
|
||||
AI_DISPATCH_STATE( "Legs_Run", Legs_Run );
|
||||
AI_DISPATCH_STATE( "Legs_TurnLeft", Legs_TurnLeft );
|
||||
AI_DISPATCH_STATE( "Legs_TurnRight", Legs_TurnRight );
|
||||
AI_DISPATCH_STATE( "state_Idle", state_Idle );
|
||||
AI_DISPATCH_STATE( "state_Killed", state_Killed );
|
||||
AI_DISPATCH_STATE( "state_Follow", state_Follow );
|
||||
AI_DISPATCH_STATE( "getCloser", getCloser );
|
||||
return rvmAIObject::RunStateByName( stateName, parms );
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::Torso_CustomCycle( 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 rvmFollower::Torso_CustomAnim( 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 rvmFollower::Torso_Death( 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 rvmFollower::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 rvmFollower::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 rvmFollower::Legs_Death( stateParms_t* parms ) {
|
||||
enum { STAGE_START, STAGE_ANIM };
|
||||
switch ( parms->stage ) {
|
||||
case STAGE_START:
|
||||
PlayAnim( ANIMCHANNEL_LEGS, "idle" );
|
||||
parms->stage = STAGE_ANIM;
|
||||
return SRESULT_WAIT;
|
||||
case STAGE_ANIM:
|
||||
if ( AnimDone( ANIMCHANNEL_LEGS, 4 ) ) { return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
return SRESULT_ERROR;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::Legs_Idle( stateParms_t* parms ) {
|
||||
if ( parms->stage == 0 ) { IdleAnim( ANIMCHANNEL_LEGS, "stand" ); parms->stage = 1; }
|
||||
if ( MovingForward() ) { SetAnimState( ANIMCHANNEL_LEGS, "Legs_Walk", 8 ); return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::Legs_Walk( stateParms_t* parms ) {
|
||||
if ( parms->stage == 0 ) { PlayCycle( ANIMCHANNEL_LEGS, "walk" ); parms->stage = 1; }
|
||||
if ( !MovingForward() ) { SetAnimState( ANIMCHANNEL_LEGS, "Legs_Idle", 8 ); return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::Legs_Run( stateParms_t* parms ) {
|
||||
if ( parms->stage == 0 ) { PlayCycle( ANIMCHANNEL_LEGS, "run" ); parms->stage = 1; }
|
||||
if ( !MovingForward() ) { SetAnimState( ANIMCHANNEL_LEGS, "Legs_Idle", 8 ); return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::Legs_TurnLeft( stateParms_t* parms ) {
|
||||
enum { STAGE_START, STAGE_ANIM };
|
||||
switch ( parms->stage ) {
|
||||
case STAGE_START:
|
||||
PlayAnim( ANIMCHANNEL_LEGS, "idle" );
|
||||
parms->stage = STAGE_ANIM;
|
||||
return SRESULT_WAIT;
|
||||
case STAGE_ANIM:
|
||||
if ( AnimDone( ANIMCHANNEL_LEGS, 4 ) ) { return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
return SRESULT_ERROR;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::Legs_TurnRight( stateParms_t* parms ) {
|
||||
enum { STAGE_START, STAGE_ANIM };
|
||||
switch ( parms->stage ) {
|
||||
case STAGE_START:
|
||||
PlayAnim( ANIMCHANNEL_LEGS, "idle" );
|
||||
parms->stage = STAGE_ANIM;
|
||||
return SRESULT_WAIT;
|
||||
case STAGE_ANIM:
|
||||
if ( AnimDone( ANIMCHANNEL_LEGS, 4 ) ) { return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
return SRESULT_ERROR;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::state_Idle( stateParms_t* parms ) {
|
||||
if ( GetEnemy() ) { SetState( "state_Combat" ); return SRESULT_DONE; }
|
||||
return SRESULT_WAIT;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::state_Killed( stateParms_t* parms ) {
|
||||
StopMove();
|
||||
SetAnimState( ANIMCHANNEL_TORSO, "Torso_Death", 0 );
|
||||
SetAnimState( ANIMCHANNEL_LEGS, "Legs_Death", 0 );
|
||||
StopThinking();
|
||||
return SRESULT_DONE;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::state_Follow( stateParms_t* parms ) {
|
||||
return SRESULT_DONE;
|
||||
}
|
||||
|
||||
stateResult_t rvmFollower::getCloser( stateParms_t* parms ) {
|
||||
return SRESULT_DONE;
|
||||
}
|
||||
|
||||
float rvmFollower::should_turn_left( ) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
float rvmFollower::should_turn_right( ) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void rvmFollower::playCustomCycle( const char* animname, float blendTime ) {
|
||||
SetAnimState( ANIMCHANNEL_TORSO, "Torso_CustomCycle", idMath::Ftoi( blendTime ) );
|
||||
PlayCycle( ANIMCHANNEL_TORSO, animname );
|
||||
}
|
||||
|
||||
void rvmFollower::playCustomAnim( const char* animname, float blendIn, float blendOut ) {
|
||||
SetAnimState( ANIMCHANNEL_TORSO, "Torso_CustomAnim", idMath::Ftoi( blendIn ) );
|
||||
PlayAnim( ANIMCHANNEL_TORSO, animname );
|
||||
}
|
||||
Reference in New Issue
Block a user