diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-02-27 19:30:44 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-02-27 19:30:44 +0100 |
commit | c7cd51e8f543de04b2953eada7a57897a5c0161d (patch) | |
tree | 398c3ca17d257bd60fb0249fb3071e83201c9a8f /src | |
parent | 87b6b9c27fa5a0f451a3b45e82bdee6c9be38a35 (diff) |
Core/Movement: New names for a few spline flags
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineFlag.h | 14 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 6 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInitArgs.h | 3 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MovementUtil.cpp | 6 |
9 files changed, 39 insertions, 20 deletions
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 58250d043fd..32fbbddb2b4 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -733,7 +733,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; } bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; } bool CanWalk() const { return (GetCreatureTemplate()->InhabitType & INHABIT_GROUND) != 0; } - bool CanSwim() const { return (GetCreatureTemplate()->InhabitType & INHABIT_WATER) != 0 || IsPet(); } + bool CanSwim() const override { return (GetCreatureTemplate()->InhabitType & INHABIT_WATER) != 0 || IsPet(); } bool CanFly() const override { return (GetCreatureTemplate()->InhabitType & INHABIT_AIR) != 0; } void SetReactState(ReactStates st) { m_reactState = st; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a7ee9419d2c..67f8f2d74b5 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14904,6 +14904,18 @@ bool Unit::IsFalling() const return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR) || movespline->isFalling(); } +bool Unit::CanSwim() const +{ + // Mirror client behavior, if this method returns false then client will not use swimming animation and for players will apply gravity as if there was no water + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CANNOT_SWIM)) + return false; + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) // is player + return true; + if (HasFlag(UNIT_FIELD_FLAGS_2, 0x1000000)) + return false; + return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_RENAME | UNIT_FLAG_UNK_15); +} + void Unit::NearTeleportTo(Position const& pos, bool casting /*= false*/) { DisableSpline(); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 0e17db6b544..054db0ef5eb 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -786,6 +786,7 @@ enum NPCFlags : uint64 UNIT_NPC_FLAG_BLACK_MARKET = 0x0080000000, // black market UNIT_NPC_FLAG_ITEM_UPGRADE_MASTER = 0x0100000000, UNIT_NPC_FLAG_GARRISON_ARCHITECT = 0x0200000000, + UNIT_NPC_FLAG_STEERING = 0x0400000000, UNIT_NPC_FLAG_SHIPMENT_CRAFTER = 0x1000000000, UNIT_NPC_FLAG_GARRISON_MISSION_NPC = 0x2000000000, UNIT_NPC_FLAG_TRADESKILL_NPC = 0x4000000000, @@ -2246,6 +2247,7 @@ class TC_GAME_API Unit : public WorldObject virtual bool CanFly() const = 0; bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_DISABLE_GRAVITY); } bool IsFalling() const; + virtual bool CanSwim() const; void RewardRage(uint32 baseRage); diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index a9912745435..b8f025bde23 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -67,7 +67,7 @@ Location MoveSpline::ComputePosition() const c.orientation = std::atan2(hermite.y, hermite.x); } - if (splineflags.orientationInversed) + if (splineflags.backward) c.orientation = c.orientation - float(M_PI); } return c; diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h index 7925c8875c5..8b10bbae202 100644 --- a/src/server/game/Movement/Spline/MoveSplineFlag.h +++ b/src/server/game/Movement/Spline/MoveSplineFlag.h @@ -48,16 +48,16 @@ namespace Movement TransportExit = 0x00010000, Unknown2 = 0x00020000, // NOT VERIFIED Unknown3 = 0x00040000, // NOT VERIFIED - OrientationInversed = 0x00080000, + Backward = 0x00080000, SmoothGroundPath = 0x00100000, - Walkmode = 0x00200000, + CanSwim = 0x00200000, UncompressedPath = 0x00400000, Unknown4 = 0x00800000, // NOT VERIFIED Unknown5 = 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, - Unknown7 = 0x10000000, // NOT VERIFIED + Steering = 0x10000000, Unknown8 = 0x20000000, // NOT VERIFIED Unknown9 = 0x40000000, // NOT VERIFIED Unknown10 = 0x80000000, // NOT VERIFIED @@ -68,7 +68,7 @@ namespace Movement // 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, // Unused, not suported flags - Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown0|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|FadeObject|Unknown7|Unknown8|Unknown9|Unknown10 + Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown0|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|FadeObject|Steering|Unknown8|Unknown9|Unknown10 }; inline uint32& raw() { return (uint32&)*this; } @@ -120,16 +120,16 @@ namespace Movement bool transportExit : 1; bool unknown2 : 1; bool unknown3 : 1; - bool orientationInversed : 1; + bool backward : 1; bool smoothGroundPath : 1; - bool walkmode : 1; + bool canSwim : 1; bool uncompressedPath : 1; bool unknown4 : 1; bool unknown5 : 1; bool animation : 1; bool parabolic : 1; bool fadeObject : 1; - bool unknown7 : 1; + bool steering : 1; bool unknown8 : 1; bool unknown9 : 1; bool unknown10 : 1; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index f4d5a449e57..e31250b19e3 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -88,7 +88,10 @@ namespace Movement move_spline.onTransport = !unit->GetTransGUID().IsEmpty(); uint32 moveFlags = unit->m_movementInfo.GetMovementFlags(); - moveFlags |= MOVEMENTFLAG_FORWARD; + if (!args.flags.backward) + moveFlags = moveFlags & ~(MOVEMENTFLAG_BACKWARD) | MOVEMENTFLAG_FORWARD; + else + moveFlags = moveFlags & ~(MOVEMENTFLAG_FORWARD) | MOVEMENTFLAG_BACKWARD; if (moveFlags & MOVEMENTFLAG_ROOT) moveFlags &= ~MOVEMENTFLAG_MASK_MOVING; @@ -98,7 +101,7 @@ namespace Movement // If spline is initialized with SetWalk method it only means we need to select // walk move speed for it but not add walk flag to unit uint32 moveFlagsForSpeed = moveFlags; - if (args.flags.walkmode) + if (args.walk) moveFlagsForSpeed |= MOVEMENTFLAG_WALKING; else moveFlagsForSpeed &= ~MOVEMENTFLAG_WALKING; @@ -179,8 +182,9 @@ namespace Movement // Elevators also use MOVEMENTFLAG_ONTRANSPORT but we do not keep track of their position changes args.TransformForTransport = !unit->GetTransGUID().IsEmpty(); // mix existing state into new - args.flags.walkmode = unit->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING); - args.flags.flying = unit->m_movementInfo.HasMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY)); + args.flags.canSwim = unit->CanSwim(); + args.walk = unit->HasUnitMovementFlag(MOVEMENTFLAG_WALKING); + args.flags.flying = unit->HasUnitMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY)); args.flags.smoothGroundPath = true; // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index c873013405a..e02f840f107 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -133,7 +133,7 @@ namespace Movement /* Inverses unit model orientation. Disabled by default */ - void SetOrientationInversed(); + void SetBackward(); /* Fixes unit's model rotation. Disabled by default */ @@ -160,12 +160,12 @@ namespace Movement }; inline void MoveSplineInit::SetFly() { args.flags.EnableFlying(); } - inline void MoveSplineInit::SetWalk(bool enable) { args.flags.walkmode = enable; } + inline void MoveSplineInit::SetWalk(bool enable) { args.walk = enable; } inline void MoveSplineInit::SetSmooth() { args.flags.EnableCatmullRom(); } inline void MoveSplineInit::SetUncompressed() { args.flags.uncompressedPath = true; } inline void MoveSplineInit::SetCyclic() { args.flags.cyclic = true; } inline void MoveSplineInit::SetVelocity(float vel) { args.velocity = vel; args.HasVelocity = true; } - inline void MoveSplineInit::SetOrientationInversed() { args.flags.orientationInversed = true;} + inline void MoveSplineInit::SetBackward() { args.flags.backward = true; } inline void MoveSplineInit::SetTransportEnter() { args.flags.EnableTransportEnter(); } inline void MoveSplineInit::SetTransportExit() { args.flags.EnableTransportExit(); } inline void MoveSplineInit::SetOrientationFixed(bool enable) { args.flags.orientationFixed = enable; } diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h index fc5b82102cd..a90b2012ae0 100644 --- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h +++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h @@ -52,7 +52,7 @@ namespace Movement { MoveSplineInitArgs(size_t path_capacity = 16) : path_Idx_offset(0), velocity(0.f), parabolic_amplitude(0.f), time_perc(0.f), splineId(0), initialOrientation(0.f), - HasVelocity(false), TransformForTransport(true) + walk(false), HasVelocity(false), TransformForTransport(true) { path.reserve(path_capacity); } @@ -67,6 +67,7 @@ namespace Movement uint32 splineId; float initialOrientation; Optional<SpellEffectExtraData> spellEffectExtra; + 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 f1e685518a2..050d6cd61e0 100644 --- a/src/server/game/Movement/Spline/MovementUtil.cpp +++ b/src/server/game/Movement/Spline/MovementUtil.cpp @@ -160,16 +160,16 @@ namespace Movement STRINGIZE(TransportExit ), // 0x00010000 STRINGIZE(Unknown2 ), // 0x00020000 STRINGIZE(Unknown3 ), // 0x00040000 - STRINGIZE(OrientationInversed), // 0x00080000 // Appears With Runmode Flag, Nodes ), // 1, Handles Orientation + STRINGIZE(Backward ), // 0x00080000 // Appears With Runmode Flag, Nodes ), // 1, Handles Orientation STRINGIZE(SmoothGroundPath ), // 0x00100000 - STRINGIZE(Walkmode ), // 0x00200000 + 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(Unknown7 ), // 0x10000000 + STRINGIZE(Steering ), // 0x10000000 STRINGIZE(Unknown8 ), // 0x20000000 STRINGIZE(Unknown9 ), // 0x40000000 STRINGIZE(Unknown10 ), // 0x80000000 |