1
0

FlatpackSystem.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Content.Shared.Construction;
  2. using Content.Shared.Construction.Components;
  3. using Robust.Client.GameObjects;
  4. using Robust.Shared.Prototypes;
  5. namespace Content.Client.Construction;
  6. /// <inheritdoc/>
  7. public sealed class FlatpackSystem : SharedFlatpackSystem
  8. {
  9. [Dependency] private readonly AppearanceSystem _appearance = default!;
  10. /// <inheritdoc/>
  11. public override void Initialize()
  12. {
  13. base.Initialize();
  14. SubscribeLocalEvent<FlatpackComponent, AppearanceChangeEvent>(OnAppearanceChange);
  15. }
  16. private void OnAppearanceChange(Entity<FlatpackComponent> ent, ref AppearanceChangeEvent args)
  17. {
  18. var (_, comp) = ent;
  19. if (!_appearance.TryGetData<string>(ent, FlatpackVisuals.Machine, out var machineBoardId) || args.Sprite == null)
  20. return;
  21. if (!PrototypeManager.TryIndex<EntityPrototype>(machineBoardId, out var machineBoardPrototype))
  22. return;
  23. if (!machineBoardPrototype.TryGetComponent<SpriteComponent>(out var sprite, EntityManager.ComponentFactory))
  24. return;
  25. Color? color = null;
  26. foreach (var layer in sprite.AllLayers)
  27. {
  28. if (layer.RsiState.Name is not { } spriteState)
  29. continue;
  30. if (!comp.BoardColors.TryGetValue(spriteState, out var c))
  31. continue;
  32. color = c;
  33. break;
  34. }
  35. if (color != null)
  36. args.Sprite.LayerSetColor(FlatpackVisualLayers.Overlay, color.Value);
  37. }
  38. }