SharedMultiHandedItemSystem.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Content.Shared.Hands;
  2. using Content.Shared.Hands.Components;
  3. using Content.Shared.Hands.EntitySystems;
  4. using Content.Shared.Popups;
  5. using Robust.Shared.Timing;
  6. namespace Content.Shared.Item;
  7. public abstract class SharedMultiHandedItemSystem : EntitySystem
  8. {
  9. [Dependency] private readonly IGameTiming _timing = default!;
  10. [Dependency] private readonly SharedHandsSystem _hands = default!;
  11. [Dependency] private readonly SharedPopupSystem _popup = default!;
  12. /// <inheritdoc/>
  13. public override void Initialize()
  14. {
  15. SubscribeLocalEvent<MultiHandedItemComponent, GettingPickedUpAttemptEvent>(OnAttemptPickup);
  16. SubscribeLocalEvent<MultiHandedItemComponent, VirtualItemDeletedEvent>(OnVirtualItemDeleted);
  17. SubscribeLocalEvent<MultiHandedItemComponent, GotEquippedHandEvent>(OnEquipped);
  18. SubscribeLocalEvent<MultiHandedItemComponent, GotUnequippedHandEvent>(OnUnequipped);
  19. }
  20. protected abstract void OnEquipped(EntityUid uid, MultiHandedItemComponent component, GotEquippedHandEvent args);
  21. protected abstract void OnUnequipped(EntityUid uid, MultiHandedItemComponent component, GotUnequippedHandEvent args);
  22. private void OnAttemptPickup(EntityUid uid, MultiHandedItemComponent component, GettingPickedUpAttemptEvent args)
  23. {
  24. if (TryComp<HandsComponent>(args.User, out var hands) && hands.CountFreeHands() >= component.HandsNeeded)
  25. return;
  26. args.Cancel();
  27. if (_timing.IsFirstTimePredicted)
  28. {
  29. _popup.PopupCursor(Loc.GetString("multi-handed-item-pick-up-fail",
  30. ("number", component.HandsNeeded - 1), ("item", uid)), args.User);
  31. }
  32. }
  33. private void OnVirtualItemDeleted(EntityUid uid, MultiHandedItemComponent component, VirtualItemDeletedEvent args)
  34. {
  35. if (args.BlockingEntity != uid)
  36. return;
  37. _hands.TryDrop(args.User, uid);
  38. }
  39. }