mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-23 19:20:56 +00:00
Attempt to select an AI action directly instead of waiting for the next frame
This commit is contained in:
parent
3a5ed998e7
commit
134c099df9
@ -454,28 +454,38 @@ namespace MWMechanics
|
|||||||
|
|
||||||
void AiWander::doPerFrameActionsForState(const MWWorld::Ptr& actor, float duration,
|
void AiWander::doPerFrameActionsForState(const MWWorld::Ptr& actor, float duration,
|
||||||
MWWorld::MovementDirectionFlags supportedMovementDirections, AiWanderStorage& storage)
|
MWWorld::MovementDirectionFlags supportedMovementDirections, AiWanderStorage& storage)
|
||||||
|
{
|
||||||
|
// Attempt to fast forward to the next state instead of remaining in an intermediate state for a frame
|
||||||
|
for (int i = 0; i < 2; ++i)
|
||||||
{
|
{
|
||||||
switch (storage.mState)
|
switch (storage.mState)
|
||||||
{
|
{
|
||||||
case AiWanderStorage::Wander_IdleNow:
|
case AiWanderStorage::Wander_IdleNow:
|
||||||
|
{
|
||||||
onIdleStatePerFrameActions(actor, duration, storage);
|
onIdleStatePerFrameActions(actor, duration, storage);
|
||||||
break;
|
if (storage.mState != AiWanderStorage::Wander_ChooseAction)
|
||||||
|
return;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
case AiWanderStorage::Wander_Walking:
|
case AiWanderStorage::Wander_Walking:
|
||||||
onWalkingStatePerFrameActions(actor, duration, supportedMovementDirections, storage);
|
onWalkingStatePerFrameActions(actor, duration, supportedMovementDirections, storage);
|
||||||
break;
|
return;
|
||||||
|
|
||||||
case AiWanderStorage::Wander_ChooseAction:
|
case AiWanderStorage::Wander_ChooseAction:
|
||||||
|
{
|
||||||
onChooseActionStatePerFrameActions(actor, storage);
|
onChooseActionStatePerFrameActions(actor, storage);
|
||||||
break;
|
if (storage.mState != AiWanderStorage::Wander_IdleNow)
|
||||||
|
return;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
case AiWanderStorage::Wander_MoveNow:
|
case AiWanderStorage::Wander_MoveNow:
|
||||||
break; // nothing to do
|
return; // nothing to do
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// should never get here
|
// should never get here
|
||||||
assert(false);
|
assert(false);
|
||||||
break;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user