Files
tbd-station-14/Content.Shared/DoAfter/DoAfterArgsComponent.cs
keronshb f885075d2e DoAfter support for Actions (#38253)
* Adds Action DoAfter Events

* Adds DoAfterArgs fields to DoAfterComp

* Adds a base doafter action

* Adds Attempt action doafter logic

* Adds doafter logic to actions

* Changes Action Attempt Doafter and action doafter to take in Performer and the original use delay. Use delay now triggers when a repeated action  is cancelled.

* Readds the TryPerformAction method and readds request perform action into the action doafter events

* Adds a force skip to DoAfter Cancel so we can skip the complete check

* Adds a Delay Reduction field to the comp and to the comp state

* Fixes doafter mispredict, changes doafter comp check to a guard clause, sets delay reduction if it exists.

* Cancels ActionDoAfter if charges is 0

* Serializes Attempt Frequency

* Comment for rework

* Changes todo into a comment

* Moves doafterargs to doafterargscomp

* Adds DoAfterArgs comp to BaseDoAfterAction

* Removes unused trycomp with actionDoAfter

* Replaces DoAfterRepateUseDelay const with timespan.zero

* Removes unused usings

* Makes SharedActionsSystem partial, adds DoAfter partial class to ActionSystem, moves ActionDoAfter logic to the SharedActionsSystem.DoAfter class

* Cleanup and prediction

* Renames OnActionDoAfterAttempt to OnActionDoAfter, moves both to Shared Action DoAfter

* Removes ActionAttemptDoAfterEvent and moves its summaries to ActionDoAfterEvent. Converts OnActionDoAfterAttempt into TryStartActionDoAfter

* Removes Extra check for charges and actiondoafters

* Sloptimization

* Cleanup

* Cleanup

* Adds param descs

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2025-09-08 12:55:13 +03:00

117 lines
2.8 KiB
C#

using Content.Shared.FixedPoint;
using Robust.Shared.GameStates;
namespace Content.Shared.DoAfter;
/// <summary>
/// For setting DoAfterArgs on an entity level
/// Would require some setup, will require a rework eventually
/// </summary>
[RegisterComponent, NetworkedComponent]
[Access(typeof(SharedDoAfterSystem))]
public sealed partial class DoAfterArgsComponent : Component
{
#region DoAfterArgsSettings
/// <summary>
/// <inheritdoc cref="DoAfterArgs.AttemptFrequency"/>
/// </summary>
[DataField]
public AttemptFrequency AttemptFrequency;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.Broadcast"/>
/// </summary>
[DataField]
public bool Broadcast;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.Delay"/>
/// </summary>
[DataField]
public TimeSpan Delay = TimeSpan.FromSeconds(2);
/// <summary>
/// <inheritdoc cref="DoAfterArgs.Hidden"/>
/// </summary>
[DataField]
public bool Hidden;
/// <summary>
/// Should this DoAfter repeat after being completed?
/// </summary>
[DataField]
public bool Repeat;
#region Break/Cancellation Options
/// <summary>
/// <inheritdoc cref="DoAfterArgs.NeedHand"/>
/// </summary>
[DataField]
public bool NeedHand;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.BreakOnHandChange"/>
/// </summary>
[DataField]
public bool BreakOnHandChange = true;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.BreakOnDropItem"/>
/// </summary>
[DataField]
public bool BreakOnDropItem = true;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.BreakOnMove"/>
/// </summary>
[DataField]
public bool BreakOnMove;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.BreakOnWeightlessMove"/>
/// </summary>
[DataField]
public bool BreakOnWeightlessMove = true;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.MovementThreshold"/>
/// </summary>
[DataField]
public float MovementThreshold = 0.3f;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.DistanceThreshold"/>
/// </summary>
[DataField]
public float? DistanceThreshold;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.BreakOnDamage"/>
/// </summary>
[DataField]
public bool BreakOnDamage;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.DamageThreshold"/>
/// </summary>
[DataField]
public FixedPoint2 DamageThreshold = 1;
/// <summary>
/// <inheritdoc cref="DoAfterArgs.RequireCanInteract"/>
/// </summary>
[DataField]
public bool RequireCanInteract = true;
// End Break/Cancellation Options
#endregion
/// <summary>
/// What should the delay be reduced to after completion?
/// </summary>
[DataField]
public TimeSpan? DelayReduction;
// End DoAfterArgsSettings
#endregion
}