From 31ce0c67197cb0d46fdaa7287b5c783786cb786c Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Mon, 19 Aug 2024 11:46:46 -0400 Subject: [PATCH] Core/Units: moved cyclic spline synchronization mechanic heartbeat handling Port From (https://github.com/TrinityCore/TrinityCore/commit/c2fedbb6cc89510002e9f56751e7f8427e306487) --- Source/Game/Entities/Unit/Unit.Fields.cs | 1 - Source/Game/Entities/Unit/Unit.Movement.cs | 25 ++++++++++------------ Source/Game/Entities/Unit/Unit.cs | 10 +++++++-- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Source/Game/Entities/Unit/Unit.Fields.cs b/Source/Game/Entities/Unit/Unit.Fields.cs index 785214922..919102a54 100644 --- a/Source/Game/Entities/Unit/Unit.Fields.cs +++ b/Source/Game/Entities/Unit/Unit.Fields.cs @@ -27,7 +27,6 @@ namespace Game.Entities public MoveSpline MoveSpline { get; set; } MotionMaster i_motionMaster; public uint m_movementCounter; //< Incrementing counter used in movement packets - TimeTracker splineSyncTimer; MovementForces _movementForces; PositionUpdateInfo _positionUpdateInfo; protected Unit m_unitMovedByMe; // only ever set for players, and only for direct client control diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 48ee3dda6..20a19edae 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -1809,20 +1809,6 @@ namespace Game.Entities MoveSpline.UpdateState((int)diff); bool arrived = MoveSpline.Finalized(); - if (MoveSpline.IsCyclic()) - { - splineSyncTimer.Update(diff); - if (splineSyncTimer.Passed()) - { - splineSyncTimer.Reset(5000); // Retail value, do not change - - FlightSplineSync flightSplineSync = new(); - flightSplineSync.Guid = GetGUID(); - flightSplineSync.SplineDist = (float)MoveSpline.TimePassed() / MoveSpline.Duration(); - SendMessageToSet(flightSplineSync, true); - } - } - if (arrived) { DisableSpline(); @@ -1860,6 +1846,17 @@ namespace Game.Entities UpdatePosition(loc.X, loc.Y, loc.Z, loc.W); } + void SendFlightSplineSyncUpdate() + { + if (!MoveSpline.IsCyclic() || MoveSpline.Finalized()) + return; + + FlightSplineSync flightSplineSync = new(); + flightSplineSync.Guid = GetGUID(); + flightSplineSync.SplineDist = (float)MoveSpline.TimePassed() / MoveSpline.Duration(); + SendMessageToSet(flightSplineSync, true); + } + void InterruptMovementBasedAuras() { // TODO: Check if orientation transport offset changed instead of only global orientation diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 1dce8b7b9..2eb5b00fa 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -70,8 +70,6 @@ namespace Game.Entities m_serverSideVisibility.SetValue(ServerSideVisibilityType.Ghost, GhostVisibilityType.Alive); - splineSyncTimer = new TimeTracker(); - m_unitData = new UnitData(); } @@ -2557,6 +2555,14 @@ namespace Game.Entities return m_deathState; } + public override void Heartbeat() + { + base.Heartbeat(); + + // SMSG_FLIGHT_SPLINE_SYNC for cyclic splines + SendFlightSplineSyncUpdate(); + } + public bool HaveOffhandWeapon() { if (IsTypeId(TypeId.Player))