diff options
author | kaelima <kaelima@live.se> | 2012-09-07 14:00:05 +0200 |
---|---|---|
committer | kaelima <kaelima@live.se> | 2012-09-07 14:00:24 +0200 |
commit | d0f4526d71d3f5febc99456225dd7ca402bdc5d9 (patch) | |
tree | 27e27b9aa8d40cd4641d5433aae98d9dee59bc6b | |
parent | faf9f481ef41902affe2867bbb5f51ac94ca41a6 (diff) |
Core/Vehicle: Improved the position fix when changing vehicle from 5eb22e5b646fbe1774100e6b3eb7b876591e1cf6
Thanks Shauren
-rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.h | 1 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.cpp | 6 |
3 files changed, 6 insertions, 2 deletions
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index 61bd3900b9d..9eb91e11024 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -167,6 +167,7 @@ void MoveSpline::Initialize(const MoveSplineInitArgs& args) point_Idx_offset = args.path_Idx_offset; initialOrientation = args.initialOrientation; + onTransport = false; time_passed = 0; vertical_acceleration = 0.f; effect_start_time = 0; diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h index d4b19b21634..a8c66f02547 100644 --- a/src/server/game/Movement/Spline/MoveSpline.h +++ b/src/server/game/Movement/Spline/MoveSpline.h @@ -119,6 +119,7 @@ namespace Movement const Vector3 CurrentDestination() const { return Initialized() ? spline.getPoint(point_Idx+1) : Vector3();} int32 currentPathIdx() const; + bool onTransport; std::string ToString() const; }; } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index a47c25610b0..76215ec83c1 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -71,10 +71,11 @@ namespace Movement real_position.z = unit.GetTransOffsetZ(); real_position.orientation = unit.GetTransOffsetO(); } + // there is a big chance that current position is unknown if current state is not finalized, need compute it // this also allows calculate spline position and update map position in much greater intervals - // Don't compute for transport movement. The unit could be in a motion between two transports, thus having transport moveflag but is resulting in regular positions - else if (!move_spline.Finalized()) + // Don't compute for transport movement if the unit is in a motion between two transports + if (!move_spline.Finalized() && move_spline.onTransport == transport) real_position = move_spline.ComputePosition(); // should i do the things that user should do? - no. @@ -84,6 +85,7 @@ namespace Movement // corrent first vertex args.path[0] = real_position; args.initialOrientation = real_position.orientation; + move_spline.onTransport = transport; uint32 moveFlags = unit.m_movementInfo.GetMovementFlags(); if (args.flags.walkmode) |