aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-02-27 19:30:44 +0100
committerShauren <shauren.trinity@gmail.com>2017-02-27 19:30:44 +0100
commitc7cd51e8f543de04b2953eada7a57897a5c0161d (patch)
tree398c3ca17d257bd60fb0249fb3071e83201c9a8f /src
parent87b6b9c27fa5a0f451a3b45e82bdee6c9be38a35 (diff)
Core/Movement: New names for a few spline flags
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp12
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp2
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h14
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp12
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.h6
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInitArgs.h3
-rw-r--r--src/server/game/Movement/Spline/MovementUtil.cpp6
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