GravitySystem.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Content.Shared.Gravity;
  2. using Content.Shared.Power;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Gravity;
  5. public sealed partial class GravitySystem : SharedGravitySystem
  6. {
  7. [Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
  8. public override void Initialize()
  9. {
  10. base.Initialize();
  11. SubscribeLocalEvent<SharedGravityGeneratorComponent, AppearanceChangeEvent>(OnAppearanceChange);
  12. InitializeShake();
  13. }
  14. /// <summary>
  15. /// Ensures that the visible state of gravity generators are synced with their sprites.
  16. /// </summary>
  17. private void OnAppearanceChange(EntityUid uid, SharedGravityGeneratorComponent comp, ref AppearanceChangeEvent args)
  18. {
  19. if (args.Sprite == null)
  20. return;
  21. if (_appearanceSystem.TryGetData<PowerChargeStatus>(uid, PowerChargeVisuals.State, out var state, args.Component))
  22. {
  23. if (comp.SpriteMap.TryGetValue(state, out var spriteState))
  24. {
  25. var layer = args.Sprite.LayerMapGet(GravityGeneratorVisualLayers.Base);
  26. args.Sprite.LayerSetState(layer, spriteState);
  27. }
  28. }
  29. if (_appearanceSystem.TryGetData<float>(uid, PowerChargeVisuals.Charge, out var charge, args.Component))
  30. {
  31. var layer = args.Sprite.LayerMapGet(GravityGeneratorVisualLayers.Core);
  32. switch (charge)
  33. {
  34. case < 0.2f:
  35. args.Sprite.LayerSetVisible(layer, false);
  36. break;
  37. case >= 0.2f and < 0.4f:
  38. args.Sprite.LayerSetVisible(layer, true);
  39. args.Sprite.LayerSetState(layer, comp.CoreStartupState);
  40. break;
  41. case >= 0.4f and < 0.6f:
  42. args.Sprite.LayerSetVisible(layer, true);
  43. args.Sprite.LayerSetState(layer, comp.CoreIdleState);
  44. break;
  45. case >= 0.6f and < 0.8f:
  46. args.Sprite.LayerSetVisible(layer, true);
  47. args.Sprite.LayerSetState(layer, comp.CoreActivatingState);
  48. break;
  49. default:
  50. args.Sprite.LayerSetVisible(layer, true);
  51. args.Sprite.LayerSetState(layer, comp.CoreActivatedState);
  52. break;
  53. }
  54. }
  55. }
  56. }
  57. public enum GravityGeneratorVisualLayers : byte
  58. {
  59. Base,
  60. Core
  61. }