diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2017-06-04 10:52:06 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-06-04 10:52:06 +0200 |
commit | c7cae32cfc89c422fae7d3ecef4902c6818f9849 (patch) | |
tree | 16279a1a4a2b60266a50f7adb54671519d50c976 | |
parent | b453e124231a90321fe79fbf3a62acdcfa54a691 (diff) |
Core/AreaTrigger: Fixed broken spline after b453e124231a90321fe79fbf3a62acdcfa54a691
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 32 | ||||
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.h | 2 |
2 files changed, 16 insertions, 18 deletions
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<Position> const& splinePoints, uint32 timeToTarget) +void AreaTrigger::InitSplineOffsets(std::vector<Position> 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<G3D::Vector3> 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<G3D::Vector3> 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<AreaTrigge Position const& GetRollPitchYaw() const { return _rollPitchYaw; } Position const& GetTargetRollPitchYaw() const { return _targetRollPitchYaw; } - void InitSplineOffsets(std::vector<Position> const& splinePoints, uint32 timeToTarget); + void InitSplineOffsets(std::vector<Position> const& offsets, uint32 timeToTarget); void InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 timeToTarget); bool HasSplines() const; ::Movement::Spline<int32> const& GetSpline() const { return *_spline; } |