#nullable enable
using System;
using System.Threading;
using Robust.Shared.Interfaces.GameObjects;
// ReSharper disable UnassignedReadonlyField
namespace Content.Server.GameObjects.EntitySystems.DoAfter
{
public sealed class DoAfterEventArgs
{
///
/// The entity invoking do_after
///
public IEntity User { get; }
///
/// How long does the do_after require to complete
///
public float Delay { get; }
///
/// Applicable target (if relevant)
///
public IEntity? Target { get; }
///
/// Manually cancel the do_after so it no longer runs
///
public CancellationToken CancelToken { get; }
// Break the chains
///
/// Whether we need to keep our active hand as is (i.e. can't change hand or change item).
/// This also covers requiring the hand to be free (if applicable).
///
public bool NeedHand { get; set; }
///
/// If do_after stops when the user moves
///
public bool BreakOnUserMove { get; set; }
///
/// If do_after stops when the target moves (if there is a target)
///
public bool BreakOnTargetMove { get; set; }
public bool BreakOnDamage { get; set; }
public bool BreakOnStun { get; set; }
///
/// Additional conditions that need to be met. Return false to cancel.
///
public Func? ExtraCheck { get; set; }
public DoAfterEventArgs(
IEntity user,
float delay,
CancellationToken cancelToken = default,
IEntity? target = null)
{
User = user;
Delay = delay;
CancelToken = cancelToken;
Target = target;
if (Target == null)
{
BreakOnTargetMove = false;
}
}
}
}