aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2017-06-04 10:52:06 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-06-04 10:52:06 +0200
commitc7cae32cfc89c422fae7d3ecef4902c6818f9849 (patch)
tree16279a1a4a2b60266a50f7adb54671519d50c976
parentb453e124231a90321fe79fbf3a62acdcfa54a691 (diff)
Core/AreaTrigger: Fixed broken spline after b453e124231a90321fe79fbf3a62acdcfa54a691
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp32
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h2
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; }