mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-29 16:25:42 +00:00
Merge pull request #1530 from GarageGames/AiPlayerPoses
Steve Acaster's Ai Poses
This commit is contained in:
commit
3984a4ec09
5 changed files with 68 additions and 13 deletions
|
|
@ -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
|
// Replicate the trigger state into the move so that
|
||||||
// triggers can be controlled from scripts.
|
// triggers can be controlled from scripts.
|
||||||
for( U32 i = 0; i < MaxTriggerKeys; i++ )
|
for( U32 i = 0; i < MaxTriggerKeys; i++ )
|
||||||
|
|
@ -591,6 +606,16 @@ bool AIPlayer::getAIMove(Move *movePtr)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AIPlayer::setAiPose( S32 pose )
|
||||||
|
{
|
||||||
|
mAiPose = pose;
|
||||||
|
}
|
||||||
|
|
||||||
|
S32 AIPlayer::getAiPose()
|
||||||
|
{
|
||||||
|
return mAiPose;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility function to throw callbacks. Callbacks always occure
|
* Utility function to throw callbacks. Callbacks always occure
|
||||||
* on the datablock class.
|
* on the datablock class.
|
||||||
|
|
@ -1348,3 +1373,18 @@ DefineEngineMethod( AIPlayer, clearMoveTriggers, void, ( ),,
|
||||||
{
|
{
|
||||||
object->clearMoveTriggers();
|
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();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,9 @@ public:
|
||||||
void setMoveDestination( const Point3F &location, bool slowdown );
|
void setMoveDestination( const Point3F &location, bool slowdown );
|
||||||
Point3F getMoveDestination() const { return mMoveDestination; }
|
Point3F getMoveDestination() const { return mMoveDestination; }
|
||||||
void stopMove();
|
void stopMove();
|
||||||
|
void setAiPose( S32 pose );
|
||||||
|
S32 getAiPose();
|
||||||
|
|
||||||
// Trigger sets/gets
|
// Trigger sets/gets
|
||||||
void setMoveTrigger( U32 slot, const bool isSet = true );
|
void setMoveTrigger( U32 slot, const bool isSet = true );
|
||||||
bool getMoveTrigger( U32 slot ) const;
|
bool getMoveTrigger( U32 slot ) const;
|
||||||
|
|
|
||||||
|
|
@ -3173,18 +3173,21 @@ void Player::updateMove(const Move* move)
|
||||||
// Update the PlayerPose
|
// Update the PlayerPose
|
||||||
Pose desiredPose = mPose;
|
Pose desiredPose = mPose;
|
||||||
|
|
||||||
if ( mSwimming )
|
if ( !mIsAiControlled )
|
||||||
desiredPose = SwimPose;
|
{
|
||||||
else if ( runSurface && move->trigger[sCrouchTrigger] && canCrouch() )
|
if ( mSwimming )
|
||||||
desiredPose = CrouchPose;
|
desiredPose = SwimPose;
|
||||||
else if ( runSurface && move->trigger[sProneTrigger] && canProne() )
|
else if ( runSurface && move->trigger[sCrouchTrigger] && canCrouch() )
|
||||||
desiredPose = PronePose;
|
desiredPose = CrouchPose;
|
||||||
else if ( move->trigger[sSprintTrigger] && canSprint() )
|
else if ( runSurface && move->trigger[sProneTrigger] && canProne() )
|
||||||
desiredPose = SprintPose;
|
desiredPose = PronePose;
|
||||||
else if ( canStand() )
|
else if ( move->trigger[sSprintTrigger] && canSprint() )
|
||||||
desiredPose = StandPose;
|
desiredPose = SprintPose;
|
||||||
|
else if ( canStand() )
|
||||||
|
desiredPose = StandPose;
|
||||||
|
|
||||||
setPose( desiredPose );
|
setPose( desiredPose );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -6186,6 +6189,10 @@ U32 Player::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
||||||
{
|
{
|
||||||
stream->writeFlag(mFalling);
|
stream->writeFlag(mFalling);
|
||||||
|
|
||||||
|
stream->writeFlag(mSwimming);
|
||||||
|
stream->writeFlag(mJetting);
|
||||||
|
stream->writeInt(mPose, NumPoseBits);
|
||||||
|
|
||||||
stream->writeInt(mState,NumStateBits);
|
stream->writeInt(mState,NumStateBits);
|
||||||
if (stream->writeFlag(mState == RecoverState))
|
if (stream->writeFlag(mState == RecoverState))
|
||||||
stream->writeInt(mRecoverTicks,PlayerData::RecoverDelayBits);
|
stream->writeInt(mRecoverTicks,PlayerData::RecoverDelayBits);
|
||||||
|
|
@ -6282,7 +6289,11 @@ void Player::unpackUpdate(NetConnection *con, BitStream *stream)
|
||||||
if (stream->readFlag()) {
|
if (stream->readFlag()) {
|
||||||
mPredictionCount = sMaxPredictionTicks;
|
mPredictionCount = sMaxPredictionTicks;
|
||||||
mFalling = stream->readFlag();
|
mFalling = stream->readFlag();
|
||||||
|
|
||||||
|
mSwimming = stream->readFlag();
|
||||||
|
mJetting = stream->readFlag();
|
||||||
|
mPose = (Pose)(stream->readInt(NumPoseBits));
|
||||||
|
|
||||||
ActionState actionState = (ActionState)stream->readInt(NumStateBits);
|
ActionState actionState = (ActionState)stream->readInt(NumStateBits);
|
||||||
if (stream->readFlag()) {
|
if (stream->readFlag()) {
|
||||||
mRecoverTicks = stream->readInt(PlayerData::RecoverDelayBits);
|
mRecoverTicks = stream->readInt(PlayerData::RecoverDelayBits);
|
||||||
|
|
|
||||||
|
|
@ -879,6 +879,7 @@ IMPLEMENT_CALLBACK( ShapeBase, validateCameraFov, F32, (F32 fov), (fov),
|
||||||
ShapeBase::ShapeBase()
|
ShapeBase::ShapeBase()
|
||||||
: mDataBlock( NULL ),
|
: mDataBlock( NULL ),
|
||||||
mIsAiControlled( false ),
|
mIsAiControlled( false ),
|
||||||
|
mAiPose( 0 ),
|
||||||
mControllingObject( NULL ),
|
mControllingObject( NULL ),
|
||||||
mMoveMotion( false ),
|
mMoveMotion( false ),
|
||||||
mShapeBaseMount( NULL ),
|
mShapeBaseMount( NULL ),
|
||||||
|
|
|
||||||
|
|
@ -874,6 +874,7 @@ protected:
|
||||||
/// @name Physical Properties
|
/// @name Physical Properties
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
|
S32 mAiPose; ///< Current pose.
|
||||||
F32 mEnergy; ///< Current enery level.
|
F32 mEnergy; ///< Current enery level.
|
||||||
F32 mRechargeRate; ///< Energy recharge rate (in units/tick).
|
F32 mRechargeRate; ///< Energy recharge rate (in units/tick).
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue