1
0

EnsnareableSystem.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Content.Shared.Ensnaring;
  2. using Content.Shared.Ensnaring.Components;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Ensnaring;
  5. public sealed class EnsnareableSystem : SharedEnsnareableSystem
  6. {
  7. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  8. public override void Initialize()
  9. {
  10. base.Initialize();
  11. SubscribeLocalEvent<EnsnareableComponent, AppearanceChangeEvent>(OnAppearanceChange);
  12. }
  13. protected override void OnEnsnareInit(Entity<EnsnareableComponent> ent, ref ComponentInit args)
  14. {
  15. base.OnEnsnareInit(ent, ref args);
  16. if(!TryComp<SpriteComponent>(ent.Owner, out var sprite))
  17. return;
  18. // TODO remove this, this should just be in yaml.
  19. sprite.LayerMapReserveBlank(EnsnaredVisualLayers.Ensnared);
  20. }
  21. private void OnAppearanceChange(EntityUid uid, EnsnareableComponent component, ref AppearanceChangeEvent args)
  22. {
  23. if (args.Sprite == null || !args.Sprite.LayerMapTryGet(EnsnaredVisualLayers.Ensnared, out var layer))
  24. return;
  25. if (_appearance.TryGetData<bool>(uid, EnsnareableVisuals.IsEnsnared, out var isEnsnared, args.Component))
  26. {
  27. if (component.Sprite != null)
  28. {
  29. args.Sprite.LayerSetRSI(layer, component.Sprite);
  30. args.Sprite.LayerSetState(layer, component.State);
  31. args.Sprite.LayerSetVisible(layer, isEnsnared);
  32. }
  33. }
  34. }
  35. }
  36. public enum EnsnaredVisualLayers : byte
  37. {
  38. Ensnared,
  39. }