Steve Acaster's Ai Poses

This commit is contained in:
Anis A. Hireche 2016-02-26 15:53:20 +01:00
parent 443cd2d607
commit f701228a37
5 changed files with 68 additions and 13 deletions

View file

@ -563,6 +563,21 @@ bool AIPlayer::getAIMove(Move *movePtr)
}
}
Pose desiredPose = mPose;
if ( mSwimming )
desiredPose = SwimPose;
else if ( mAiPose == 1 && canCrouch() )
desiredPose = CrouchPose;
else if ( mAiPose == 2 && canProne() )
desiredPose = PronePose;
else if ( mAiPose == 3 && canSprint() )
desiredPose = SprintPose;
else if ( canStand() )
desiredPose = StandPose;
setPose( desiredPose );
// Replicate the trigger state into the move so that
// triggers can be controlled from scripts.
for( U32 i = 0; i < MaxTriggerKeys; i++ )
@ -591,6 +606,16 @@ bool AIPlayer::getAIMove(Move *movePtr)
return true;
}
void AIPlayer::setAiPose( S32 pose )
{
mAiPose = pose;
}
S32 AIPlayer::getAiPose()
{
return mAiPose;
}
/**
* Utility function to throw callbacks. Callbacks always occure
* on the datablock class.
@ -1348,3 +1373,18 @@ DefineEngineMethod( AIPlayer, clearMoveTriggers, void, ( ),,
{
object->clearMoveTriggers();
}
DefineEngineMethod( AIPlayer, setAiPose, void, ( S32 pose ),,
"@brief Sets the AiPose for an AI object.\n"
"@param pose StandPose=0, CrouchPose=1, PronePose=2, SprintPose=3.\n"
"Uses the new AiPose variable from shapebase (as defined in its PlayerData datablock).\n")
{
object->setAiPose(pose);
}
DefineEngineMethod( AIPlayer, getAiPose, S32, (),,
"@brief Get the object's current AiPose.\n"
"@return StandPose=0, CrouchPose=1, PronePose=2, SprintPose=3.\n")
{
return object->getAiPose();
}