using Content.Shared._CP14.MagicVision; using Robust.Shared.Timing; using Content.Shared.StatusEffectNew; namespace Content.Server._CP14.MagicVision; public sealed class CP14MagicVisionSystem : CP14SharedMagicVisionSystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedEyeSystem _eye = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent>(OnGetVisMask); SubscribeLocalEvent(OnApplied); SubscribeLocalEvent(OnRemoved); } private void OnGetVisMask(Entity ent, ref StatusEffectRelayedEvent args) { var appliedMask = (int)CP14MagicVisionStatusEffectComponent.VisibilityMask; var newArgs = args.Args; newArgs.VisibilityMask |= appliedMask; args = args with { Args = newArgs }; } public override void Update(float frameTime) { base.Update(frameTime); var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var marker)) { if (marker.EndTime == TimeSpan.Zero) continue; if (_timing.CurTime < marker.EndTime) continue; QueueDel(uid); } } private void OnApplied(Entity ent, ref StatusEffectAppliedEvent args) { _eye.RefreshVisibilityMask(args.Target); } private void OnRemoved(Entity ent, ref StatusEffectRemovedEvent args) { _eye.RefreshVisibilityMask(args.Target); } }