mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-18 05:59:03 +03:00
79 lines
2.9 KiB
C#
79 lines
2.9 KiB
C#
using Content.Shared.Alert;
|
|
using Robust.Shared.GameStates;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
|
|
|
namespace Content.Shared.Damage.Components;
|
|
|
|
/// <summary>
|
|
/// Add to an entity to paralyze it whenever it reaches critical amounts of Stamina DamageType.
|
|
/// </summary>
|
|
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), AutoGenerateComponentPause]
|
|
public sealed partial class StaminaComponent : Component
|
|
{
|
|
/// <summary>
|
|
/// Have we reached peak stamina damage and been paralyzed?
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
|
|
public bool Critical;
|
|
|
|
/// <summary>
|
|
/// How much stamina reduces per second.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
|
|
public float Decay = 3f;
|
|
|
|
/// <summary>
|
|
/// How much time after receiving damage until stamina starts decreasing.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
|
|
public float Cooldown = 3f;
|
|
|
|
/// <summary>
|
|
/// How much stamina damage this entity has taken.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
|
|
public float StaminaDamage;
|
|
|
|
/// <summary>
|
|
/// How much stamina damage is required to entire stam crit.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
|
|
public float CritThreshold = 100f;
|
|
|
|
/// <summary>
|
|
/// A dictionary of active stamina drains, with the key being the source of the drain,
|
|
/// DrainRate how much it changes per tick, and ModifiesSpeed if it should slow down the user.
|
|
/// </summary>
|
|
[DataField, AutoNetworkedField]
|
|
public Dictionary<EntityUid, (float DrainRate, bool ModifiesSpeed)> ActiveDrains = new();
|
|
|
|
/// <summary>
|
|
/// How long will this mob be stunned for?
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
|
public TimeSpan StunTime = TimeSpan.FromSeconds(6);
|
|
|
|
/// <summary>
|
|
/// To avoid continuously updating our data we track the last time we updated so we can extrapolate our current stamina.
|
|
/// </summary>
|
|
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField]
|
|
[AutoPausedField]
|
|
public TimeSpan NextUpdate = TimeSpan.Zero;
|
|
|
|
/// <summary>
|
|
/// Minimum factor of the crit threshold that the mob must receive in stamina damage in order to start slowing down.
|
|
/// </summary>
|
|
[DataField, AutoNetworkedField]
|
|
public float SlowdownThresholdFactor = 0.5f;
|
|
|
|
/// <summary>
|
|
/// Speed multiplier for entities that are slowed down due to low stamina. Multiplied by how close the mob is to stamcrit.
|
|
/// </summary>
|
|
[DataField, AutoNetworkedField]
|
|
public float SlowdownMultiplier = 0.75f;
|
|
|
|
[DataField]
|
|
public ProtoId<AlertPrototype> StaminaAlert = "Stamina";
|
|
}
|