SharedItemCounterSystem.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Content.Shared.Stacks;
  2. using Content.Shared.Storage.Components;
  3. using JetBrains.Annotations;
  4. using Robust.Shared.Containers;
  5. namespace Content.Shared.Storage.EntitySystems
  6. {
  7. [UsedImplicitly]
  8. public abstract class SharedItemCounterSystem : EntitySystem
  9. {
  10. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  11. /// <inheritdoc />
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<ItemCounterComponent, EntInsertedIntoContainerMessage>(CounterEntityInserted);
  16. SubscribeLocalEvent<ItemCounterComponent, EntRemovedFromContainerMessage>(CounterEntityRemoved);
  17. }
  18. private void CounterEntityInserted(EntityUid uid, ItemCounterComponent itemCounter,
  19. EntInsertedIntoContainerMessage args)
  20. {
  21. if (!EntityManager.TryGetComponent(uid, out AppearanceComponent? appearanceComponent))
  22. return;
  23. var count = GetCount(args, itemCounter);
  24. if (count == null)
  25. return;
  26. _appearance.SetData(uid, StackVisuals.Actual, count, appearanceComponent);
  27. if (itemCounter.MaxAmount != null)
  28. _appearance.SetData(uid, StackVisuals.MaxCount, itemCounter.MaxAmount, appearanceComponent);
  29. }
  30. private void CounterEntityRemoved(EntityUid uid, ItemCounterComponent itemCounter,
  31. EntRemovedFromContainerMessage args)
  32. {
  33. if (!EntityManager.TryGetComponent(uid, out AppearanceComponent? appearanceComponent))
  34. return;
  35. var count = GetCount(args, itemCounter);
  36. if (count == null)
  37. return;
  38. _appearance.SetData(uid, StackVisuals.Actual, count, appearanceComponent);
  39. if (itemCounter.MaxAmount != null)
  40. _appearance.SetData(uid, StackVisuals.MaxCount, itemCounter.MaxAmount, appearanceComponent);
  41. }
  42. protected abstract int? GetCount(ContainerModifiedMessage msg, ItemCounterComponent itemCounter);
  43. }
  44. }