Delta-v/Content.Server/_DV/CosmicCult/Abilities/CosmicImpositionSystem.cs

53 lines
1.7 KiB
C#

using Content.Shared._DV.CosmicCult;
using Content.Shared._DV.CosmicCult.Components;
using Content.Shared.Damage;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Timing;
namespace Content.Server._DV.CosmicCult.Abilities;
public sealed class CosmicImpositionSystem : EntitySystem
{
[Dependency] private readonly CosmicCultSystem _cult = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CosmicImposingComponent, BeforeDamageChangedEvent>(OnImpositionDamaged);
SubscribeLocalEvent<CosmicCultComponent, EventCosmicImposition>(OnCosmicImposition);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<CosmicImposingComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (_timing.CurTime >= comp.Expiry)
{
RemComp(uid, comp);
}
}
}
private void OnCosmicImposition(Entity<CosmicCultComponent> uid, ref EventCosmicImposition args)
{
EnsureComp<CosmicImposingComponent>(uid, out var comp);
comp.Expiry = _timing.CurTime + uid.Comp.CosmicImpositionDuration;
Spawn(uid.Comp.ImpositionVFX, Transform(uid).Coordinates);
args.Handled = true;
_audio.PlayPvs(uid.Comp.ImpositionSFX, uid, AudioParams.Default.WithVariation(0.05f));
_cult.MalignEcho(uid);
}
private void OnImpositionDamaged(Entity<CosmicImposingComponent> uid, ref BeforeDamageChangedEvent args)
{
args.Cancelled = true;
}
}