aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/IdleMovementGenerator.cpp10
-rw-r--r--src/game/IdleMovementGenerator.h4
-rw-r--r--src/game/MotionMaster.cpp3
3 files changed, 10 insertions, 7 deletions
diff --git a/src/game/IdleMovementGenerator.cpp b/src/game/IdleMovementGenerator.cpp
index 1809d8cd0ca..7c68e3c09f5 100644
--- a/src/game/IdleMovementGenerator.cpp
+++ b/src/game/IdleMovementGenerator.cpp
@@ -57,14 +57,14 @@ bool RotateMovementGenerator::Update(Unit& owner, const uint32& diff)
float angle = owner.GetOrientation();
if(m_direction == ROTATE_DIRECTION_LEFT)
{
- angle += diff / m_duration * M_PI * 2;
- if(angle >= M_PI * 2 ) angle = 0;
+ angle += (float)diff * M_PI * 2 / m_maxDuration;
+ while(angle >= M_PI * 2 ) angle -= M_PI * 2;
}
else
{
- angle -= diff / m_duration * M_PI * 2;
- if(angle < 0) angle = M_PI * 2;
- }
+ angle -= (float)diff * M_PI * 2 / m_maxDuration;
+ while(angle < 0) angle += M_PI * 2;
+ }
owner.SetOrientation(angle);
owner.SendMovementFlagUpdate(); // this is a hack. we do not have anything correct to send in the beginning
diff --git a/src/game/IdleMovementGenerator.h b/src/game/IdleMovementGenerator.h
index 1f3f5e81bd4..7251e8b011f 100644
--- a/src/game/IdleMovementGenerator.h
+++ b/src/game/IdleMovementGenerator.h
@@ -39,7 +39,7 @@ extern IdleMovementGenerator si_idleMovement;
class TRINITY_DLL_SPEC RotateMovementGenerator : public MovementGenerator
{
public:
- explicit RotateMovementGenerator(uint32 time, RotateDirection direction) : m_duration(time), m_direction(direction) {}
+ explicit RotateMovementGenerator(uint32 time, RotateDirection direction) : m_duration(time), m_maxDuration(time), m_direction(direction) {}
void Initialize(Unit& owner);
void Finalize(Unit& owner);
@@ -48,7 +48,7 @@ class TRINITY_DLL_SPEC RotateMovementGenerator : public MovementGenerator
MovementGeneratorType GetMovementGeneratorType() { return ROTATE_MOTION_TYPE; }
private:
- uint32 m_duration;
+ uint32 m_duration, m_maxDuration;
RotateDirection m_direction;
};
diff --git a/src/game/MotionMaster.cpp b/src/game/MotionMaster.cpp
index 81d72f8db6f..d77bd83ede2 100644
--- a/src/game/MotionMaster.cpp
+++ b/src/game/MotionMaster.cpp
@@ -521,6 +521,9 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable)
void MotionMaster::MoveRotate(uint32 time, RotateDirection direction)
{
+ if(!time)
+ return;
+
Mutate(new RotateMovementGenerator(time, direction), MOTION_SLOT_ACTIVE);
}