1
0

CombatModeSystem.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Content.Client.Hands.Systems;
  2. using Content.Client.NPC.HTN;
  3. using Content.Shared.CCVar;
  4. using Content.Shared.CombatMode;
  5. using Robust.Client.Graphics;
  6. using Robust.Client.Input;
  7. using Robust.Client.Player;
  8. using Robust.Shared.Configuration;
  9. namespace Content.Client.CombatMode;
  10. public sealed class CombatModeSystem : SharedCombatModeSystem
  11. {
  12. [Dependency] private readonly IOverlayManager _overlayManager = default!;
  13. [Dependency] private readonly IPlayerManager _playerManager = default!;
  14. [Dependency] private readonly IConfigurationManager _cfg = default!;
  15. [Dependency] private readonly IInputManager _inputManager = default!;
  16. [Dependency] private readonly IEyeManager _eye = default!;
  17. /// <summary>
  18. /// Raised whenever combat mode changes.
  19. /// </summary>
  20. public event Action<bool>? LocalPlayerCombatModeUpdated;
  21. public override void Initialize()
  22. {
  23. base.Initialize();
  24. SubscribeLocalEvent<CombatModeComponent, AfterAutoHandleStateEvent>(OnHandleState);
  25. Subs.CVar(_cfg, CCVars.CombatModeIndicatorsPointShow, OnShowCombatIndicatorsChanged, true);
  26. }
  27. private void OnHandleState(EntityUid uid, CombatModeComponent component, ref AfterAutoHandleStateEvent args)
  28. {
  29. UpdateHud(uid);
  30. }
  31. public override void Shutdown()
  32. {
  33. _overlayManager.RemoveOverlay<CombatModeIndicatorsOverlay>();
  34. base.Shutdown();
  35. }
  36. public bool IsInCombatMode()
  37. {
  38. var entity = _playerManager.LocalEntity;
  39. if (entity == null)
  40. return false;
  41. return IsInCombatMode(entity.Value);
  42. }
  43. public override void SetInCombatMode(EntityUid entity, bool value, CombatModeComponent? component = null)
  44. {
  45. base.SetInCombatMode(entity, value, component);
  46. UpdateHud(entity);
  47. }
  48. protected override bool IsNpc(EntityUid uid)
  49. {
  50. return HasComp<HTNComponent>(uid);
  51. }
  52. private void UpdateHud(EntityUid entity)
  53. {
  54. if (entity != _playerManager.LocalEntity || !Timing.IsFirstTimePredicted)
  55. {
  56. return;
  57. }
  58. var inCombatMode = IsInCombatMode();
  59. LocalPlayerCombatModeUpdated?.Invoke(inCombatMode);
  60. }
  61. private void OnShowCombatIndicatorsChanged(bool isShow)
  62. {
  63. if (isShow)
  64. {
  65. _overlayManager.AddOverlay(new CombatModeIndicatorsOverlay(
  66. _inputManager,
  67. EntityManager,
  68. _eye,
  69. this,
  70. EntityManager.System<HandsSystem>()));
  71. }
  72. else
  73. {
  74. _overlayManager.RemoveOverlay<CombatModeIndicatorsOverlay>();
  75. }
  76. }
  77. }