+++ /dev/null
-using Content.Shared.SmartFridge;
-using Robust.Shared.Analyzers;
-
-namespace Content.Client.SmartFridge;
-
-public sealed class SmartFridgeUISystem : EntitySystem
-{
- [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!;
-
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent<SmartFridgeComponent, AfterAutoHandleStateEvent>(OnSmartFridgeAfterState);
- }
-
- private void OnSmartFridgeAfterState(Entity<SmartFridgeComponent> ent, ref AfterAutoHandleStateEvent args)
- {
- if (!_uiSystem.TryGetOpenUi<SmartFridgeBoundUserInterface>(ent.Owner, SmartFridgeUiKey.Key, out var bui))
- return;
-
- bui.Refresh();
- }
-}
namespace Content.Shared.SmartFridge;
-public sealed class SmartFridgeSystem : EntitySystem
+public abstract class SharedSmartFridgeSystem : EntitySystem
{
[Dependency] private readonly AccessReaderSystem _accessReader = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
base.Initialize();
SubscribeLocalEvent<SmartFridgeComponent, InteractUsingEvent>(OnInteractUsing, after: [typeof(AnchorableSystem)]);
+ SubscribeLocalEvent<SmartFridgeComponent, EntInsertedIntoContainerMessage>(OnItemInserted);
SubscribeLocalEvent<SmartFridgeComponent, EntRemovedFromContainerMessage>(OnItemRemoved);
+ SubscribeLocalEvent<SmartFridgeComponent, AfterAutoHandleStateEvent>((ent, ref _) => UpdateUI(ent));
SubscribeLocalEvent<SmartFridgeComponent, GetVerbsEvent<AlternativeVerb>>(OnGetAltVerb);
SubscribeLocalEvent<SmartFridgeComponent, GetDumpableVerbEvent>(OnGetDumpableVerb);
anyInserted = true;
_container.Insert(used, container);
- var key = new SmartFridgeEntry(Identity.Name(used, EntityManager));
- if (!ent.Comp.Entries.Contains(key))
- ent.Comp.Entries.Add(key);
-
- ent.Comp.ContainedEntries.TryAdd(key, new());
- var entries = ent.Comp.ContainedEntries[key];
- if (!entries.Contains(GetNetEntity(used)))
- entries.Add(GetNetEntity(used));
-
- Dirty(ent);
}
if (anyInserted && playSound)
args.Handled = DoInsert(ent, args.User, [args.Used], true);
}
+ private void OnItemInserted(Entity<SmartFridgeComponent> ent, ref EntInsertedIntoContainerMessage args)
+ {
+ if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState)
+ return;
+
+ var key = new SmartFridgeEntry(Identity.Name(args.Entity, EntityManager));
+ if (!ent.Comp.Entries.Contains(key))
+ ent.Comp.Entries.Add(key);
+
+ ent.Comp.ContainedEntries.TryAdd(key, new());
+ var entries = ent.Comp.ContainedEntries[key];
+ if (!entries.Contains(GetNetEntity(args.Entity)))
+ entries.Add(GetNetEntity(args.Entity));
+
+ Dirty(ent);
+ UpdateUI(ent);
+ }
+
private void OnItemRemoved(Entity<SmartFridgeComponent> ent, ref EntRemovedFromContainerMessage args)
{
var key = new SmartFridgeEntry(Identity.Name(args.Entity, EntityManager));
}
Dirty(ent);
+ UpdateUI(ent);
}
private bool Allowed(Entity<SmartFridgeComponent> machine, EntityUid user)
_audio.PlayPredicted(ent.Comp.SoundVend, ent, args.Actor);
contained.Remove(item);
Dirty(ent);
+ UpdateUI(ent);
return;
}
DoInsert(ent, args.User, args.DumpQueue, false);
}
+
+ protected virtual void UpdateUI(Entity<SmartFridgeComponent> ent)
+ {
+
+ }
}
namespace Content.Shared.SmartFridge;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
-[Access(typeof(SmartFridgeSystem))]
+[Access(typeof(SharedSmartFridgeSystem))]
public sealed partial class SmartFridgeComponent : Component
{
/// <summary>
/// A mapping of smart fridge entries to the actual contained contents
/// </summary>
[DataField, AutoNetworkedField]
- [Access(typeof(SmartFridgeSystem), Other = AccessPermissions.ReadExecute)]
+ [Access(typeof(SharedSmartFridgeSystem), Other = AccessPermissions.ReadExecute)]
public Dictionary<SmartFridgeEntry, HashSet<NetEntity>> ContainedEntries = new();
/// <summary>