diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-11-04 21:39:21 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-12-08 18:16:41 +0100 |
| commit | cab4c87d2d7f6d734ef067d6bf50f4b1d338a7bc (patch) | |
| tree | 2eaf0fd8bc9e937a4c9611e18dd04d5001189036 /src/server/game/Movement/Spline | |
| parent | 16b39a448acbe8ace88550a367be8e6bf565b00d (diff) | |
Core/PacketIO: Updated most packet structures to 9.0.1
Diffstat (limited to 'src/server/game/Movement/Spline')
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.h | 1 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineFlag.h | 58 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 4 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInitArgs.h | 7 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MovementUtil.cpp | 68 |
6 files changed, 77 insertions, 64 deletions
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index 4d72d506549..336a6918dbe 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -54,7 +54,7 @@ Location MoveSpline::computePosition(int32 time_point, int32 point_index) const } else { - if (!splineflags.hasFlag(MoveSplineFlag::OrientationFixed | MoveSplineFlag::Falling | MoveSplineFlag::Unknown0)) + if (!splineflags.hasFlag(MoveSplineFlag::OrientationFixed | MoveSplineFlag::Falling | MoveSplineFlag::Unknown0x8)) { Vector3 hermite; spline.evaluate_derivative(point_Idx, u, hermite); @@ -191,6 +191,7 @@ void MoveSpline::Initialize(MoveSplineInitArgs const& args) vertical_acceleration = 0.f; effect_start_time = 0; spell_effect_extra = args.spellEffectExtra; + anim_tier = args.animTier; splineIsFacingOnly = args.path.size() == 2 && args.facing.type != MONSTER_MOVE_NORMAL && ((args.path[1] - args.path[0]).length() < 0.1f); // Check if its a stop spline diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h index 0bc025fc5f0..c9d4745e036 100644 --- a/src/server/game/Movement/Spline/MoveSpline.h +++ b/src/server/game/Movement/Spline/MoveSpline.h @@ -81,6 +81,7 @@ namespace Movement int32 point_Idx; int32 point_Idx_offset; Optional<SpellEffectExtraData> spell_effect_extra; + Optional<AnimTierTransition> anim_tier; void init_spline(MoveSplineInitArgs const& args); diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h index 2f80d1d509c..a6396184a2e 100644 --- a/src/server/game/Movement/Spline/MoveSplineFlag.h +++ b/src/server/game/Movement/Spline/MoveSplineFlag.h @@ -30,13 +30,15 @@ namespace Movement enum eFlags { None = 0x00000000, - // x00-x07 used as animation Ids storage in pair with Animation flag - Unknown0 = 0x00000008, // NOT VERIFIED - does someting related to falling/fixed orientation + Unknown_0x1 = 0x00000001, // NOT VERIFIED + Unknown_0x2 = 0x00000002, // NOT VERIFIED + Unknown_0x4 = 0x00000004, // NOT VERIFIED + Unknown_0x8 = 0x00000008, // NOT VERIFIED - does someting related to falling/fixed orientation FallingSlow = 0x00000010, Done = 0x00000020, Falling = 0x00000040, // Affects elevation computation, can't be combined with Parabolic flag No_Spline = 0x00000080, - Unknown1 = 0x00000100, // NOT VERIFIED + Unknown_0x100 = 0x00000100, // NOT VERIFIED Flying = 0x00000200, // Smooth movement(Catmullrom interpolation mode), flying animation OrientationFixed = 0x00000400, // Model orientation fixed Catmullrom = 0x00000800, // Used Catmullrom interpolation mode @@ -45,29 +47,28 @@ namespace Movement Frozen = 0x00004000, // Will never arrive TransportEnter = 0x00008000, TransportExit = 0x00010000, - Unknown2 = 0x00020000, // NOT VERIFIED - Unknown3 = 0x00040000, // NOT VERIFIED + Unknown_0x20000 = 0x00020000, // NOT VERIFIED + Unknown_0x40000 = 0x00040000, // NOT VERIFIED Backward = 0x00080000, SmoothGroundPath = 0x00100000, CanSwim = 0x00200000, UncompressedPath = 0x00400000, - Unknown4 = 0x00800000, // NOT VERIFIED - Unknown5 = 0x01000000, // NOT VERIFIED + Unknown_0x800000 = 0x00800000, // NOT VERIFIED + Unknown_0x1000000 = 0x01000000, // NOT VERIFIED Animation = 0x02000000, // Plays animation after some time passed Parabolic = 0x04000000, // Affects elevation computation, can't be combined with Falling flag FadeObject = 0x08000000, Steering = 0x10000000, - Unknown8 = 0x20000000, // NOT VERIFIED - Unknown9 = 0x40000000, // NOT VERIFIED - Unknown10 = 0x80000000, // NOT VERIFIED + Unknown_0x20000000 = 0x20000000, // NOT VERIFIED + Unknown_0x40000000 = 0x40000000, // NOT VERIFIED + Unknown_0x80000000 = 0x80000000, // NOT VERIFIED // Masks - // animation ids stored here, see AnimType enum, used with Animation flag - Mask_Animations = 0x7, // flags that shouldn't be appended into SMSG_MONSTER_MOVE\SMSG_MONSTER_MOVE_TRANSPORT packet, should be more probably - Mask_No_Monster_Move = Mask_Animations | Done, + Mask_No_Monster_Move = Done, // Unused, not suported flags - Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown0|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|FadeObject|Steering|Unknown8|Unknown9|Unknown10 + Mask_Unused = No_Spline | Enter_Cycle | Frozen | Unknown_0x8 | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000 + | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | Steering | Unknown_0x20000000 | Unknown_0x40000000 | Unknown_0x80000000 }; inline uint32& raw() { return (uint32&)*this; } @@ -81,7 +82,6 @@ namespace Movement bool isSmooth() const { return (raw() & Catmullrom) != 0; } bool isLinear() const { return !isSmooth(); } - uint8 getAnimTier() const { return animTier; } bool hasAllFlags(uint32 f) const { return (raw() & f) == f; } bool hasFlag(uint32 f) const { return (raw() & f) != 0; } uint32 operator & (uint32 f) const { return (raw() & f); } @@ -93,21 +93,23 @@ namespace Movement void operator &= (uint32 f) { raw() &= f; } void operator |= (uint32 f) { raw() |= f; } - void EnableAnimation(uint8 anim) { raw() = (raw() & ~(Mask_Animations | Falling | Parabolic | FallingSlow | FadeObject)) | Animation | (anim & Mask_Animations); } - void EnableParabolic() { raw() = (raw() & ~(Mask_Animations | Falling | Animation | FallingSlow | FadeObject)) | Parabolic; } + void EnableAnimation() { raw() = (raw() & ~(Falling | Parabolic | FallingSlow | FadeObject)) | Animation; } + void EnableParabolic() { raw() = (raw() & ~(Falling | Animation | FallingSlow | FadeObject)) | Parabolic; } void EnableFlying() { raw() = (raw() & ~(Falling)) | Flying; } - void EnableFalling() { raw() = (raw() & ~(Mask_Animations | Parabolic | Animation | Flying)) | Falling; } + void EnableFalling() { raw() = (raw() & ~(Parabolic | Animation | Flying)) | Falling; } void EnableCatmullRom() { raw() = (raw() & ~SmoothGroundPath) | Catmullrom; } void EnableTransportEnter() { raw() = (raw() & ~TransportExit) | TransportEnter; } void EnableTransportExit() { raw() = (raw() & ~TransportEnter) | TransportExit; } - uint8 animTier : 3; - bool unknown0 : 1; + bool unknown0x1 : 1; + bool unknown0x2 : 1; + bool unknown0x4 : 1; + bool unknown0x8 : 1; bool fallingSlow : 1; bool done : 1; bool falling : 1; bool no_spline : 1; - bool unknown1 : 1; + bool unknown0x100 : 1; bool flying : 1; bool orientationFixed : 1; bool catmullrom : 1; @@ -116,21 +118,21 @@ namespace Movement bool frozen : 1; bool transportEnter : 1; bool transportExit : 1; - bool unknown2 : 1; - bool unknown3 : 1; + bool unknown0x20000 : 1; + bool unknown0x40000 : 1; bool backward : 1; bool smoothGroundPath : 1; bool canSwim : 1; bool uncompressedPath : 1; - bool unknown4 : 1; - bool unknown5 : 1; + bool unknown0x800000 : 1; + bool unknown0x1000000 : 1; bool animation : 1; bool parabolic : 1; bool fadeObject : 1; bool steering : 1; - bool unknown8 : 1; - bool unknown9 : 1; - bool unknown10 : 1; + bool unknown0x20000000 : 1; + bool unknown0x40000000 : 1; + bool unknown0x80000000 : 1; }; #pragma pack(pop) } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 62678e2be91..fa33851475d 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -181,7 +181,9 @@ namespace Movement inline void MoveSplineInit::SetAnimation(AnimType anim) { args.time_perc = 0.f; - args.flags.EnableAnimation((uint8)anim); + args.animTier.emplace(); + args.animTier->AnimTier = anim; + args.flags.EnableAnimation(); } inline void MoveSplineInit::DisableTransportPathTransformations() { args.TransformForTransport = false; } diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h index 6ae25b48de0..61d2b951c94 100644 --- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h +++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h @@ -50,6 +50,12 @@ namespace Movement uint32 ParabolicCurveId = 0; }; + struct AnimTierTransition + { + uint32 TierTransitionId = 0; + uint8 AnimTier = 0; + }; + struct MoveSplineInitArgs { explicit MoveSplineInitArgs(size_t path_capacity = 16); @@ -65,6 +71,7 @@ namespace Movement uint32 splineId; float initialOrientation; Optional<SpellEffectExtraData> spellEffectExtra; + Optional<AnimTierTransition> animTier; bool walk; bool HasVelocity; bool TransformForTransport; diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp index 95ceb3752a5..f8e9ba0d8a6 100644 --- a/src/server/game/Movement/Spline/MovementUtil.cpp +++ b/src/server/game/Movement/Spline/MovementUtil.cpp @@ -133,13 +133,13 @@ namespace Movement STRINGIZE(CanSwimToFlyTrans ), // 0x00000400 STRINGIZE(Unk11 ), // 0x00000800 STRINGIZE(CanTurnWhileFalling ), // 0x00001000 - STRINGIZE(Unkt13 ), // 0x00002000 + STRINGIZE(Unk13 ), // 0x00002000 STRINGIZE(IgnoreMovementForces ), // 0x00004000 STRINGIZE(Unk15 ), // 0x00008000 STRINGIZE(CanDoubleJump ), // 0x00010000 STRINGIZE(DoubleJump ), // 0x00020000 STRINGIZE(Unk18 ), // 0x00040000 - STRINGIZE(Unk19 ), // 0x00080000 + STRINGIZE(AwaitingLoad ), // 0x00080000 STRINGIZE(InterpolatedMovement ), // 0x00100000 STRINGIZE(InterpolatedTurning ), // 0x00200000 STRINGIZE(InterpolatedPitching ), // 0x00400000 @@ -147,38 +147,38 @@ namespace Movement char const* SplineFlagNames[32] = { - STRINGIZE(AnimBit1 ), // 0x00000001 - STRINGIZE(AnimBit2 ), // 0x00000002 - STRINGIZE(AnimBit3 ), // 0x00000004 - STRINGIZE(Unknown0 ), // 0x00000008 - STRINGIZE(FallingSlow ), // 0x00000010 - STRINGIZE(Done ), // 0x00000020 - STRINGIZE(Falling ), // 0x00000040 // Not Compartible With Trajectory Movement - STRINGIZE(No_Spline ), // 0x00000080 - STRINGIZE(Unknown1 ), // 0x00000100 - STRINGIZE(Flying ), // 0x00000200 // Smooth Movement(Catmullrom Interpolation Mode), Flying Animation - STRINGIZE(OrientationFixed ), // 0x00000400 // Model Orientation Fixed - STRINGIZE(Catmullrom ), // 0x00000800 // Used Catmullrom Interpolation Mode - STRINGIZE(Cyclic ), // 0x00001000 // Movement By Cycled Spline - STRINGIZE(Enter_Cycle ), // 0x00002000 // Everytime Appears With Cyclic Flag In Monster Move Packet - STRINGIZE(Frozen ), // 0x00004000 - STRINGIZE(TransportEnter ), // 0x00008000 - STRINGIZE(TransportExit ), // 0x00010000 - STRINGIZE(Unknown2 ), // 0x00020000 - STRINGIZE(Unknown3 ), // 0x00040000 - STRINGIZE(Backward ), // 0x00080000 // Appears With Runmode Flag, Nodes ), // 1, Handles Orientation - STRINGIZE(SmoothGroundPath ), // 0x00100000 - STRINGIZE(CanSwim ), // 0x00200000 - STRINGIZE(UncompressedPath ), // 0x00400000 - STRINGIZE(Unknown4 ), // 0x00800000 - STRINGIZE(Unknown5 ), // 0x01000000 - STRINGIZE(Animation ), // 0x02000000 // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement - STRINGIZE(Parabolic ), // 0x04000000 // Not Compartible With Fall Movement - STRINGIZE(FadeObject ), // 0x08000000 - STRINGIZE(Steering ), // 0x10000000 - STRINGIZE(Unknown8 ), // 0x20000000 - STRINGIZE(Unknown9 ), // 0x40000000 - STRINGIZE(Unknown10 ), // 0x80000000 + STRINGIZE(Unknown_0x1 ), // 0x00000001 + STRINGIZE(Unknown_0x2 ), // 0x00000002 + STRINGIZE(Unknown_0x4 ), // 0x00000004 + STRINGIZE(Unknown_0x8 ), // 0x00000008 + STRINGIZE(FallingSlow ), // 0x00000010 + STRINGIZE(Done ), // 0x00000020 + STRINGIZE(Falling ), // 0x00000040 // Not Compartible With Trajectory Movement + STRINGIZE(No_Spline ), // 0x00000080 + STRINGIZE(Unknown_0x100 ), // 0x00000100 + STRINGIZE(Flying ), // 0x00000200 // Smooth Movement(Catmullrom Interpolation Mode), Flying Animation + STRINGIZE(OrientationFixed ), // 0x00000400 // Model Orientation Fixed + STRINGIZE(Catmullrom ), // 0x00000800 // Used Catmullrom Interpolation Mode + STRINGIZE(Cyclic ), // 0x00001000 // Movement By Cycled Spline + STRINGIZE(Enter_Cycle ), // 0x00002000 // Everytime Appears With Cyclic Flag In Monster Move Packet + STRINGIZE(Frozen ), // 0x00004000 + STRINGIZE(TransportEnter ), // 0x00008000 + STRINGIZE(TransportExit ), // 0x00010000 + STRINGIZE(Unknown_0x20000 ), // 0x00020000 + STRINGIZE(Unknown_0x40000 ), // 0x00040000 + STRINGIZE(Backward ), // 0x00080000 // Appears With Runmode Flag, Nodes ), // 1, Handles Orientation + STRINGIZE(SmoothGroundPath ), // 0x00100000 + STRINGIZE(CanSwim ), // 0x00200000 + STRINGIZE(UncompressedPath ), // 0x00400000 + STRINGIZE(Unknown_0x800000 ), // 0x00800000 + STRINGIZE(Unknown_0x1000000 ), // 0x01000000 + STRINGIZE(Animation ), // 0x02000000 // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement + STRINGIZE(Parabolic ), // 0x04000000 // Not Compartible With Fall Movement + STRINGIZE(FadeObject ), // 0x08000000 + STRINGIZE(Steering ), // 0x10000000 + STRINGIZE(Unknown_0x20000000), // 0x20000000 + STRINGIZE(Unknown_0x40000000), // 0x40000000 + STRINGIZE(Unknown_0x80000000), // 0x80000000 }; template<class Flags, int N> |
