ChemicalPayloadSystem.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Content.Shared.Containers.ItemSlots;
  2. using Content.Shared.Payload.Components;
  3. using Robust.Shared.Containers;
  4. namespace Content.Shared.Payload.EntitySystems;
  5. public sealed class ChemicalPayloadSystem : EntitySystem
  6. {
  7. [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!;
  8. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  9. public override void Initialize()
  10. {
  11. base.Initialize();
  12. SubscribeLocalEvent<ChemicalPayloadComponent, ComponentInit>(OnComponentInit);
  13. SubscribeLocalEvent<ChemicalPayloadComponent, ComponentRemove>(OnComponentRemove);
  14. SubscribeLocalEvent<ChemicalPayloadComponent, EntInsertedIntoContainerMessage>(OnContainerModified);
  15. SubscribeLocalEvent<ChemicalPayloadComponent, EntRemovedFromContainerMessage>(OnContainerModified);
  16. }
  17. private void OnContainerModified(EntityUid uid, ChemicalPayloadComponent component, ContainerModifiedMessage args)
  18. {
  19. UpdateAppearance(uid, component);
  20. }
  21. private void UpdateAppearance(EntityUid uid, ChemicalPayloadComponent? component = null, AppearanceComponent? appearance = null)
  22. {
  23. if (!Resolve(uid, ref component, ref appearance, false))
  24. return;
  25. var filled = ChemicalPayloadFilledSlots.None;
  26. if (component.BeakerSlotA.HasItem)
  27. filled |= ChemicalPayloadFilledSlots.Left;
  28. if (component.BeakerSlotB.HasItem)
  29. filled |= ChemicalPayloadFilledSlots.Right;
  30. _appearance.SetData(uid, ChemicalPayloadVisuals.Slots, filled, appearance);
  31. }
  32. private void OnComponentInit(EntityUid uid, ChemicalPayloadComponent payload, ComponentInit args)
  33. {
  34. _itemSlotsSystem.AddItemSlot(uid, "BeakerSlotA", payload.BeakerSlotA);
  35. _itemSlotsSystem.AddItemSlot(uid, "BeakerSlotB", payload.BeakerSlotB);
  36. }
  37. private void OnComponentRemove(EntityUid uid, ChemicalPayloadComponent payload, ComponentRemove args)
  38. {
  39. _itemSlotsSystem.RemoveItemSlot(uid, payload.BeakerSlotA);
  40. _itemSlotsSystem.RemoveItemSlot(uid, payload.BeakerSlotB);
  41. }
  42. }