From 98d0e6f227fe3443de4c151d5334848aa6900c01 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 13 Nov 2017 13:20:46 -0500 Subject: [PATCH] Added extra transport position update just when it stops moving --- Source/Game/Entities/Transport.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Game/Entities/Transport.cs b/Source/Game/Entities/Transport.cs index 0862efd87..8c58bbf36 100644 --- a/Source/Game/Entities/Transport.cs +++ b/Source/Game/Entities/Transport.cs @@ -164,6 +164,7 @@ namespace Game.Entities m_goValue.Transport.PathProgress += diff; uint timer = m_goValue.Transport.PathProgress % GetTransportPeriod(); + bool justStopped = false; // Set current waypoint // Desired outcome: _currentFrame.DepartureTime < timer < _nextFrame.ArriveTime @@ -182,6 +183,7 @@ namespace Game.Entities if (timer < _currentFrame.DepartureTime) { SetMoving(false); + justStopped = true; if (_pendingStop && GetGoState() != GameObjectState.Ready) { SetGoState(GameObjectState.Ready); @@ -238,12 +240,14 @@ namespace Game.Entities _positionChangeTimer.Reset(positionUpdateDelay); if (IsMoving()) { - float t = CalculateSegmentPos(timer * 0.001f); + float t = !justStopped ? CalculateSegmentPos(timer * 0.001f) : 1.0f; Vector3 pos, dir; _currentFrame.Spline.Evaluate_Percent((int)_currentFrame.Index, t, out pos); _currentFrame.Spline.Evaluate_Derivative((int)_currentFrame.Index, t, out dir); UpdatePosition(pos.X, pos.Y, pos.Z, (float)Math.Atan2(dir.Y, dir.X) + MathFunctions.PI); } + else if (justStopped) + UpdatePosition(_currentFrame.Node.Loc.X, _currentFrame.Node.Loc.Y, _currentFrame.Node.Loc.Z, _currentFrame.InitialOrientation); else { /* There are four possible scenarios that trigger loading/unloading passengers: