mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-11 06:34:36 +00:00
completed list of roughly ported over scripthooks.
todo: need to figure out why followobject is only hitting the first path node. likely amixup with goal handling
This commit is contained in:
parent
e37ae27bc0
commit
4fb92f02a3
16 changed files with 386 additions and 40 deletions
|
|
@ -82,25 +82,25 @@ bool AIController::getAIMove(Move* movePtr)
|
|||
{
|
||||
if (mMovement.mMoveState != ModeStop)
|
||||
getNav()->updateNavMesh();
|
||||
if (!getGoal()->mObj.isNull())
|
||||
if (getGoal() && !getGoal()->mObj.isNull())
|
||||
{
|
||||
if (getNav()->mPathData.path.isNull())
|
||||
{
|
||||
if (getGoal()->getDist() > mControllerData->mMoveTolerance)
|
||||
getNav()->followObject(getGoal());
|
||||
if (getGoal()->getDist() > mControllerData->mFollowTolerance)
|
||||
getNav()->followObject(getGoal()->mObj, mControllerData->mFollowTolerance);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (getGoal()->getDist() > mControllerData->mMoveTolerance)
|
||||
if (getGoal()->getDist() > mControllerData->mFollowTolerance)
|
||||
getNav()->repath();
|
||||
|
||||
if (getAim()->getDist() < mControllerData->mMoveTolerance)
|
||||
if (getGoal()->getDist() < mControllerData->mFollowTolerance)
|
||||
{
|
||||
getNav()->clearPath();
|
||||
mMovement.mMoveState = ModeStop;
|
||||
throwCallback("onTargetInRange");
|
||||
}
|
||||
else if (getAim()->getDist() < mControllerData->mAttackRadius)
|
||||
else if (getGoal()->getDist() < mControllerData->mAttackRadius)
|
||||
{
|
||||
throwCallback("onTargetInFiringRange");
|
||||
}
|
||||
|
|
@ -178,11 +178,29 @@ bool AIController::getAIMove(Move* movePtr)
|
|||
void AIController::clearCover()
|
||||
{
|
||||
// Notify cover that we are no longer on our way.
|
||||
if (!getCover()->mCoverPoint.isNull())
|
||||
if (getCover() && !getCover()->mCoverPoint.isNull())
|
||||
getCover()->mCoverPoint->setOccupied(false);
|
||||
SAFE_DELETE(mCover);
|
||||
}
|
||||
|
||||
void AIController::Movement::stopMove()
|
||||
{
|
||||
mMoveState = ModeStop;
|
||||
#ifdef TORQUE_NAVIGATION_ENABLED
|
||||
mControllerRef->getNav()->clearPath();
|
||||
mControllerRef->clearCover();
|
||||
mControllerRef->getNav()->clearFollow();
|
||||
#endif
|
||||
}
|
||||
void AIController::Movement::onStuck()
|
||||
{
|
||||
mControllerRef->throwCallback("onMoveStuck");
|
||||
#ifdef TORQUE_NAVIGATION_ENABLED
|
||||
if (!mControllerRef->getNav()->getPath().isNull())
|
||||
mControllerRef->getNav()->repath();
|
||||
#endif
|
||||
}
|
||||
|
||||
DefineEngineMethod(AIController, setMoveSpeed, void, (F32 speed), ,
|
||||
"@brief Sets the move speed for an AI object.\n\n"
|
||||
|
||||
|
|
@ -205,6 +223,60 @@ DefineEngineMethod(AIController, getMoveSpeed, F32, (), ,
|
|||
return object->mMovement.getMoveSpeed();
|
||||
}
|
||||
|
||||
DefineEngineMethod(AIController, stop, void, (), ,
|
||||
"@brief Tells the AIPlayer to stop moving.\n\n")
|
||||
{
|
||||
object->mMovement.stopMove();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the state of a movement trigger.
|
||||
*
|
||||
* @param slot The trigger slot to set
|
||||
* @param isSet set/unset the trigger
|
||||
*/
|
||||
void AIController::TriggerState::setMoveTrigger(U32 slot, const bool isSet)
|
||||
{
|
||||
if (slot >= MaxTriggerKeys)
|
||||
{
|
||||
Con::errorf("Attempting to set an invalid trigger slot (%i)", slot);
|
||||
}
|
||||
else
|
||||
{
|
||||
mMoveTriggers[slot] = isSet; // set the trigger
|
||||
mControllerRef->getAIInfo()->mObj->setMaskBits(ShapeBase::NoWarpMask); // force the client to updateMove
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the state of a movement trigger.
|
||||
*
|
||||
* @param slot The trigger slot to query
|
||||
* @return True if the trigger is set, false if it is not set
|
||||
*/
|
||||
bool AIController::TriggerState::getMoveTrigger(U32 slot) const
|
||||
{
|
||||
if (slot >= MaxTriggerKeys)
|
||||
{
|
||||
Con::errorf("Attempting to get an invalid trigger slot (%i)", slot);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return mMoveTriggers[slot];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the trigger state for all movement triggers.
|
||||
*/
|
||||
void AIController::TriggerState::clearMoveTriggers()
|
||||
{
|
||||
for (U32 i = 0; i < MaxTriggerKeys; i++)
|
||||
setMoveTrigger(i, false);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_CO_DATABLOCK_V1(AIControllerData);
|
||||
|
|
@ -341,6 +413,7 @@ void AIControllerData::resolveStuck(AIController* obj)
|
|||
if (obj->mMovement.mMoveState != AIController::ModeSlowing || locationDelta == 0)
|
||||
{
|
||||
obj->mMovement.mMoveState = AIController::ModeStuck;
|
||||
obj->mMovement.onStuck();
|
||||
obj->throwCallback("onStuck");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue