Core/Units: Added Unit::SetFacingToPoint function

Port From (https://github.com/TrinityCore/TrinityCore/commit/cdc09d29bc8fcb85d97846027ddf589478e21139)
This commit is contained in:
hondacrx
2023-03-13 03:24:45 -04:00
parent 888ed91c82
commit cd42942a7c
2 changed files with 31 additions and 8 deletions
@@ -218,6 +218,23 @@ namespace Game.Entities
init.Launch();
}
void SetFacingToPoint(Position point, bool force = true)
{
// do not face when already moving
if (!force && (!IsStopped() || !MoveSpline.Finalized()))
return;
/// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
MoveSplineInit init = new(this);
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ(), false);
if (GetTransport() != null)
init.DisableTransportPathTransformations(); // It makes no sense to target global orientation
init.SetFacing(point.GetPositionX(), point.GetPositionY(), point.GetPositionZ());
//GetMotionMaster()->LaunchMoveSpline(std::move(init), EVENT_FACE, MOTION_PRIORITY_HIGHEST);
init.Launch();
}
public void MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath = false, bool forceDestination = false)
{
var initializer = (MoveSplineInit init) =>
+14 -8
View File
@@ -196,6 +196,19 @@ namespace Game.Movement
unit.SendMessageToSet(packet, true);
}
public void SetFacing(Vector3 spot)
{
TransportPathTransform transform = new(unit, args.TransformForTransport);
Vector3 finalSpot = transform.Calc(spot);
args.facing.f = new Vector3(finalSpot.X, finalSpot.Y, finalSpot.Z);
args.facing.type = MonsterMoveType.FacingSpot;
}
public void SetFacing(float x, float y, float z)
{
SetFacing(new Vector3(x, y, z));
}
public void SetFacing(Unit target)
{
args.facing.angle = unit.GetAbsoluteAngle(target);
@@ -309,14 +322,6 @@ namespace Game.Movement
args.flags.EnableAnimation();
}
public void SetFacing(Vector3 spot)
{
TransportPathTransform transform = new(unit, args.TransformForTransport);
Vector3 finalSpot = transform.Calc(spot);
args.facing.f = new Vector3(finalSpot.X, finalSpot.Y, finalSpot.Z);
args.facing.type = MonsterMoveType.FacingSpot;
}
public void DisableTransportPathTransformations() { args.TransformForTransport = false; }
public void SetSpellEffectExtraData(SpellEffectExtraData spellEffectExtraData)
@@ -338,6 +343,7 @@ namespace Game.Movement
_owner = owner;
_transformForTransport = transformForTransport;
}
public Vector3 Calc(Vector3 input)
{
float x = input.X;