#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
{
///
/// Whether or not this threshold has already been triggered.
///
[ViewVariables] public bool Triggered;
///
/// 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;
///
/// Behaviors to activate once this threshold is triggered.
///
[ViewVariables] public List Behaviors = new();
public void ExposeData(ObjectSerializer serializer)
{
serializer.DataField(ref Triggered, "triggered", false);
serializer.DataField(ref 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)
{
behavior.Trigger(owner, system);
}
}
}
}