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(OnImpositionDamaged); SubscribeLocalEvent(OnCosmicImposition); } public override void Update(float frameTime) { base.Update(frameTime); var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp)) { if (_timing.CurTime >= comp.Expiry) { RemComp(uid, comp); } } } private void OnCosmicImposition(Entity uid, ref EventCosmicImposition args) { EnsureComp(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 uid, ref BeforeDamageChangedEvent args) { args.Cancelled = true; } }