using System.Linq; using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Fluids; /// /// Mopping logic for interacting with puddle components. /// public abstract class SharedAbsorbentSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnAbsorbentGetState); SubscribeLocalEvent(OnAbsorbentHandleState); } private void OnAbsorbentHandleState(EntityUid uid, AbsorbentComponent component, ref ComponentHandleState args) { if (args.Current is not AbsorbentComponentState state) return; if (component.Progress.OrderBy(x => x.Key.ToArgb()).SequenceEqual(state.Progress)) return; component.Progress.Clear(); foreach (var item in state.Progress) { component.Progress.Add(item.Key, item.Value); } } private void OnAbsorbentGetState(EntityUid uid, AbsorbentComponent component, ref ComponentGetState args) { args.State = new AbsorbentComponentState(component.Progress); } [Serializable, NetSerializable] protected sealed class AbsorbentComponentState : ComponentState { public Dictionary Progress; public AbsorbentComponentState(Dictionary progress) { Progress = progress; } } }