using Content.Server.Destructible.Thresholds; using Content.Shared.Acts; using Content.Shared.Damage; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Random; namespace Content.Server.Destructible { [UsedImplicitly] public class DestructibleSystem : EntitySystem { [Dependency] public readonly IRobustRandom Random = default!; [Dependency] public readonly AudioSystem AudioSystem = default!; [Dependency] public readonly ActSystem ActSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(Execute); } /// /// Check if any thresholds were reached. if they were, execute them. /// public void Execute(EntityUid uid, DestructibleComponent component, DamageChangedEvent args) { foreach (var threshold in component.Thresholds) { if (threshold.Reached(args.Damageable, this)) { RaiseLocalEvent(uid, new DamageThresholdReached(component, threshold)); threshold.Execute(component.Owner, this); } } } } // Currently only used for destructible integration tests. Unless other uses are found for this, maybe this should just be removed and the tests redone. /// /// Event raised when a is reached. /// public class DamageThresholdReached : EntityEventArgs { public readonly DestructibleComponent Parent; public readonly DamageThreshold Threshold; public DamageThresholdReached(DestructibleComponent parent, DamageThreshold threshold) { Parent = parent; Threshold = threshold; } } }