aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement/Spline
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-11-04 21:39:21 +0100
committerShauren <shauren.trinity@gmail.com>2020-12-08 18:16:41 +0100
commitcab4c87d2d7f6d734ef067d6bf50f4b1d338a7bc (patch)
tree2eaf0fd8bc9e937a4c9611e18dd04d5001189036 /src/server/game/Movement/Spline
parent16b39a448acbe8ace88550a367be8e6bf565b00d (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.cpp3
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.h1
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h58
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.h4
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInitArgs.h7
-rw-r--r--src/server/game/Movement/Spline/MovementUtil.cpp68
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>