Add BreakOnDistance to DoAfterEventArgs (#8902)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
@@ -162,6 +162,30 @@ namespace Content.Server.DoAfter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (EventArgs.DistanceThreshold != null)
|
||||||
|
{
|
||||||
|
var xformQuery = entityManager.GetEntityQuery<TransformComponent>();
|
||||||
|
TransformComponent? userXform = null;
|
||||||
|
|
||||||
|
// Check user distance to target AND used entities.
|
||||||
|
if (EventArgs.Target != null && !EventArgs.User.Equals(EventArgs.Target))
|
||||||
|
{
|
||||||
|
//recalculate Target location in case Target has also moved
|
||||||
|
var targetCoordinates = xformQuery.GetComponent(EventArgs.Target.Value).Coordinates;
|
||||||
|
userXform ??= xformQuery.GetComponent(EventArgs.User);
|
||||||
|
if (userXform.Coordinates.InRange(entityManager, targetCoordinates, EventArgs.DistanceThreshold.Value))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EventArgs.Used != null)
|
||||||
|
{
|
||||||
|
var targetCoordinates = xformQuery.GetComponent(EventArgs.Used.Value).Coordinates;
|
||||||
|
userXform ??= xformQuery.GetComponent(EventArgs.User);
|
||||||
|
if (!userXform.Coordinates.InRange(entityManager, targetCoordinates, EventArgs.DistanceThreshold.Value))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ namespace Content.Server.DoAfter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public EntityUid? Target { get; }
|
public EntityUid? Target { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Entity used by the User on the Target.
|
||||||
|
/// </summary>
|
||||||
|
public EntityUid? Used { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Manually cancel the do_after so it no longer runs
|
/// Manually cancel the do_after so it no longer runs
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -55,6 +60,11 @@ namespace Content.Server.DoAfter
|
|||||||
public FixedPoint2 DamageThreshold { get; set; }
|
public FixedPoint2 DamageThreshold { get; set; }
|
||||||
public bool BreakOnStun { get; set; }
|
public bool BreakOnStun { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Threshold for distance user from the used OR target entities.
|
||||||
|
/// </summary>
|
||||||
|
public float? DistanceThreshold { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Requires a function call once at the end (like InRangeUnobstructed).
|
/// Requires a function call once at the end (like InRangeUnobstructed).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -102,12 +112,14 @@ namespace Content.Server.DoAfter
|
|||||||
EntityUid user,
|
EntityUid user,
|
||||||
float delay,
|
float delay,
|
||||||
CancellationToken cancelToken = default,
|
CancellationToken cancelToken = default,
|
||||||
EntityUid? target = null)
|
EntityUid? target = null,
|
||||||
|
EntityUid? used = null)
|
||||||
{
|
{
|
||||||
User = user;
|
User = user;
|
||||||
Delay = delay;
|
Delay = delay;
|
||||||
CancelToken = cancelToken;
|
CancelToken = cancelToken;
|
||||||
Target = target;
|
Target = target;
|
||||||
|
Used = used;
|
||||||
MovementThreshold = 0.1f;
|
MovementThreshold = 0.1f;
|
||||||
DamageThreshold = 1.0;
|
DamageThreshold = 1.0;
|
||||||
|
|
||||||
|
|||||||
@@ -126,13 +126,14 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
|
|
||||||
var moveBreak = user != target;
|
var moveBreak = user != target;
|
||||||
|
|
||||||
_doAfterSystem.DoAfter(new DoAfterEventArgs(user, forceFeed ? food.ForceFeedDelay : food.Delay, food.CancelToken.Token, target)
|
_doAfterSystem.DoAfter(new DoAfterEventArgs(user, forceFeed ? food.ForceFeedDelay : food.Delay, food.CancelToken.Token, target, food.Owner)
|
||||||
{
|
{
|
||||||
BreakOnUserMove = moveBreak,
|
BreakOnUserMove = moveBreak,
|
||||||
BreakOnDamage = true,
|
BreakOnDamage = true,
|
||||||
BreakOnStun = true,
|
BreakOnStun = true,
|
||||||
BreakOnTargetMove = moveBreak,
|
BreakOnTargetMove = moveBreak,
|
||||||
MovementThreshold = 0.01f,
|
MovementThreshold = 0.01f,
|
||||||
|
DistanceThreshold = 2.0f,
|
||||||
TargetFinishedEvent = new FeedEvent(user, food, foodSolution, utensils),
|
TargetFinishedEvent = new FeedEvent(user, food, foodSolution, utensils),
|
||||||
BroadcastCancelledEvent = new ForceFeedCancelledEvent(food),
|
BroadcastCancelledEvent = new ForceFeedCancelledEvent(food),
|
||||||
NeedHand = true,
|
NeedHand = true,
|
||||||
|
|||||||
Reference in New Issue
Block a user