Core/GameObjects: Use all axis rotations for gameobject model collision, not just orientation

This commit is contained in:
Shauren
2022-05-22 14:53:05 +02:00
parent 703452d28d
commit c13d26e1fa
3 changed files with 10 additions and 4 deletions

View File

@@ -23,6 +23,7 @@
#include "Log.h"
#include "MapTree.h"
#include "Timer.h"
#include <G3D/Quat.h>
using G3D::Vector3;
using G3D::Ray;
@@ -124,7 +125,7 @@ bool GameObjectModel::initialize(std::unique_ptr<GameObjectModelOwnerBase> model
iScale = modelOwner->GetScale();
iInvScale = 1.f / iScale;
G3D::Matrix3 iRotation = G3D::Matrix3::fromEulerAnglesZYX(modelOwner->GetOrientation(), 0, 0);
G3D::Matrix3 iRotation = modelOwner->GetRotation().toRotationMatrix();
iInvRot = iRotation.inverse();
// transform bounding box:
mdl_box = AABox(mdl_box.low() * iScale, mdl_box.high() * iScale);
@@ -275,7 +276,7 @@ bool GameObjectModel::UpdatePosition()
iPos = owner->GetPosition();
G3D::Matrix3 iRotation = G3D::Matrix3::fromEulerAnglesZYX(owner->GetOrientation(), 0, 0);
G3D::Matrix3 iRotation = owner->GetRotation().toRotationMatrix();
iInvRot = iRotation.inverse();
// transform bounding box:
mdl_box = AABox(mdl_box.low() * iScale, mdl_box.high() * iScale);

View File

@@ -26,6 +26,11 @@
#include "Define.h"
#include <memory>
namespace G3D
{
class Quat;
}
namespace VMAP
{
class WorldModel;
@@ -48,7 +53,7 @@ public:
virtual uint8 GetNameSetId() const = 0;
virtual bool IsInPhase(PhaseShift const& /*phaseShift*/) const = 0;
virtual G3D::Vector3 GetPosition() const = 0;
virtual float GetOrientation() const = 0;
virtual G3D::Quat GetRotation() const = 0;
virtual float GetScale() const = 0;
virtual void DebugVisualizeCorner(G3D::Vector3 const& /*corner*/) const = 0;
};

View File

@@ -3299,7 +3299,7 @@ public:
uint8 GetNameSetId() const override { return _owner->GetNameSetId(); }
bool IsInPhase(PhaseShift const& phaseShift) const override { return _owner->GetPhaseShift().CanSee(phaseShift); }
G3D::Vector3 GetPosition() const override { return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); }
float GetOrientation() const override { return _owner->GetOrientation(); }
G3D::Quat GetRotation() const override { return G3D::Quat(_owner->GetLocalRotation().x, _owner->GetLocalRotation().y, _owner->GetLocalRotation().z, _owner->GetLocalRotation().w); }
float GetScale() const override { return _owner->GetObjectScale(); }
void DebugVisualizeCorner(G3D::Vector3 const& corner) const override { _owner->SummonCreature(1, corner.x, corner.y, corner.z, 0, TEMPSUMMON_MANUAL_DESPAWN); }