#nullable enable using System.Collections.Generic; using Content.Server.GameObjects.Components.Destructible.Thresholds.Behavior; using Content.Server.GameObjects.EntitySystems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Destructible.Thresholds { public class Threshold : IExposeData { private List _behaviors = new(); /// /// Whether or not this threshold has already been triggered. /// [ViewVariables] public bool Triggered { get; private set; } /// /// Whether or not this threshold only triggers once. /// If false, it will trigger again once the entity is healed /// and then damaged to reach this threshold once again. /// It will not repeatedly trigger as damage rises beyond that. /// [ViewVariables] public bool TriggersOnce { get; set; } /// /// Behaviors to activate once this threshold is triggered. /// [ViewVariables] public IReadOnlyList Behaviors => _behaviors; public void ExposeData(ObjectSerializer serializer) { serializer.DataField(this, x => x.Triggered, "triggered", false); serializer.DataField(this, x => x.TriggersOnce, "triggersOnce", false); serializer.DataField(ref _behaviors, "behaviors", new List()); } /// /// Triggers this threshold. /// /// The entity that owns this threshold. /// /// An instance of to get dependency and /// system references from, if relevant. /// public void Trigger(IEntity owner, DestructibleSystem system) { Triggered = true; foreach (var behavior in Behaviors) { // The owner has been deleted. We stop execution of behaviors here. if (owner.Deleted) return; behavior.Trigger(owner, system); } } } }