1
0

ClientFoodSequenceSystem.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Content.Shared.Nutrition.Components;
  2. using Content.Shared.Nutrition.EntitySystems;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Nutrition.EntitySystems;
  5. public sealed class ClientFoodSequenceSystem : SharedFoodSequenceSystem
  6. {
  7. public override void Initialize()
  8. {
  9. SubscribeLocalEvent<FoodSequenceStartPointComponent, AfterAutoHandleStateEvent>(OnHandleState);
  10. }
  11. private void OnHandleState(Entity<FoodSequenceStartPointComponent> start, ref AfterAutoHandleStateEvent args)
  12. {
  13. if (!TryComp<SpriteComponent>(start, out var sprite))
  14. return;
  15. UpdateFoodVisuals(start, sprite);
  16. }
  17. private void UpdateFoodVisuals(Entity<FoodSequenceStartPointComponent> start, SpriteComponent? sprite = null)
  18. {
  19. if (!Resolve(start, ref sprite, false))
  20. return;
  21. //Remove old layers
  22. foreach (var key in start.Comp.RevealedLayers)
  23. {
  24. sprite.RemoveLayer(key);
  25. }
  26. start.Comp.RevealedLayers.Clear();
  27. //Add new layers
  28. var counter = 0;
  29. foreach (var state in start.Comp.FoodLayers)
  30. {
  31. if (state.Sprite is null)
  32. continue;
  33. var keyCode = $"food-layer-{counter}";
  34. start.Comp.RevealedLayers.Add(keyCode);
  35. sprite.LayerMapTryGet(start.Comp.TargetLayerMap, out var index);
  36. if (start.Comp.InverseLayers)
  37. index++;
  38. sprite.AddBlankLayer(index);
  39. sprite.LayerMapSet(keyCode, index);
  40. sprite.LayerSetSprite(index, state.Sprite);
  41. sprite.LayerSetScale(index, state.Scale);
  42. //Offset the layer
  43. var layerPos = start.Comp.StartPosition;
  44. layerPos += (start.Comp.Offset * counter) + state.LocalOffset;
  45. sprite.LayerSetOffset(index, layerPos);
  46. counter++;
  47. }
  48. }
  49. }