1
0

TargetingUIController.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // SPDX-FileCopyrightText: 2024 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
  2. // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
  3. //
  4. // SPDX-License-Identifier: AGPL-3.0-or-later
  5. using Content.Client.Gameplay;
  6. using Content.Client._Shitmed.UserInterface.Systems.Targeting.Widgets;
  7. using Content.Shared._Shitmed.Targeting;
  8. using Content.Client._Shitmed.Targeting;
  9. using Content.Shared._Shitmed.Targeting.Events;
  10. using Robust.Client.UserInterface.Controllers;
  11. using Robust.Client.Player;
  12. namespace Content.Client._Shitmed.UserInterface.Systems.Targeting;
  13. public sealed class TargetingUIController : UIController, IOnStateEntered<GameplayState>, IOnSystemChanged<TargetingSystem>
  14. {
  15. [Dependency] private readonly IEntityManager _entManager = default!;
  16. [Dependency] private readonly IEntityNetworkManager _net = default!;
  17. [Dependency] private readonly IPlayerManager _playerManager = default!;
  18. private TargetingComponent? _targetingComponent;
  19. private TargetingControl? TargetingControl => UIManager.GetActiveUIWidgetOrNull<TargetingControl>();
  20. public void OnSystemLoaded(TargetingSystem system)
  21. {
  22. system.TargetingStartup += AddTargetingControl;
  23. system.TargetingShutdown += RemoveTargetingControl;
  24. system.TargetChange += CycleTarget;
  25. }
  26. public void OnSystemUnloaded(TargetingSystem system)
  27. {
  28. system.TargetingStartup -= AddTargetingControl;
  29. system.TargetingShutdown -= RemoveTargetingControl;
  30. system.TargetChange -= CycleTarget;
  31. }
  32. public void OnStateEntered(GameplayState state)
  33. {
  34. if (TargetingControl == null)
  35. return;
  36. TargetingControl.SetTargetDollVisible(_targetingComponent != null);
  37. if (_targetingComponent != null)
  38. TargetingControl.SetBodyPartsVisible(_targetingComponent.Target);
  39. }
  40. public void AddTargetingControl(TargetingComponent component)
  41. {
  42. _targetingComponent = component;
  43. if (TargetingControl != null)
  44. {
  45. TargetingControl.SetTargetDollVisible(_targetingComponent != null);
  46. if (_targetingComponent != null)
  47. TargetingControl.SetBodyPartsVisible(_targetingComponent.Target);
  48. }
  49. }
  50. public void RemoveTargetingControl()
  51. {
  52. if (TargetingControl != null)
  53. TargetingControl.SetTargetDollVisible(false);
  54. _targetingComponent = null;
  55. }
  56. public void CycleTarget(TargetBodyPart bodyPart)
  57. {
  58. if (_playerManager.LocalEntity is not { } user
  59. || _entManager.GetComponent<TargetingComponent>(user) is not { } targetingComponent
  60. || TargetingControl == null)
  61. return;
  62. var player = _entManager.GetNetEntity(user);
  63. if (bodyPart != targetingComponent.Target)
  64. {
  65. var msg = new TargetChangeEvent(player, bodyPart);
  66. _net.SendSystemNetworkMessage(msg);
  67. TargetingControl?.SetBodyPartsVisible(bodyPart);
  68. }
  69. }
  70. }