From 85c79d382c328e1484357206e98d4586b7ab3465 Mon Sep 17 00:00:00 2001 From: elsid Date: Tue, 24 May 2022 23:25:23 +0200 Subject: [PATCH] Enable collisions for actor before adjusting position Otherwise adjustPosition does not call traceDown and actor appears flying for the first physics simulation. --- apps/openmw/mwmechanics/actors.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index c063748bdc..7dfad96126 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -1596,15 +1596,6 @@ namespace MWMechanics world->setActorCollisionMode(actor.getPtr(), false, false); continue; } - else if (!isPlayer) - { - actor.getPtr().getRefData().getBaseNode()->setNodeMask(MWRender::Mask_Actor); - if (!actor.getPositionAdjusted()) - { - actor.getPtr().getClass().adjustPosition(actor.getPtr(), false); - actor.setPositionAdjusted(true); - } - } const bool isDead = actor.getPtr().getClass().getCreatureStats(actor.getPtr()).isDead(); if (!isDead && (!godmode || !isPlayer) && actor.getPtr().getClass().getCreatureStats(actor.getPtr()).isParalyzed()) @@ -1612,13 +1603,21 @@ namespace MWMechanics // Handle player last, in case a cell transition occurs by casting a teleportation spell // (would invalidate the iterator) - if (actor.getPtr() == getPlayer()) + if (isPlayer) { playerCharacter = &ctrl; continue; } + actor.getPtr().getRefData().getBaseNode()->setNodeMask(MWRender::Mask_Actor); world->setActorCollisionMode(actor.getPtr(), true, !actor.getPtr().getClass().getCreatureStats(actor.getPtr()).isDeathAnimationFinished()); + + if (!actor.getPositionAdjusted()) + { + actor.getPtr().getClass().adjustPosition(actor.getPtr(), false); + actor.setPositionAdjusted(true); + } + ctrl.update(duration); updateVisibility(actor.getPtr(), ctrl);