LightningSparkingSystem.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Content.Server.Tesla.Components;
  2. using Content.Server.Lightning;
  3. using Content.Shared.Power;
  4. using Robust.Shared.Timing;
  5. namespace Content.Server.Tesla.EntitySystems;
  6. /// <summary>
  7. /// The component changes the visual of an object after it is struck by lightning
  8. /// </summary>
  9. public sealed class LightningSparkingSystem : EntitySystem
  10. {
  11. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  12. [Dependency] private readonly IGameTiming _gameTiming = default!;
  13. public override void Initialize()
  14. {
  15. base.Initialize();
  16. SubscribeLocalEvent<LightningSparkingComponent, HitByLightningEvent>(OnHitByLightning);
  17. }
  18. private void OnHitByLightning(Entity<LightningSparkingComponent> uid, ref HitByLightningEvent args)
  19. {
  20. _appearance.SetData(uid.Owner, TeslaCoilVisuals.Lightning, true);
  21. uid.Comp.LightningEndTime = _gameTiming.CurTime + TimeSpan.FromSeconds(uid.Comp.LightningTime);
  22. uid.Comp.IsSparking = true;
  23. }
  24. public override void Update(float frameTime)
  25. {
  26. base.Update(frameTime);
  27. var query = EntityQueryEnumerator<LightningSparkingComponent>();
  28. while (query.MoveNext(out var uid, out var component))
  29. {
  30. if (!component.IsSparking)
  31. continue;
  32. if (component.LightningEndTime < _gameTiming.CurTime)
  33. {
  34. _appearance.SetData(uid, TeslaCoilVisuals.Lightning, false);
  35. component.IsSparking = false;
  36. }
  37. }
  38. }
  39. }