ClientInnerBodySystem.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Content.Shared.Anomaly.Components;
  2. using Content.Shared.Anomaly.Effects;
  3. using Content.Shared.Body.Components;
  4. using Robust.Client.GameObjects;
  5. namespace Content.Client.Anomaly.Effects;
  6. public sealed class ClientInnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
  7. {
  8. public override void Initialize()
  9. {
  10. SubscribeLocalEvent<InnerBodyAnomalyComponent, AfterAutoHandleStateEvent>(OnAfterHandleState);
  11. SubscribeLocalEvent<InnerBodyAnomalyComponent, ComponentShutdown>(OnCompShutdown);
  12. }
  13. private void OnAfterHandleState(Entity<InnerBodyAnomalyComponent> ent, ref AfterAutoHandleStateEvent args)
  14. {
  15. if (!TryComp<SpriteComponent>(ent, out var sprite))
  16. return;
  17. if (ent.Comp.FallbackSprite is null)
  18. return;
  19. if (!sprite.LayerMapTryGet(ent.Comp.LayerMap, out var index))
  20. index = sprite.LayerMapReserveBlank(ent.Comp.LayerMap);
  21. if (TryComp<BodyComponent>(ent, out var body) &&
  22. body.Prototype is not null &&
  23. ent.Comp.SpeciesSprites.TryGetValue(body.Prototype.Value, out var speciesSprite))
  24. {
  25. sprite.LayerSetSprite(index, speciesSprite);
  26. }
  27. else
  28. {
  29. sprite.LayerSetSprite(index, ent.Comp.FallbackSprite);
  30. }
  31. sprite.LayerSetVisible(index, true);
  32. sprite.LayerSetShader(index, "unshaded");
  33. }
  34. private void OnCompShutdown(Entity<InnerBodyAnomalyComponent> ent, ref ComponentShutdown args)
  35. {
  36. if (!TryComp<SpriteComponent>(ent, out var sprite))
  37. return;
  38. var index = sprite.LayerMapGet(ent.Comp.LayerMap);
  39. sprite.LayerSetVisible(index, false);
  40. }
  41. }