diff options
Diffstat (limited to 'src/game/IdleMovementGenerator.cpp')
-rw-r--r-- | src/game/IdleMovementGenerator.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/game/IdleMovementGenerator.cpp b/src/game/IdleMovementGenerator.cpp index 770020205c4..7c68e3c09f5 100644 --- a/src/game/IdleMovementGenerator.cpp +++ b/src/game/IdleMovementGenerator.cpp @@ -17,10 +17,13 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #include "IdleMovementGenerator.h" #include "CreatureAI.h" #include "Creature.h" + IdleMovementGenerator si_idleMovement; + // StopMoving is needed to make unit stop if its last movement generator expires // But it should not be sent otherwise there are many redundent packets void IdleMovementGenerator::Initialize(Unit &owner) @@ -28,21 +31,27 @@ void IdleMovementGenerator::Initialize(Unit &owner) if(owner.hasUnitState(UNIT_STAT_MOVE)) owner.StopMoving(); } + void IdleMovementGenerator::Reset(Unit& owner) { if(owner.hasUnitState(UNIT_STAT_MOVE)) owner.StopMoving(); } + void RotateMovementGenerator::Initialize(Unit& owner) { if(owner.hasUnitState(UNIT_STAT_MOVE)) owner.StopMoving(); + if(owner.getVictim()) owner.SetInFront(owner.getVictim()); + owner.addUnitState(UNIT_STAT_ROTATING); - owner.AttackStop(); + + owner.AttackStop(); } + bool RotateMovementGenerator::Update(Unit& owner, const uint32& diff) { float angle = owner.GetOrientation(); @@ -58,36 +67,44 @@ bool RotateMovementGenerator::Update(Unit& owner, const uint32& diff) } owner.SetOrientation(angle); owner.SendMovementFlagUpdate(); // this is a hack. we do not have anything correct to send in the beginning + if(m_duration > diff) m_duration -= diff; else return false; + return true; } + void RotateMovementGenerator::Finalize(Unit &unit) { unit.clearUnitState(UNIT_STAT_ROTATING); if(unit.GetTypeId() == TYPEID_UNIT) ((Creature*)&unit)->AI()->MovementInform(ROTATE_MOTION_TYPE, 0); } + void DistractMovementGenerator::Initialize(Unit& owner) { owner.addUnitState(UNIT_STAT_DISTRACTED); } + void DistractMovementGenerator::Finalize(Unit& owner) { owner.clearUnitState(UNIT_STAT_DISTRACTED); } + bool DistractMovementGenerator::Update(Unit& owner, const uint32& time_diff) { if(time_diff > m_timer) return false; + m_timer -= time_diff; return true; } + void AssistanceDistractMovementGenerator::Finalize(Unit &unit) { |