diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-07-17 00:21:03 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-07-17 00:21:03 +0200 |
commit | 2756ca1c350a7545e3a9e848e9b4db9b904f3a14 (patch) | |
tree | 3a119d8ad99a372e3e2d6e014dee9d4b1e6a8d55 /src/common/Collision/DynamicTree.cpp | |
parent | 4862033a44c3385f7f63725088caf595b30e02a6 (diff) |
Core/GameObject: Implemented NotLOSBlocking door property
Diffstat (limited to 'src/common/Collision/DynamicTree.cpp')
-rw-r--r-- | src/common/Collision/DynamicTree.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/common/Collision/DynamicTree.cpp b/src/common/Collision/DynamicTree.cpp index c2d84e06864..dc21ebc44d8 100644 --- a/src/common/Collision/DynamicTree.cpp +++ b/src/common/Collision/DynamicTree.cpp @@ -143,7 +143,25 @@ struct DynamicTreeIntersectionCallback bool operator()(G3D::Ray const& r, GameObjectModel const& obj, float& distance) { - _didHit = obj.intersectRay(r, distance, true, _phaseShift, VMAP::ModelIgnoreFlags::Nothing); + _didHit = obj.IntersectRay(r, distance, true, _phaseShift, VMAP::ModelIgnoreFlags::Nothing); + return _didHit; + } + + bool didHit() const { return _didHit; } + +private: + bool _didHit; + PhaseShift const& _phaseShift; +}; + +struct DynamicTreeLosCallback +{ + DynamicTreeLosCallback(PhaseShift const& phaseShift) : _didHit(false), _phaseShift(phaseShift) { } + + bool operator()(G3D::Ray const& r, GameObjectModel const& obj, float& distance) + { + if (!obj.IsLosBlockingDisabled()) + _didHit = obj.IntersectRay(r, distance, true, _phaseShift, VMAP::ModelIgnoreFlags::Nothing); return _didHit; } @@ -229,7 +247,7 @@ bool DynamicMapTree::isInLineOfSight(G3D::Vector3 const& startPos, G3D::Vector3 return true; G3D::Ray r(startPos, (endPos - startPos) / maxDist); - DynamicTreeIntersectionCallback callback(phaseShift); + DynamicTreeLosCallback callback(phaseShift); impl->intersectRay(r, callback, maxDist, endPos); return !callback.didHit(); |