GunSystem.MagazineVisuals.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Content.Client.Weapons.Ranged.Components;
  2. using Content.Shared.Rounding;
  3. using Content.Shared.Weapons.Ranged.Systems;
  4. using Robust.Client.GameObjects;
  5. namespace Content.Client.Weapons.Ranged.Systems;
  6. public sealed partial class GunSystem
  7. {
  8. private void InitializeMagazineVisuals()
  9. {
  10. SubscribeLocalEvent<MagazineVisualsComponent, ComponentInit>(OnMagazineVisualsInit);
  11. SubscribeLocalEvent<MagazineVisualsComponent, AppearanceChangeEvent>(OnMagazineVisualsChange);
  12. }
  13. private void OnMagazineVisualsInit(EntityUid uid, MagazineVisualsComponent component, ComponentInit args)
  14. {
  15. if (!TryComp<SpriteComponent>(uid, out var sprite)) return;
  16. if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
  17. {
  18. sprite.LayerSetState(GunVisualLayers.Mag, $"{component.MagState}-{component.MagSteps - 1}");
  19. sprite.LayerSetVisible(GunVisualLayers.Mag, false);
  20. }
  21. if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
  22. {
  23. sprite.LayerSetState(GunVisualLayers.MagUnshaded, $"{component.MagState}-unshaded-{component.MagSteps - 1}");
  24. sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
  25. }
  26. }
  27. private void OnMagazineVisualsChange(EntityUid uid, MagazineVisualsComponent component, ref AppearanceChangeEvent args)
  28. {
  29. // tl;dr
  30. // 1.If no mag then hide it OR
  31. // 2. If step 0 isn't visible then hide it (mag or unshaded)
  32. // 3. Otherwise just do mag / unshaded as is
  33. var sprite = args.Sprite;
  34. if (sprite == null) return;
  35. if (!args.AppearanceData.TryGetValue(AmmoVisuals.MagLoaded, out var magloaded) ||
  36. magloaded is true)
  37. {
  38. if (!args.AppearanceData.TryGetValue(AmmoVisuals.AmmoMax, out var capacity))
  39. {
  40. capacity = component.MagSteps;
  41. }
  42. if (!args.AppearanceData.TryGetValue(AmmoVisuals.AmmoCount, out var current))
  43. {
  44. current = component.MagSteps;
  45. }
  46. var step = ContentHelpers.RoundToLevels((int) current, (int) capacity, component.MagSteps);
  47. if (step == 0 && !component.ZeroVisible)
  48. {
  49. if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
  50. {
  51. sprite.LayerSetVisible(GunVisualLayers.Mag, false);
  52. }
  53. if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
  54. {
  55. sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
  56. }
  57. return;
  58. }
  59. if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
  60. {
  61. sprite.LayerSetVisible(GunVisualLayers.Mag, true);
  62. sprite.LayerSetState(GunVisualLayers.Mag, $"{component.MagState}-{step}");
  63. }
  64. if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
  65. {
  66. sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, true);
  67. sprite.LayerSetState(GunVisualLayers.MagUnshaded, $"{component.MagState}-unshaded-{step}");
  68. }
  69. }
  70. else
  71. {
  72. if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
  73. {
  74. sprite.LayerSetVisible(GunVisualLayers.Mag, false);
  75. }
  76. if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
  77. {
  78. sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
  79. }
  80. }
  81. }
  82. }