From c7cae32cfc89c422fae7d3ecef4902c6818f9849 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 4 Jun 2017 10:52:06 +0200 Subject: Core/AreaTrigger: Fixed broken spline after b453e124231a90321fe79fbf3a62acdcfa54a691 --- .../game/Entities/AreaTrigger/AreaTrigger.cpp | 32 ++++++++++------------ src/server/game/Entities/AreaTrigger/AreaTrigger.h | 2 +- 2 files changed, 16 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index d545cbb003e..83b8edf1073 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -418,9 +418,9 @@ void AreaTrigger::UpdatePolygonOrientation() // This is needed to rotate the vertices, following orientation for (Position& vertice : _polygonVertices) { - float tempX = vertice.GetPositionX(); - float tempY = vertice.GetPositionY(); - vertice.Relocate(tempX * angleCos - tempY * angleSin, tempX * angleSin + tempY * angleCos); + float x = vertice.GetPositionX() * angleCos - vertice.GetPositionY() * angleSin; + float y = vertice.GetPositionY() * angleCos + vertice.GetPositionX() * angleSin; + vertice.Relocate(x, y); } _previousCheckOrientation = newOrientation; @@ -564,26 +564,24 @@ void AreaTrigger::UndoActions(Unit* unit) unit->RemoveAurasDueToSpell(action.Param, GetCasterGuid()); } -void AreaTrigger::InitSplineOffsets(std::vector const& splinePoints, uint32 timeToTarget) +void AreaTrigger::InitSplineOffsets(std::vector const& offsets, uint32 timeToTarget) { float angleSin = std::sin(GetOrientation()); float angleCos = std::cos(GetOrientation()); // This is needed to rotate the spline, following caster orientation std::vector rotatedPoints; - rotatedPoints.reserve(splinePoints.size()); - for (Position const& spline : splinePoints) + rotatedPoints.reserve(offsets.size()); + for (Position const& offset : offsets) { - float tempX = spline.GetPositionX(); - float tempY = spline.GetPositionY(); - float tempZ = GetPositionZ(); - - UpdateAllowedPositionZ(spline.GetPositionX(), spline.GetPositionY(), tempZ); - rotatedPoints.emplace_back( - (tempX * angleCos - tempY * angleSin) + GetPositionX(), - (tempX * angleSin + tempY * angleCos) + GetPositionY(), - tempZ - ); + float x = GetPositionX() + (offset.GetPositionX() * angleCos - offset.GetPositionY() * angleSin); + float y = GetPositionY() + (offset.GetPositionY() * angleCos + offset.GetPositionX() * angleSin); + float z = GetPositionZ(); + + UpdateAllowedPositionZ(x, y, z); + z += offset.GetPositionZ(); + + rotatedPoints.emplace_back(x, y, z); } InitSplines(std::move(rotatedPoints), timeToTarget); @@ -628,7 +626,7 @@ void AreaTrigger::InitSplines(std::vector splinePoints, uint32 tim bool AreaTrigger::HasSplines() const { - return !_spline->empty(); + return bool(_spline); } void AreaTrigger::UpdateSplinePosition(uint32 diff) diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index d3b92cae0ae..399dd1ce6b5 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -81,7 +81,7 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject const& splinePoints, uint32 timeToTarget); + void InitSplineOffsets(std::vector const& offsets, uint32 timeToTarget); void InitSplines(std::vector splinePoints, uint32 timeToTarget); bool HasSplines() const; ::Movement::Spline const& GetSpline() const { return *_spline; } -- cgit v1.2.3