Core/AreaTriggers: Use Optional<bool> for speedIsTime argument in movement functions

Port From (https://github.com/TrinityCore/TrinityCore/commit/dcf9fc5ae5e5a1b64d84ca77b14ace54f4232c50)
This commit is contained in:
Hondacrx
2025-12-08 09:15:28 -05:00
parent 16f79297c7
commit 3b21acac1a
@@ -222,7 +222,7 @@ namespace Game.Entities
GetCreateProperties().Movement.Switch( GetCreateProperties().Movement.Switch(
_ => SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.PathType), (byte)AreaTriggerPathType.None), _ => SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.PathType), (byte)AreaTriggerPathType.None),
splineInfo => InitSplineOffsets(splineInfo, null, GetCreateProperties().SpeedIsTime), splineInfo => InitSplineOffsets(splineInfo),
orbitInfo => orbitInfo =>
{ {
AreaTriggerOrbitInfo orbit = orbitInfo; AreaTriggerOrbitInfo orbit = orbitInfo;
@@ -231,7 +231,7 @@ namespace Game.Entities
else else
orbit.Center = pos; orbit.Center = pos;
InitOrbit(orbit, null, GetCreateProperties().SpeedIsTime); InitOrbit(orbit);
}); });
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.Facing), _stationaryPosition.GetOrientation()); SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.Facing), _stationaryPosition.GetOrientation());
@@ -1160,7 +1160,7 @@ namespace Game.Entities
} }
} }
void InitSplineOffsets(List<Vector3> offsets, float? overrideSpeed = null, bool speedIsTimeInSeconds = false) void InitSplineOffsets(List<Vector3> offsets, float? overrideSpeed = null, bool? speedIsTimeInSeconds = null)
{ {
float angleSin = (float)Math.Sin(GetOrientation()); float angleSin = (float)Math.Sin(GetOrientation());
float angleCos = (float)Math.Cos(GetOrientation()); float angleCos = (float)Math.Cos(GetOrientation());
@@ -1182,7 +1182,7 @@ namespace Game.Entities
InitSplines(rotatedPoints.ToArray(), overrideSpeed, speedIsTimeInSeconds); InitSplines(rotatedPoints.ToArray(), overrideSpeed, speedIsTimeInSeconds);
} }
public void InitSplines(Vector3[] splinePoints, float? overrideSpeed = null, bool speedIsTimeInSeconds = false) public void InitSplines(Vector3[] splinePoints, float? overrideSpeed = null, bool? speedIsTimeInSeconds = null)
{ {
if (splinePoints.Length < 2) if (splinePoints.Length < 2)
return; return;
@@ -1195,7 +1195,7 @@ namespace Game.Entities
if (speed <= 0.0f) if (speed <= 0.0f)
speed = 1.0f; speed = 1.0f;
uint timeToTarget = (speedIsTimeInSeconds ? speed : _spline.Length() / speed) * Time.InMilliseconds; uint timeToTarget = (speedIsTimeInSeconds.GetValueOrDefault(GetCreateProperties().SpeedIsTime) ? speed : _spline.Length() / speed) * Time.InMilliseconds;
var areaTriggerData = m_values.ModifyValue(m_areaTriggerData); var areaTriggerData = m_values.ModifyValue(m_areaTriggerData);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget); SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
@@ -1220,7 +1220,7 @@ namespace Game.Entities
return 0; return 0;
} }
void InitOrbit(AreaTriggerOrbitInfo orbit, float? overrideSpeed = null, bool speedIsTimeInSeconds = false) void InitOrbit(AreaTriggerOrbitInfo orbit, float? overrideSpeed = null, bool? speedIsTimeInSeconds = null)
{ {
// Circular movement requires either a center position or an attached unit // Circular movement requires either a center position or an attached unit
Cypher.Assert(orbit.Center.HasValue || orbit.PathTarget.HasValue); Cypher.Assert(orbit.Center.HasValue || orbit.PathTarget.HasValue);
@@ -1229,7 +1229,7 @@ namespace Game.Entities
if (speed <= 0.0f) if (speed <= 0.0f)
speed = 1.0f; speed = 1.0f;
uint timeToTarget = (uint)(speedIsTimeInSeconds ? speed : (uint)(orbit.Radius * 2.0f * MathF.PI / speed)) * Time.InMilliseconds; uint timeToTarget = (uint)(speedIsTimeInSeconds.GetValueOrDefault(GetCreateProperties().SpeedIsTime) ? speed : (uint)(orbit.Radius * 2.0f * MathF.PI / speed)) * Time.InMilliseconds;
var areaTriggerData = m_values.ModifyValue(m_areaTriggerData); var areaTriggerData = m_values.ModifyValue(m_areaTriggerData);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget); SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);