Hot potato on fire (#16017)
This commit is contained in:
53
Content.Shared/Damage/Systems/DamageOnHoldingSystem.cs
Normal file
53
Content.Shared/Damage/Systems/DamageOnHoldingSystem.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using Content.Shared.Damage.Components;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Shared.Damage.Systems;
|
||||
|
||||
public sealed class DamageOnHoldingSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<DamageOnHoldingComponent, EntityUnpausedEvent>(OnUnpaused);
|
||||
SubscribeLocalEvent<DamageOnHoldingComponent, MapInitEvent>(OnMapInit);
|
||||
}
|
||||
|
||||
public void SetEnabled(EntityUid uid, bool enabled, DamageOnHoldingComponent? component = null)
|
||||
{
|
||||
if (Resolve(uid, ref component))
|
||||
{
|
||||
component.Enabled = enabled;
|
||||
component.NextDamage = _timing.CurTime;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnUnpaused(EntityUid uid, DamageOnHoldingComponent component, ref EntityUnpausedEvent args)
|
||||
{
|
||||
component.NextDamage += args.PausedTime;
|
||||
}
|
||||
|
||||
private void OnMapInit(EntityUid uid, DamageOnHoldingComponent component, MapInitEvent args)
|
||||
{
|
||||
component.NextDamage = _timing.CurTime;
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
var query = EntityQueryEnumerator<DamageOnHoldingComponent>();
|
||||
while (query.MoveNext(out var uid, out var component))
|
||||
{
|
||||
if (!component.Enabled || component.NextDamage > _timing.CurTime)
|
||||
continue;
|
||||
if (_container.TryGetContainingContainer(uid, out var container))
|
||||
{
|
||||
_damageableSystem.TryChangeDamage(container.Owner, component.Damage, origin: uid);
|
||||
}
|
||||
component.NextDamage = _timing.CurTime + TimeSpan.FromSeconds(component.Interval);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user