using Content.Shared.Clothing; using Content.Shared.Clothing.Components; using Content.Shared.Eye.Blinding.Components; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.Inventory; using Content.Shared.Tag; using Content.Shared.Eye; using Content.Shared.Sunrise.Eye; using Content.Shared.Sunrise.Clothing.Components; namespace Content.Shared.Sunrise.Eye; public abstract class SharedDarkenedVisionSystem : EntitySystem { [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly BlindableSystem _blinding = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnTrySee); } public void UpdateVisionDarkening(Entity ent) { if (!Resolve(ent, ref ent.Comp, false)) return; var ev = new GetVisionDarkeningEvent(); RaiseLocalEvent(ent, ev); if (TryComp(ent, out var inventory)) _inventory.RelayEvent((ent.Owner, inventory), ref ev); ent.Comp.Strength = ev.Strength; Dirty(ent); _blinding.UpdateIsBlind(ent.Owner); } private void OnTrySee(Entity ent, ref CanSeeAttemptEvent args) { if (ent.Comp.Strength >= ent.Comp.BlindTreshold) args.Cancel(); } } /// /// Event to get total vision darkening /// public sealed class GetVisionDarkeningEvent : EntityEventArgs, IInventoryRelayEvent { public SlotFlags TargetSlots => SlotFlags.EYES | SlotFlags.MASK | SlotFlags.HEAD; public float Strength = 0f; }