Core/Movement: Implement MoveSplineFlag::Enter_Cycle

Port From (https://github.com/TrinityCore/TrinityCore/commit/61f3d51143b51b04169bd1c2ff0393d2b9be7c33)
This commit is contained in:
hondacrx
2022-01-07 10:44:03 -05:00
parent 1528e28b7a
commit d47f9f0171
7 changed files with 77 additions and 11 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ namespace Game.Entities
public MoveSpline MoveSpline { get; set; }
MotionMaster i_motionMaster;
public uint m_movementCounter; //< Incrementing counter used in movement packets
TimeTrackerSmall movesplineTimer;
TimeTrackerSmall splineSyncTimer;
MovementForces _movementForces;
PositionUpdateInfo _positionUpdateInfo;
protected Unit m_unitMovedByMe; // only ever set for players, and only for direct client control
+15 -5
View File
@@ -1700,20 +1700,30 @@ namespace Game.Entities
void UpdateSplineMovement(uint diff)
{
int positionUpdateDelay = 400;
if (MoveSpline.Finalized())
return;
MoveSpline.UpdateState((int)diff);
bool arrived = MoveSpline.Finalized();
if (MoveSpline.IsCyclic())
{
splineSyncTimer.Update((int)diff);
if (splineSyncTimer.Passed())
{
splineSyncTimer.Reset(5000); // Retail value, do not change
FlightSplineSync flightSplineSync = new();
flightSplineSync.Guid = GetGUID();
flightSplineSync.SplineDist = MoveSpline.TimePassed() / MoveSpline.Duration();
SendMessageToSet(flightSplineSync, true);
}
}
if (arrived)
DisableSpline();
movesplineTimer.Update((int)diff);
if (movesplineTimer.Passed() || arrived)
UpdateSplinePosition();
UpdateSplinePosition();
}
void UpdateSplinePosition()
{
+1 -1
View File
@@ -87,7 +87,7 @@ namespace Game.Entities
m_serverSideVisibility.SetValue(ServerSideVisibilityType.Ghost, GhostVisibilityType.Alive);
movesplineTimer = new TimeTrackerSmall();
splineSyncTimer = new TimeTrackerSmall();
m_unitData = new UnitData();
}