From 35cc0006c8588a40023d73069c9bd43da46f4efe Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Mon, 12 Aug 2024 16:16:29 -0400 Subject: [PATCH] Core/Movement: Added functions to MoveSplineInit to enable steering flag Port From (https://github.com/TrinityCore/TrinityCore/commit/cf4c3b5467fde04f53636443a7a8b392aa527cf5) --- Source/Framework/Constants/Movement/SplineConst.cs | 2 +- Source/Game/Movement/MoveSplineFlags.cs | 1 + Source/Game/Movement/MoveSplineInit.cs | 8 +++++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Source/Framework/Constants/Movement/SplineConst.cs b/Source/Framework/Constants/Movement/SplineConst.cs index 6968b696a..45531a1f5 100644 --- a/Source/Framework/Constants/Movement/SplineConst.cs +++ b/Source/Framework/Constants/Movement/SplineConst.cs @@ -57,6 +57,6 @@ namespace Framework.Constants MaskNoMonsterMove = Done, // Unused, not suported flags MaskUnused = NoSpline | EnterCycle | Frozen | Unknown_0x8 | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000 - | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | Steering | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000 + | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000 } } diff --git a/Source/Game/Movement/MoveSplineFlags.cs b/Source/Game/Movement/MoveSplineFlags.cs index 57890de30..9ea1eaba8 100644 --- a/Source/Game/Movement/MoveSplineFlags.cs +++ b/Source/Game/Movement/MoveSplineFlags.cs @@ -33,6 +33,7 @@ namespace Game.Movement public void EnableCatmullRom() { Flags = (Flags & ~SplineFlag.SmoothGroundPath) | SplineFlag.Catmullrom; } public void EnableTransportEnter() { Flags = (Flags & ~SplineFlag.TransportExit) | SplineFlag.TransportEnter; } public void EnableTransportExit() { Flags = (Flags & ~SplineFlag.TransportEnter) | SplineFlag.TransportExit; } + public void EnableSteering() { Flags = (Flags & ~SplineFlag.SmoothGroundPath) | SplineFlag.Steering; } public SplineFlag Flags; public byte animTier; diff --git a/Source/Game/Movement/MoveSplineInit.cs b/Source/Game/Movement/MoveSplineInit.cs index 0f93032f8..2fce92244 100644 --- a/Source/Game/Movement/MoveSplineInit.cs +++ b/Source/Game/Movement/MoveSplineInit.cs @@ -23,8 +23,8 @@ namespace Game.Movement args.flags.SetUnsetFlag(SplineFlag.CanSwim, unit.CanSwim()); args.walk = unit.HasUnitMovementFlag(MovementFlag.Walking); args.flags.SetUnsetFlag(SplineFlag.Flying, unit.HasUnitMovementFlag(MovementFlag.CanFly | MovementFlag.DisableGravity)); - args.flags.SetUnsetFlag(SplineFlag.SmoothGroundPath, true); // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this args.flags.SetUnsetFlag(SplineFlag.Steering, unit.HasNpcFlag2(NPCFlags2.Steering)); + args.flags.SetUnsetFlag(SplineFlag.SmoothGroundPath, !args.flags.HasFlag(SplineFlag.Flying) && !args.flags.HasFlag(SplineFlag.Steering)); // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this } UnitMoveType SelectSpeedType(MovementFlag moveFlags) @@ -60,7 +60,7 @@ namespace Game.Movement MoveSpline move_spline = unit.MoveSpline; bool transport = !unit.GetTransGUID().IsEmpty(); - Vector4 real_position = new(); + Vector4 real_position = new(); // 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 if the unit is in a motion between two transports @@ -203,7 +203,7 @@ namespace Game.Movement args.facing.f = new Vector3(finalSpot.X, finalSpot.Y, finalSpot.Z); args.facing.type = MonsterMoveType.FacingSpot; } - + public void SetFacing(float x, float y, float z) { SetFacing(new Vector3(x, y, z)); @@ -282,6 +282,8 @@ namespace Game.Movement public void SetOrientationFixed(bool enable) { args.flags.SetUnsetFlag(SplineFlag.OrientationFixed, enable); } + public void SetSteering() { args.flags.EnableSteering(); } + public void SetUnlimitedSpeed() { args.flags.SetUnsetFlag(SplineFlag.UnlimitedSpeed, true); } public void MovebyPath(Vector3[] controls, int path_offset = 0)