1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-05-11 16:41:26 +00:00

Merge branch 'juststrummingmylute' into 'master'

Attempt to select an AI action directly instead of waiting for the next frame

Closes #7973

See merge request OpenMW/openmw!4244
This commit is contained in:
psi29a 2024-07-09 21:32:32 +00:00
commit ecb64eab8e

View file

@ -455,27 +455,37 @@ 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)
{ {
switch (storage.mState) // 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)
{ {
case AiWanderStorage::Wander_IdleNow: switch (storage.mState)
onIdleStatePerFrameActions(actor, duration, storage); {
break; case AiWanderStorage::Wander_IdleNow:
{
onIdleStatePerFrameActions(actor, duration, storage);
if (storage.mState != AiWanderStorage::Wander_ChooseAction)
return;
continue;
}
case AiWanderStorage::Wander_Walking:
onWalkingStatePerFrameActions(actor, duration, supportedMovementDirections, storage);
return;
case AiWanderStorage::Wander_Walking: case AiWanderStorage::Wander_ChooseAction:
onWalkingStatePerFrameActions(actor, duration, supportedMovementDirections, storage); {
break; onChooseActionStatePerFrameActions(actor, storage);
if (storage.mState != AiWanderStorage::Wander_IdleNow)
return;
continue;
}
case AiWanderStorage::Wander_MoveNow:
return; // nothing to do
case AiWanderStorage::Wander_ChooseAction: default:
onChooseActionStatePerFrameActions(actor, storage); // should never get here
break; assert(false);
return;
case AiWanderStorage::Wander_MoveNow: }
break; // nothing to do
default:
// should never get here
assert(false);
break;
} }
} }