EmitterSystem.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Content.Shared.Singularity.Components;
  2. using Content.Shared.Singularity.EntitySystems;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Singularity.Systems;
  5. public sealed class EmitterSystem : SharedEmitterSystem
  6. {
  7. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  8. /// <inheritdoc/>
  9. public override void Initialize()
  10. {
  11. SubscribeLocalEvent<EmitterComponent, AppearanceChangeEvent>(OnAppearanceChange);
  12. }
  13. private void OnAppearanceChange(EntityUid uid, EmitterComponent component, ref AppearanceChangeEvent args)
  14. {
  15. if (args.Sprite == null)
  16. return;
  17. if (!_appearance.TryGetData<EmitterVisualState>(uid, EmitterVisuals.VisualState, out var state, args.Component))
  18. state = EmitterVisualState.Off;
  19. if (!args.Sprite.LayerMapTryGet(EmitterVisualLayers.Lights, out var layer))
  20. return;
  21. switch (state)
  22. {
  23. case EmitterVisualState.On:
  24. if (component.OnState == null)
  25. break;
  26. args.Sprite.LayerSetVisible(layer, true);
  27. args.Sprite.LayerSetState(layer, component.OnState);
  28. break;
  29. case EmitterVisualState.Underpowered:
  30. if (component.UnderpoweredState == null)
  31. break;
  32. args.Sprite.LayerSetVisible(layer, true);
  33. args.Sprite.LayerSetState(layer, component.UnderpoweredState);
  34. break;
  35. case EmitterVisualState.Off:
  36. args.Sprite.LayerSetVisible(layer, false);
  37. break;
  38. default:
  39. throw new ArgumentOutOfRangeException();
  40. }
  41. }
  42. }