CatStation/Content.Server/Tesla/EntitySystem/LightningSparkingSystem.cs
Pieter-Jan Briers 5168b5f3d4
IoC source gen compatibility (#43863)
* IoC source gen compatibility

Can be merged before or after https://github.com/space-wizards/RobustToolbox/pull/6549 doesn't really matter.

* Missed a spot
2026-05-09 03:29:58 +00:00

47 lines
1.5 KiB
C#

using Content.Server.Tesla.Components;
using Content.Server.Lightning;
using Content.Shared.Power;
using Robust.Shared.Timing;
namespace Content.Server.Tesla.EntitySystems;
/// <summary>
/// The component changes the visual of an object after it is struck by lightning
/// </summary>
public sealed partial class LightningSparkingSystem : EntitySystem
{
[Dependency] private SharedAppearanceSystem _appearance = default!;
[Dependency] private IGameTiming _gameTiming = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<LightningSparkingComponent, HitByLightningEvent>(OnHitByLightning);
}
private void OnHitByLightning(Entity<LightningSparkingComponent> uid, ref HitByLightningEvent args)
{
_appearance.SetData(uid.Owner, TeslaCoilVisuals.Lightning, true);
uid.Comp.LightningEndTime = _gameTiming.CurTime + TimeSpan.FromSeconds(uid.Comp.LightningTime);
uid.Comp.IsSparking = true;
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<LightningSparkingComponent>();
while (query.MoveNext(out var uid, out var component))
{
if (!component.IsSparking)
continue;
if (component.LightningEndTime < _gameTiming.CurTime)
{
_appearance.SetData(uid, TeslaCoilVisuals.Lightning, false);
component.IsSparking = false;
}
}
}
}