Added threshold to DoAfter's user and target movement checks (#2585)
* Added threshold to DoAfter user and target movement checks * Fixed spacing * Update Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs Co-authored-by: Manel Navola <ManelNavola@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
This commit is contained in:
@@ -114,7 +114,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
|
|||||||
// Predictions
|
// Predictions
|
||||||
if (doAfter.BreakOnUserMove)
|
if (doAfter.BreakOnUserMove)
|
||||||
{
|
{
|
||||||
if (userGrid != doAfter.UserGrid)
|
if (!userGrid.InRange(EntityManager, doAfter.UserGrid, doAfter.MovementThreshold))
|
||||||
{
|
{
|
||||||
comp.Cancel(id, currentTime);
|
comp.Cancel(id, currentTime);
|
||||||
continue;
|
continue;
|
||||||
@@ -123,7 +123,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
|
|||||||
|
|
||||||
if (doAfter.BreakOnTargetMove)
|
if (doAfter.BreakOnTargetMove)
|
||||||
{
|
{
|
||||||
if (EntityManager.TryGetEntity(doAfter.TargetUid, out var targetEntity) && targetEntity.Transform.Coordinates != doAfter.TargetGrid)
|
if (EntityManager.TryGetEntity(doAfter.TargetUid, out var targetEntity) && !targetEntity.Transform.Coordinates.InRange(EntityManager, doAfter.TargetGrid, doAfter.MovementThreshold))
|
||||||
{
|
{
|
||||||
comp.Cancel(id, currentTime);
|
comp.Cancel(id, currentTime);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#nullable enable
|
#nullable enable
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Content.Server.GameObjects.EntitySystems.DoAfter;
|
using Content.Server.GameObjects.EntitySystems.DoAfter;
|
||||||
using Content.Shared.GameObjects.Components;
|
using Content.Shared.GameObjects.Components;
|
||||||
@@ -31,6 +31,7 @@ namespace Content.Server.GameObjects.Components
|
|||||||
doAfter.EventArgs.Delay,
|
doAfter.EventArgs.Delay,
|
||||||
doAfter.EventArgs.BreakOnUserMove,
|
doAfter.EventArgs.BreakOnUserMove,
|
||||||
doAfter.EventArgs.BreakOnTargetMove,
|
doAfter.EventArgs.BreakOnTargetMove,
|
||||||
|
doAfter.EventArgs.MovementThreshold,
|
||||||
doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid);
|
doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid);
|
||||||
|
|
||||||
toAdd.Add(clientDoAfter);
|
toAdd.Add(clientDoAfter);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#nullable enable
|
#nullable enable
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Content.Server.GameObjects.Components.GUI;
|
using Content.Server.GameObjects.Components.GUI;
|
||||||
@@ -118,12 +118,14 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO :Handle inertia in space.
|
// TODO :Handle inertia in space.
|
||||||
if (EventArgs.BreakOnUserMove && EventArgs.User.Transform.Coordinates != UserGrid)
|
if (EventArgs.BreakOnUserMove && !EventArgs.User.Transform.Coordinates.InRange(
|
||||||
|
EventArgs.User.EntityManager, UserGrid, EventArgs.MovementThreshold))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EventArgs.BreakOnTargetMove && EventArgs.Target!.Transform.Coordinates != TargetGrid)
|
if (EventArgs.BreakOnTargetMove && !EventArgs.Target!.Transform.Coordinates.InRange(
|
||||||
|
EventArgs.User.EntityManager, TargetGrid, EventArgs.MovementThreshold))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#nullable enable
|
#nullable enable
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Content.Shared.Physics;
|
using Content.Shared.Physics;
|
||||||
@@ -60,6 +60,11 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool BreakOnTargetMove { get; set; }
|
public bool BreakOnTargetMove { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Threshold for user and target movement
|
||||||
|
/// </summary>
|
||||||
|
public float MovementThreshold { get; set; }
|
||||||
|
|
||||||
public bool BreakOnDamage { get; set; }
|
public bool BreakOnDamage { get; set; }
|
||||||
public bool BreakOnStun { get; set; }
|
public bool BreakOnStun { get; set; }
|
||||||
|
|
||||||
@@ -86,6 +91,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
|
|||||||
Delay = delay;
|
Delay = delay;
|
||||||
CancelToken = cancelToken;
|
CancelToken = cancelToken;
|
||||||
Target = target;
|
Target = target;
|
||||||
|
MovementThreshold = 0.1f;
|
||||||
|
|
||||||
if (Target == null)
|
if (Target == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
@@ -59,7 +59,9 @@ namespace Content.Shared.GameObjects.Components
|
|||||||
|
|
||||||
public bool BreakOnTargetMove { get; }
|
public bool BreakOnTargetMove { get; }
|
||||||
|
|
||||||
public ClientDoAfter(byte id, EntityCoordinates userGrid, EntityCoordinates targetGrid, TimeSpan startTime, float delay, bool breakOnUserMove, bool breakOnTargetMove, EntityUid targetUid = default)
|
public float MovementThreshold { get; }
|
||||||
|
|
||||||
|
public ClientDoAfter(byte id, EntityCoordinates userGrid, EntityCoordinates targetGrid, TimeSpan startTime, float delay, bool breakOnUserMove, bool breakOnTargetMove, float movementThreshold, EntityUid targetUid = default)
|
||||||
{
|
{
|
||||||
ID = id;
|
ID = id;
|
||||||
UserGrid = userGrid;
|
UserGrid = userGrid;
|
||||||
@@ -68,6 +70,7 @@ namespace Content.Shared.GameObjects.Components
|
|||||||
Delay = delay;
|
Delay = delay;
|
||||||
BreakOnUserMove = breakOnUserMove;
|
BreakOnUserMove = breakOnUserMove;
|
||||||
BreakOnTargetMove = breakOnTargetMove;
|
BreakOnTargetMove = breakOnTargetMove;
|
||||||
|
MovementThreshold = movementThreshold;
|
||||||
TargetUid = targetUid;
|
TargetUid = targetUid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user