RandomArtifactSpriteSystem.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Content.Shared.Xenoarchaeology.XenoArtifacts;
  2. using Robust.Client.GameObjects;
  3. namespace Content.Client.Xenoarchaeology.XenoArtifacts;
  4. public sealed class RandomArtifactSpriteSystem : VisualizerSystem<RandomArtifactSpriteComponent>
  5. {
  6. protected override void OnAppearanceChange(EntityUid uid, RandomArtifactSpriteComponent component, ref AppearanceChangeEvent args)
  7. {
  8. if (args.Sprite == null)
  9. return;
  10. if (!AppearanceSystem.TryGetData<int>(uid, SharedArtifactsVisuals.SpriteIndex, out var spriteIndex, args.Component))
  11. return;
  12. if (!AppearanceSystem.TryGetData<bool>(uid, SharedArtifactsVisuals.IsActivated, out var isActivated, args.Component))
  13. isActivated = false;
  14. var spriteIndexStr = spriteIndex.ToString("D2");
  15. var spritePrefix = isActivated ? "_on" : "";
  16. // layered artifact sprite
  17. if (args.Sprite.LayerMapTryGet(ArtifactsVisualLayers.Effect, out var layer))
  18. {
  19. var spriteState = "ano" + spriteIndexStr;
  20. args.Sprite.LayerSetState(ArtifactsVisualLayers.Base, spriteState);
  21. args.Sprite.LayerSetState(layer, spriteState + "_on");
  22. args.Sprite.LayerSetVisible(layer, isActivated);
  23. }
  24. // non-layered
  25. else
  26. {
  27. var spriteState = "ano" + spriteIndexStr + spritePrefix;
  28. args.Sprite.LayerSetState(ArtifactsVisualLayers.Base, spriteState);
  29. }
  30. }
  31. }
  32. public enum ArtifactsVisualLayers : byte
  33. {
  34. Base,
  35. Effect // doesn't have to use this
  36. }