| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- using Content.Client.Weapons.Ranged.Components;
- using Content.Shared.Rounding;
- using Content.Shared.Weapons.Ranged.Systems;
- using Robust.Client.GameObjects;
- namespace Content.Client.Weapons.Ranged.Systems;
- public sealed partial class GunSystem
- {
- private void InitializeMagazineVisuals()
- {
- SubscribeLocalEvent<MagazineVisualsComponent, ComponentInit>(OnMagazineVisualsInit);
- SubscribeLocalEvent<MagazineVisualsComponent, AppearanceChangeEvent>(OnMagazineVisualsChange);
- }
- private void OnMagazineVisualsInit(EntityUid uid, MagazineVisualsComponent component, ComponentInit args)
- {
- if (!TryComp<SpriteComponent>(uid, out var sprite)) return;
- if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
- {
- sprite.LayerSetState(GunVisualLayers.Mag, $"{component.MagState}-{component.MagSteps - 1}");
- sprite.LayerSetVisible(GunVisualLayers.Mag, false);
- }
- if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
- {
- sprite.LayerSetState(GunVisualLayers.MagUnshaded, $"{component.MagState}-unshaded-{component.MagSteps - 1}");
- sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
- }
- }
- private void OnMagazineVisualsChange(EntityUid uid, MagazineVisualsComponent component, ref AppearanceChangeEvent args)
- {
- // tl;dr
- // 1.If no mag then hide it OR
- // 2. If step 0 isn't visible then hide it (mag or unshaded)
- // 3. Otherwise just do mag / unshaded as is
- var sprite = args.Sprite;
- if (sprite == null) return;
- if (!args.AppearanceData.TryGetValue(AmmoVisuals.MagLoaded, out var magloaded) ||
- magloaded is true)
- {
- if (!args.AppearanceData.TryGetValue(AmmoVisuals.AmmoMax, out var capacity))
- {
- capacity = component.MagSteps;
- }
- if (!args.AppearanceData.TryGetValue(AmmoVisuals.AmmoCount, out var current))
- {
- current = component.MagSteps;
- }
- var step = ContentHelpers.RoundToLevels((int) current, (int) capacity, component.MagSteps);
- if (step == 0 && !component.ZeroVisible)
- {
- if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
- {
- sprite.LayerSetVisible(GunVisualLayers.Mag, false);
- }
- if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
- {
- sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
- }
- return;
- }
- if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
- {
- sprite.LayerSetVisible(GunVisualLayers.Mag, true);
- sprite.LayerSetState(GunVisualLayers.Mag, $"{component.MagState}-{step}");
- }
- if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
- {
- sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, true);
- sprite.LayerSetState(GunVisualLayers.MagUnshaded, $"{component.MagState}-unshaded-{step}");
- }
- }
- else
- {
- if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
- {
- sprite.LayerSetVisible(GunVisualLayers.Mag, false);
- }
- if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
- {
- sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
- }
- }
- }
- }
|