using System; using System.Linq; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; namespace Content.Shared.GameObjects.EntitySystems { /// /// This interface gives components behavior on whether entities solution (implying SolutionComponent is in place) is changed /// public interface ISolutionChange { /// /// Called when solution is mixed with some other solution, or when some part of the solution is removed /// void SolutionChanged(SolutionChangeEventArgs eventArgs); } public class SolutionChangeEventArgs : EventArgs { public IEntity Owner { get; set; } } [UsedImplicitly] public class ChemistrySystem : EntitySystem { public void HandleSolutionChange(IEntity owner) { var eventArgs = new SolutionChangeEventArgs { Owner = owner, }; var solutionChangeArgs = owner.GetAllComponents().ToList(); foreach (var solutionChangeArg in solutionChangeArgs) { solutionChangeArg.SolutionChanged(eventArgs); } } } }