RevenantSystem.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Content.Client.Alerts;
  2. using Content.Shared.Revenant;
  3. using Content.Shared.Revenant.Components;
  4. using Robust.Client.GameObjects;
  5. namespace Content.Client.Revenant;
  6. public sealed class RevenantSystem : EntitySystem
  7. {
  8. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  9. public override void Initialize()
  10. {
  11. base.Initialize();
  12. SubscribeLocalEvent<RevenantComponent, AppearanceChangeEvent>(OnAppearanceChange);
  13. SubscribeLocalEvent<RevenantComponent, UpdateAlertSpriteEvent>(OnUpdateAlert);
  14. }
  15. private void OnAppearanceChange(EntityUid uid, RevenantComponent component, ref AppearanceChangeEvent args)
  16. {
  17. if (args.Sprite == null)
  18. return;
  19. if (_appearance.TryGetData<bool>(uid, RevenantVisuals.Harvesting, out var harvesting, args.Component) && harvesting)
  20. {
  21. args.Sprite.LayerSetState(0, component.HarvestingState);
  22. }
  23. else if (_appearance.TryGetData<bool>(uid, RevenantVisuals.Stunned, out var stunned, args.Component) && stunned)
  24. {
  25. args.Sprite.LayerSetState(0, component.StunnedState);
  26. }
  27. else if (_appearance.TryGetData<bool>(uid, RevenantVisuals.Corporeal, out var corporeal, args.Component))
  28. {
  29. if (corporeal)
  30. args.Sprite.LayerSetState(0, component.CorporealState);
  31. else
  32. args.Sprite.LayerSetState(0, component.State);
  33. }
  34. }
  35. private void OnUpdateAlert(Entity<RevenantComponent> ent, ref UpdateAlertSpriteEvent args)
  36. {
  37. if (args.Alert.ID != ent.Comp.EssenceAlert)
  38. return;
  39. var sprite = args.SpriteViewEnt.Comp;
  40. var essence = Math.Clamp(ent.Comp.Essence.Int(), 0, 999);
  41. sprite.LayerSetState(RevenantVisualLayers.Digit1, $"{(essence / 100) % 10}");
  42. sprite.LayerSetState(RevenantVisualLayers.Digit2, $"{(essence / 10) % 10}");
  43. sprite.LayerSetState(RevenantVisualLayers.Digit3, $"{essence % 10}");
  44. }
  45. }