From 4725941567f9dae583fc27b52b51a23aa84cd098 Mon Sep 17 00:00:00 2001 From: Traesh Date: Sat, 14 Aug 2021 20:08:40 +0200 Subject: Core/AreaTrigger Update box searching to handle oriented boxes (#26772) --- .../game/Entities/AreaTrigger/AreaTrigger.cpp | 25 +++++----------------- 1 file changed, 5 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 38cdeaa9801..e389d58d543 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -37,7 +37,6 @@ #include "Transport.h" #include "Unit.h" #include "UpdateData.h" -#include AreaTrigger::AreaTrigger() : WorldObject(false), MapObject(), _aurEff(nullptr), _duration(0), _totalDuration(0), _timeSinceCreated(0), _previousCheckOrientation(std::numeric_limits::infinity()), @@ -388,30 +387,16 @@ void AreaTrigger::SearchUnitInSphere(std::vector& targetList) void AreaTrigger::SearchUnitInBox(std::vector& targetList) { + SearchUnits(targetList, GetTemplate()->MaxSearchRadius, false); + + Position const& boxCenter = GetPosition(); float extentsX = GetTemplate()->BoxDatas.Extents[0]; float extentsY = GetTemplate()->BoxDatas.Extents[1]; float extentsZ = GetTemplate()->BoxDatas.Extents[2]; - SearchUnits(targetList, GetTemplate()->MaxSearchRadius, false); - - float halfExtentsX = extentsX / 2.0f; - float halfExtentsY = extentsY / 2.0f; - float halfExtentsZ = extentsZ / 2.0f; - - float minX = GetPositionX() - halfExtentsX; - float maxX = GetPositionX() + halfExtentsX; - - float minY = GetPositionY() - halfExtentsY; - float maxY = GetPositionY() + halfExtentsY; - - float minZ = GetPositionZ() - halfExtentsZ; - float maxZ = GetPositionZ() + halfExtentsZ; - - G3D::AABox const box({ minX, minY, minZ }, { maxX, maxY, maxZ }); - - targetList.erase(std::remove_if(targetList.begin(), targetList.end(), [&box](Unit* unit) -> bool + targetList.erase(std::remove_if(targetList.begin(), targetList.end(), [boxCenter, extentsX, extentsY, extentsZ](Unit* unit) -> bool { - return !box.contains({ unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ() }); + return !unit->IsWithinBox(boxCenter, extentsX, extentsY, extentsZ); }), targetList.end()); } -- cgit v1.2.3