Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
PointMovementGenerator.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Creature.h"
7#include "CreatureAI.h"
8#include "CreatureGroups.h"
9#include "Errors.h"
10#include "MoveSpline.h"
11#include "MoveSplineInit.h"
12#include "Player.h"
14#include "World.h"
15
16//----- Point Movement Generator
17template<class T>
20 if (!unit->IsStopped())
21 unit->StopMoving();
23 unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
24
25 if (id == EVENT_CHARGE_PREPATH)
26 return;
27
28 Movement::MoveSplineInit init(unit);
29 init.MoveTo(i_x, i_y, i_z, m_generatePath);
30 if (speed > 0.0f)
31 init.SetVelocity(speed);
32 init.Launch();
33
34 // Call for creature group update
35 if (Creature* creature = unit->ToCreature())
36 if (creature->GetFormation() && creature->GetFormation()->getLeader() == creature)
37 creature->GetFormation()->LeaderMoveTo(i_x, i_y, i_z);
38}
39
40template<class T>
42{
43 if (!unit)
44 return false;
45
46 if (unit->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED))
47 {
48 unit->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
49 return true;
50 }
51
52 unit->AddUnitState(UNIT_STATE_ROAMING_MOVE);
53
54 if (id != EVENT_CHARGE_PREPATH && i_recalculateSpeed && !unit->movespline->Finalized())
55 {
56 i_recalculateSpeed = false;
57 Movement::MoveSplineInit init(unit);
59 if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit
60 init.SetVelocity(speed);
61 init.Launch();
62
63 // Call for creature group update
64 if (Creature* creature = unit->ToCreature())
65 if (creature->GetFormation() && creature->GetFormation()->getLeader() == creature)
66 creature->GetFormation()->LeaderMoveTo(i_x, i_y, i_z);
67 }
68
69 return !unit->movespline->Finalized();
70}
71
72template<class T>
74{
75 if (unit->HasUnitState(UNIT_STATE_CHARGING))
76 unit->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
77
78 if (unit->movespline->Finalized())
79 MovementInform(unit);
80}
81
82template<class T>
84{
85 if (!unit->IsStopped())
86 unit->StopMoving();
87
88 unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
89}
90
91template<class T>
93
95{
96 if (unit->AI())
98}
99
108
116
118{
119 return !unit->movespline->Finalized();
120}
121
123{
124 if (unit->GetTypeId() != TypeID::TYPEID_UNIT)
125 return;
126
127 // Need restore previous movement since we have no proper states system
129 {
130 if (Unit* victim = unit->GetVictim())
131 unit->GetMotionMaster()->MoveChase(victim);
132 else
133 unit->GetMotionMaster()->Initialize();
134 }
135
136 if (unit->ToCreature()->AI())
138}
std::uint32_t uint32
Definition Define.h:77
@ POINT_MOTION_TYPE
@ EFFECT_MOTION_TYPE
@ TYPEID_UNIT
Definition Object.h:54
@ EVENT_CHARGE_PREPATH
@ UNIT_STATE_ROAMING_MOVE
Definition Unit.h:534
@ UNIT_STATE_CONFUSED
Definition Unit.h:523
@ UNIT_STATE_ROOT
Definition Unit.h:522
@ UNIT_STATE_CHARGING
Definition Unit.h:529
@ UNIT_STATE_ROAMING
Definition Unit.h:516
@ UNIT_STATE_FLEEING
Definition Unit.h:519
@ UNIT_STATE_STUNNED
Definition Unit.h:515
virtual void MovementInform(uint32, uint32)
Definition CreatureAI.h:118
void SetNoCallAssistance(bool val)
Definition Creature.h:583
void CallAssistance()
CreatureAI * AI() const
Definition Creature.h:483
void MoveChase(Unit *target, float dist=0.0f, float angle=0.0f)
void MoveSeekAssistanceDistract(uint32 timer)
void SetVelocity(float velocity)
void MoveTo(const Vector3 &destination, bool generatePath=true, bool forceDestination=false)
TypeID GetTypeId() const
Definition Object.h:131
Creature * ToCreature()
Definition Object.h:207
Definition Unit.h:1367
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
bool IsAlive() const
Definition Unit.h:2032
Unit * GetVictim() const
Definition Unit.h:1468
bool HasUnitState(const uint32 f) const
Definition Unit.h:1485
std::unique_ptr< Movement::MoveSpline > movespline
Definition Unit.h:2837
#define sWorld
Definition World.h:910
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY
Definition World.h:270