aboutsummaryrefslogtreecommitdiff
path: root/src/game/HomeMovementGenerator.cpp
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-17 15:51:44 -0700
committermaximius <none@none>2009-10-17 15:51:44 -0700
commite585187b248f48b3c6e9247b49fa07c6565d65e5 (patch)
tree637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/HomeMovementGenerator.cpp
parent26b5e033ffde3d161382fc9addbfa99738379641 (diff)
*Backed out changeset 3be01fb200a5
--HG-- branch : trunk
Diffstat (limited to 'src/game/HomeMovementGenerator.cpp')
-rw-r--r--src/game/HomeMovementGenerator.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/game/HomeMovementGenerator.cpp b/src/game/HomeMovementGenerator.cpp
index 435d1be1ab2..e2fc9b1e0ec 100644
--- a/src/game/HomeMovementGenerator.cpp
+++ b/src/game/HomeMovementGenerator.cpp
@@ -17,12 +17,14 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
#include "HomeMovementGenerator.h"
#include "Creature.h"
#include "CreatureAI.h"
#include "Traveller.h"
#include "DestinationHolderImp.h"
#include "WorldPacket.h"
+
void
HomeMovementGenerator<Creature>::Initialize(Creature & owner)
{
@@ -32,32 +34,41 @@ HomeMovementGenerator<Creature>::Initialize(Creature & owner)
owner.addUnitState(UNIT_STAT_EVADE);
_setTargetLocation(owner);
}
+
void
HomeMovementGenerator<Creature>::Reset(Creature &)
{
}
+
void
HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
{
if( !&owner )
return;
+
if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED) )
return;
+
float x, y, z;
owner.GetHomePosition(x, y, z, ori);
+
CreatureTraveller traveller(owner);
+
uint32 travel_time = i_destinationHolder.SetDestination(traveller, x, y, z);
modifyTravelTime(travel_time);
owner.clearUnitState(UNIT_STAT_ALL_STATE);
}
+
bool
HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff)
{
CreatureTraveller traveller( owner);
i_destinationHolder.UpdateTraveller(traveller, time_diff);
+
if (time_diff > i_travel_timer)
{
owner.AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+
// restore orientation of not moving creature at returning to home
if(owner.GetDefaultMovementType()==IDLE_MOTION_TYPE)
{
@@ -67,11 +78,14 @@ HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff
owner.BuildHeartBeatMsg(&packet);
owner.SendMessageToSet(&packet, false);
}
+
owner.clearUnitState(UNIT_STAT_EVADE);
owner.AI()->JustReachedHome();
return false;
}
+
i_travel_timer -= time_diff;
+
return true;
}