Adds a damage threshold property for DoAfters (#7712)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using Content.Shared.FixedPoint;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
|
|
||||||
namespace Content.Server.DoAfter
|
namespace Content.Server.DoAfter
|
||||||
@@ -49,6 +50,11 @@ namespace Content.Server.DoAfter
|
|||||||
public float MovementThreshold { get; set; }
|
public float MovementThreshold { get; set; }
|
||||||
|
|
||||||
public bool BreakOnDamage { get; set; }
|
public bool BreakOnDamage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Threshold for user damage
|
||||||
|
/// </summary>
|
||||||
|
public FixedPoint2 DamageThreshold { get; set; }
|
||||||
public bool BreakOnStun { get; set; }
|
public bool BreakOnStun { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -105,6 +111,7 @@ namespace Content.Server.DoAfter
|
|||||||
CancelToken = cancelToken;
|
CancelToken = cancelToken;
|
||||||
Target = target;
|
Target = target;
|
||||||
MovementThreshold = 0.1f;
|
MovementThreshold = 0.1f;
|
||||||
|
DamageThreshold = 0;
|
||||||
|
|
||||||
if (Target == null)
|
if (Target == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ namespace Content.Server.DoAfter
|
|||||||
doAfter.EventArgs.BreakOnUserMove,
|
doAfter.EventArgs.BreakOnUserMove,
|
||||||
doAfter.EventArgs.BreakOnTargetMove,
|
doAfter.EventArgs.BreakOnTargetMove,
|
||||||
doAfter.EventArgs.MovementThreshold,
|
doAfter.EventArgs.MovementThreshold,
|
||||||
|
doAfter.EventArgs.DamageThreshold,
|
||||||
doAfter.EventArgs.Target);
|
doAfter.EventArgs.Target);
|
||||||
|
|
||||||
toAdd.Add(clientDoAfter);
|
toAdd.Add(clientDoAfter);
|
||||||
@@ -98,14 +99,22 @@ namespace Content.Server.DoAfter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Cancels DoAfter if it breaks on damage and it meets the threshold
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="_">
|
||||||
|
/// The EntityUID of the user
|
||||||
|
/// </param>
|
||||||
|
/// <param name="component"></param>
|
||||||
|
/// <param name="args"></param>
|
||||||
public void OnDamage(EntityUid _, DoAfterComponent component, DamageChangedEvent args)
|
public void OnDamage(EntityUid _, DoAfterComponent component, DamageChangedEvent args)
|
||||||
{
|
{
|
||||||
if (!args.InterruptsDoAfters || !args.DamageIncreased)
|
if (!args.InterruptsDoAfters || !args.DamageIncreased || args.DamageDelta == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (var (doAfter, _) in component.DoAfters)
|
foreach (var (doAfter, _) in component.DoAfters)
|
||||||
{
|
{
|
||||||
if (doAfter.EventArgs.BreakOnDamage)
|
if (doAfter.EventArgs.BreakOnDamage && args.DamageDelta?.Total.Float() > doAfter.EventArgs.DamageThreshold)
|
||||||
{
|
{
|
||||||
doAfter.Cancel();
|
doAfter.Cancel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Content.Shared.FixedPoint;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Serialization;
|
using Robust.Shared.Serialization;
|
||||||
@@ -59,8 +60,10 @@ namespace Content.Shared.DoAfter
|
|||||||
|
|
||||||
public float MovementThreshold { get; }
|
public float MovementThreshold { get; }
|
||||||
|
|
||||||
|
public FixedPoint2 DamageThreshold { get; }
|
||||||
|
|
||||||
public ClientDoAfter(byte id, EntityCoordinates userGrid, EntityCoordinates targetGrid, TimeSpan startTime,
|
public ClientDoAfter(byte id, EntityCoordinates userGrid, EntityCoordinates targetGrid, TimeSpan startTime,
|
||||||
float delay, bool breakOnUserMove, bool breakOnTargetMove, float movementThreshold, EntityUid? target = null)
|
float delay, bool breakOnUserMove, bool breakOnTargetMove, float movementThreshold, FixedPoint2 damageThreshold, EntityUid? target = null)
|
||||||
{
|
{
|
||||||
ID = id;
|
ID = id;
|
||||||
UserGrid = userGrid;
|
UserGrid = userGrid;
|
||||||
@@ -70,6 +73,7 @@ namespace Content.Shared.DoAfter
|
|||||||
BreakOnUserMove = breakOnUserMove;
|
BreakOnUserMove = breakOnUserMove;
|
||||||
BreakOnTargetMove = breakOnTargetMove;
|
BreakOnTargetMove = breakOnTargetMove;
|
||||||
MovementThreshold = movementThreshold;
|
MovementThreshold = movementThreshold;
|
||||||
|
DamageThreshold = damageThreshold;
|
||||||
Target = target;
|
Target = target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user