using System; using System.Linq; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Map; namespace Content.Shared.Acts { /// /// This interface gives components behavior on getting destroyed. /// public interface IDestroyAct { /// /// Called when object is destroyed /// void OnDestroy(DestructionEventArgs eventArgs); } public sealed class DestructionEventArgs : EntityEventArgs { } public sealed class BreakageEventArgs : EntityEventArgs { } public interface IBreakAct { /// /// Called when object is broken /// void OnBreak(BreakageEventArgs eventArgs); } [UsedImplicitly] public sealed class ActSystem : EntitySystem { public void HandleDestruction(EntityUid owner) { var eventArgs = new DestructionEventArgs(); RaiseLocalEvent(owner, eventArgs, false); var destroyActs = EntityManager.GetComponents(owner).ToList(); foreach (var destroyAct in destroyActs) { destroyAct.OnDestroy(eventArgs); } QueueDel(owner); } public void HandleBreakage(EntityUid owner) { var eventArgs = new BreakageEventArgs(); RaiseLocalEvent(owner, eventArgs, false); var breakActs = EntityManager.GetComponents(owner).ToList(); foreach (var breakAct in breakActs) { breakAct.OnBreak(eventArgs); } } } }