From 036f67c0c144954827733cad0c5881eba1bd88e7 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Fri, 5 May 2017 20:48:08 +0200 Subject: Core/Collision: Replaced phasemask with proper phases in GameObject collision calculation --- src/common/Collision/Models/GameObjectModel.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/common/Collision/Models/GameObjectModel.cpp') diff --git a/src/common/Collision/Models/GameObjectModel.cpp b/src/common/Collision/Models/GameObjectModel.cpp index b111b0de301..f3e5d9f6e64 100644 --- a/src/common/Collision/Models/GameObjectModel.cpp +++ b/src/common/Collision/Models/GameObjectModel.cpp @@ -115,7 +115,6 @@ bool GameObjectModel::initialize(std::unique_ptr model name = it->second.name; iPos = modelOwner->GetPosition(); - phasemask = modelOwner->GetPhaseMask(); iScale = modelOwner->GetScale(); iInvScale = 1.f / iScale; @@ -153,9 +152,12 @@ GameObjectModel* GameObjectModel::Create(std::unique_ptr const& phases) const { - if (!(phasemask & ph_mask) || !owner->IsSpawned()) + if (!isCollisionEnabled() || !owner->IsSpawned()) + return false; + + if (!owner->IsInPhase(phases)) return false; float time = ray.intersectionTime(iBound); @@ -165,12 +167,12 @@ bool GameObjectModel::intersectRay(const G3D::Ray& ray, float& MaxDist, bool Sto // child bounds are defined in object space: Vector3 p = iInvRot * (ray.origin() - iPos) * iInvScale; Ray modRay(p, iInvRot * ray.direction()); - float distance = MaxDist * iInvScale; - bool hit = iModel->IntersectRay(modRay, distance, StopAtFirstHit); + float distance = maxDist * iInvScale; + bool hit = iModel->IntersectRay(modRay, distance, stopAtFirstHit); if (hit) { distance *= iScale; - MaxDist = distance; + maxDist = distance; } return hit; } -- cgit v1.2.3