From de3092f014b75dcf800113944703b7a3fbfc4be5 Mon Sep 17 00:00:00 2001 From: Abdu Sharif Date: Tue, 22 Feb 2022 04:04:08 +0000 Subject: [PATCH] Revert "Merge branch 'offset_the_deads' into 'master'" This reverts commit 7dd02076f5a05528d0df308bf68e6bd733bd1b43 --- apps/openmw/mwphysics/actor.hpp | 6 +++--- apps/openmw/mwphysics/movementsolver.cpp | 4 ++++ apps/openmw/mwphysics/physicssystem.cpp | 3 +-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwphysics/actor.hpp b/apps/openmw/mwphysics/actor.hpp index cdf49eeb54..01d8037f6b 100644 --- a/apps/openmw/mwphysics/actor.hpp +++ b/apps/openmw/mwphysics/actor.hpp @@ -158,9 +158,6 @@ namespace MWPhysics bool canMoveToWaterSurface(float waterlevel, const btCollisionWorld* world) const; - /// Returns the mesh translation, scaled and rotated as necessary - osg::Vec3f getScaledMeshTranslation() const; - private: MWWorld::Ptr mStandingOnPtr; /// Removes then re-adds the collision object to the dynamics world @@ -168,6 +165,9 @@ namespace MWPhysics void addCollisionMask(int collisionMask); int getCollisionMask() const; + /// Returns the mesh translation, scaled and rotated as necessary + osg::Vec3f getScaledMeshTranslation() const; + bool mCanWaterWalk; bool mWalkingOnWater; diff --git a/apps/openmw/mwphysics/movementsolver.cpp b/apps/openmw/mwphysics/movementsolver.cpp index 8987c8d8a3..fd8a7f2b05 100644 --- a/apps/openmw/mwphysics/movementsolver.cpp +++ b/apps/openmw/mwphysics/movementsolver.cpp @@ -134,6 +134,8 @@ namespace MWPhysics // Adjust for collision mesh offset relative to actor's "location" // (doTrace doesn't take local/interior collision shape translation into account, so we have to do it on our own) + // for compatibility with vanilla assets, we have to derive this from the vertical half extent instead of from internal hull translation + // if not for this hack, the "correct" collision hull position would be physicActor->getScaledMeshTranslation() actor.mPosition.z() += actor.mHalfExtentsZ; // vanilla-accurate float swimlevel = actor.mSwimLevel + actor.mHalfExtentsZ; @@ -463,6 +465,8 @@ namespace MWPhysics } } + // use vanilla-accurate collision hull position hack (do same hitbox offset hack as movement solver) + // if vanilla compatibility didn't matter, the "correct" collision hull position would be physicActor->getScaledMeshTranslation() const auto verticalHalfExtent = osg::Vec3f(0.0, 0.0, actor.mHalfExtentsZ); // use a 3d approximation of the movement vector to better judge player intent diff --git a/apps/openmw/mwphysics/physicssystem.cpp b/apps/openmw/mwphysics/physicssystem.cpp index f5f22529ff..bbd3447b6a 100644 --- a/apps/openmw/mwphysics/physicssystem.cpp +++ b/apps/openmw/mwphysics/physicssystem.cpp @@ -939,8 +939,7 @@ namespace MWPhysics , mRotation() , mMovement(actor.velocity()) , mWaterlevel(waterlevel) - // for compatibility with vanilla assets, mesh offset is the actor halfextent for dead actors - , mHalfExtentsZ(actor.getPtr().getClass().getCreatureStats(actor.getPtr()).isDead() ? actor.getHalfExtents().z() : actor.getScaledMeshTranslation().z()) + , mHalfExtentsZ(actor.getHalfExtents().z()) , mOldHeight(0) , mStuckFrames(0) , mFlying(MWBase::Environment::get().getWorld()->isFlying(actor.getPtr()))