Core/Movement: Add MovePoint with facing

Port From (https://github.com/TrinityCore/TrinityCore/commit/c6d6ece1c7a450145598d5ac3c83b399cc731ee9)
This commit is contained in:
hondacrx
2021-04-16 15:24:08 -04:00
parent da0b406c8a
commit 4ce89c9508
2 changed files with 12 additions and 6 deletions
@@ -22,7 +22,7 @@ namespace Game.Movement
{
public class PointMovementGenerator<T> : MovementGeneratorMedium<T> where T : Unit
{
public PointMovementGenerator(uint id, float x, float y, float z, bool generatePath, float speed = 0.0f, Unit faceTarget = null, SpellEffectExtraData spellEffectExtraData = null)
public PointMovementGenerator(uint id, float x, float y, float z, bool generatePath, float speed = 0.0f, Unit faceTarget = null, SpellEffectExtraData spellEffectExtraData = null, float? finalOrient = null)
{
_movementId = id;
_destination = new Position(x, y, z);
@@ -31,6 +31,7 @@ namespace Game.Movement
_spellEffectExtra = spellEffectExtraData;
_generatePath = generatePath;
_recalculateSpeed = false;
_finalOrient = finalOrient;
}
public override void DoInitialize(T owner)
@@ -63,6 +64,9 @@ namespace Game.Movement
if (_spellEffectExtra != null)
init.SetSpellEffectExtraData(_spellEffectExtra);
if (_finalOrient.HasValue)
init.SetFacing(_finalOrient.Value);
init.Launch();
// Call for creature group update
@@ -149,6 +153,8 @@ namespace Game.Movement
bool _generatePath;
bool _recalculateSpeed;
bool _interrupt;
//! if set then unit will turn to specified _orient in provided _pos
float? _finalOrient;
}
public class AssistanceMovementGenerator : PointMovementGenerator<Creature>
+5 -5
View File
@@ -259,17 +259,17 @@ namespace Game.Movement
}
}
public void MovePoint(uint id, Position pos, bool generatePath = true)
public void MovePoint(uint id, Position pos, bool generatePath = true, float? finalOrient = null)
{
MovePoint(id, pos.posX, pos.posY, pos.posZ, generatePath);
MovePoint(id, pos.posX, pos.posY, pos.posZ, generatePath, finalOrient);
}
public void MovePoint(uint id, float x, float y, float z, bool generatePath = true)
public void MovePoint(uint id, float x, float y, float z, bool generatePath = true, float? finalOrient = null)
{
if (_owner.IsTypeId(TypeId.Player))
StartMovement(new PointMovementGenerator<Player>(id, x, y, z, generatePath), MovementSlot.Active);
StartMovement(new PointMovementGenerator<Player>(id, x, y, z, generatePath, 0.0f, null, null, finalOrient), MovementSlot.Active);
else
StartMovement(new PointMovementGenerator<Creature>(id, x, y, z, generatePath), MovementSlot.Active);
StartMovement(new PointMovementGenerator<Creature>(id, x, y, z, generatePath, 0.0f, null, null, finalOrient), MovementSlot.Active);
}
public void MoveCloserAndStop(uint id, Unit target, float distance)