TrinityCore
Loading...
Searching...
No Matches
MovementDefines.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITY_MOVEMENTDEFINES_H
19#define TRINITY_MOVEMENTDEFINES_H
20
21#include "Common.h"
22#include "Duration.h"
23#include "ObjectGuid.h"
24#include "Optional.h"
25#include "Position.h"
26#include <variant>
27
28class Unit;
29
30#define SPEED_CHARGE 42.0f // assume it is 25 yard per 0.6 second
31
32// EnumUtils: DESCRIBE THIS
34{
35 IDLE_MOTION_TYPE = 0, // IdleMovementGenerator.h
36 RANDOM_MOTION_TYPE = 1, // RandomMovementGenerator.h
37 WAYPOINT_MOTION_TYPE = 2, // WaypointMovementGenerator.h
38 MAX_DB_MOTION_TYPE = 3, // Below motion types can't be set in DB.
39 CONFUSED_MOTION_TYPE = 4, // ConfusedMovementGenerator.h
40 CHASE_MOTION_TYPE = 5, // ChaseMovementGenerator.h
41 HOME_MOTION_TYPE = 6, // HomeMovementGenerator.h
42 FLIGHT_MOTION_TYPE = 7, // FlightPathMovementGenerator.h
43 POINT_MOTION_TYPE = 8, // PointMovementGenerator.h
44 FLEEING_MOTION_TYPE = 9, // FleeingMovementGenerator.h
45 DISTRACT_MOTION_TYPE = 10, // IdleMovementGenerator.h
46 ASSISTANCE_MOTION_TYPE = 11, // PointMovementGenerator.h
47 ASSISTANCE_DISTRACT_MOTION_TYPE = 12, // IdleMovementGenerator.h
48 TIMED_FLEEING_MOTION_TYPE = 13, // FleeingMovementGenerator.h
49 FOLLOW_MOTION_TYPE = 14, // FollowMovementGenerator.h
50 ROTATE_MOTION_TYPE = 15, // IdleMovementGenerator.h
52 SPLINE_CHAIN_MOTION_TYPE = 17, // SplineChainMovementGenerator.h
53 FORMATION_MOTION_TYPE = 18, // FormationMovementGenerator.h
54 MAX_MOTION_TYPE // SKIP
55};
56
58{
59 // MovementGenerators that don't check Unit::IsMovementPreventedByCasting
60 switch (type)
61 {
64 case EFFECT_MOTION_TYPE: // knockbacks, jumps, falling, land/takeoff transitions
65 return false;
66 default:
67 break;
68 }
69 return true;
70}
71
77
84
91
98
100{
101 Finished, // Movement finished either by arriving at location or successfully continuing it for requested duration
103};
104
110
112{
113 ChaseRange(float range);
114 ChaseRange(float _minRange, float _maxRange);
115 ChaseRange(float _minRange, float _minTolerance, float _maxTolerance, float _maxRange);
116
117 // this contains info that informs how we should path!
118 float MinRange; // we have to move if we are within this range... (min. attack range)
119 float MinTolerance; // ...and if we are, we will move this far away
120 float MaxRange; // we have to move if we are outside this range... (max. attack range)
121 float MaxTolerance; // ...and if we are, we will move into this range
122};
123
125{
126 ChaseAngle(float angle, float _tolerance = M_PI_4);
127
128 float RelativeAngle; // we want to be at this angle relative to the target (0 = front, M_PI = back)
129 float Tolerance; // but we'll tolerate anything within +- this much
130
131 float UpperBound() const;
132 float LowerBound() const;
133 bool IsAngleOkay(float relativeAngle) const;
134};
135
141
161
162using MovementFacingTarget = std::variant<std::monostate, Position, Unit const*, float>;
163
165{
166 constexpr MovementFadeObject() = default;
167 constexpr MovementFadeObject(Milliseconds duration) : Duration(duration) { }
168 constexpr MovementFadeObject(Optional<Milliseconds> duration) : Duration(duration) { }
169
171};
172
173inline bool IsInvalidMovementGeneratorType(uint8 const type) { return type == MAX_DB_MOTION_TYPE || type >= MAX_MOTION_TYPE; }
174inline bool IsInvalidMovementSlot(uint8 const slot) { return slot >= MAX_MOTION_SLOT; }
175
176#endif
#define M_PI_4
Definition Common.h:122
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
uint32_t uint32
Definition Define.h:154
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
bool IsInvalidMovementSlot(uint8 const slot)
MovementGeneratorMode
@ MOTION_MODE_DEFAULT
@ MOTION_MODE_OVERRIDE
RotateDirection
@ ROTATE_DIRECTION_RIGHT
@ ROTATE_DIRECTION_LEFT
MovementGeneratorPriority
@ MOTION_PRIORITY_HIGHEST
@ MOTION_PRIORITY_NONE
@ MOTION_PRIORITY_NORMAL
MovementSlot
@ MOTION_SLOT_ACTIVE
@ MAX_MOTION_SLOT
@ MOTION_SLOT_DEFAULT
MovementWalkRunSpeedSelectionMode
MovementGeneratorType
@ TIMED_FLEEING_MOTION_TYPE
@ MAX_DB_MOTION_TYPE
@ FORMATION_MOTION_TYPE
@ ASSISTANCE_MOTION_TYPE
@ DISTRACT_MOTION_TYPE
@ IDLE_MOTION_TYPE
@ CHASE_MOTION_TYPE
@ SPLINE_CHAIN_MOTION_TYPE
@ MAX_MOTION_TYPE
@ ROTATE_MOTION_TYPE
@ WAYPOINT_MOTION_TYPE
@ FLEEING_MOTION_TYPE
@ CONFUSED_MOTION_TYPE
@ HOME_MOTION_TYPE
@ POINT_MOTION_TYPE
@ FLIGHT_MOTION_TYPE
@ FOLLOW_MOTION_TYPE
@ RANDOM_MOTION_TYPE
@ ASSISTANCE_DISTRACT_MOTION_TYPE
@ EFFECT_MOTION_TYPE
std::variant< std::monostate, Position, Unit const *, float > MovementFacingTarget
constexpr bool CanStopMovementForSpellCasting(MovementGeneratorType type)
bool IsInvalidMovementGeneratorType(uint8 const type)
MovementStopReason
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
Definition Unit.h:635
Optional< uint32 > ParabolicCurveId
Optional< uint32 > TriggerSpellId
Optional< float > MaxHeight
Optional< float > MinHeight
Optional< uint32 > SpellVisualId
Optional< uint32 > ProgressCurveId
constexpr MovementFadeObject(Milliseconds duration)
constexpr MovementFadeObject(Optional< Milliseconds > duration)
Optional< Milliseconds > Duration
constexpr MovementFadeObject()=default