using Content.Shared.Examine; using Content.Shared.Eye.Blinding.Components; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.IdentityManagement; using Content.Shared.Traits.Assorted.Components; using Robust.Shared.Network; namespace Content.Shared.Traits.Assorted.Systems; /// /// This handles permanent blindness, both the examine and the actual effect. /// public sealed class PermanentBlindnessSystem : EntitySystem { [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly BlindableSystem _blinding = default!; /// public override void Initialize() { SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnEyeDamageChanged); // WD ADD } private void OnExamined(Entity blindness, ref ExaminedEvent args) { if (args.IsInDetailsRange && !_net.IsClient && blindness.Comp.Blindness == 0) { args.PushMarkup(Loc.GetString("trait-examined-Blindness", ("target", Identity.Entity(blindness, EntityManager)))); } } private void OnShutdown(Entity blindness, ref ComponentShutdown args) { _blinding.UpdateIsBlind(blindness.Owner); } private void OnMapInit(Entity blindness, ref MapInitEvent args) { if (!_entityManager.TryGetComponent(blindness, out var blindable)) return; if (blindness.Comp.Blindness != 0) _blinding.SetMinDamage(new Entity(blindness.Owner, blindable), blindness.Comp.Blindness); else { var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude; _blinding.SetMinDamage(new Entity(blindness.Owner, blindable), maxMagnitudeInt + 2); } _blinding.SetIncurable(new Entity(blindness.Owner, blindable), blindness.Comp.Incurable); } // WD EDIT START /// /// Handles eye healing attempts to ensure blindness from the trait cannot be cured /// private void OnEyeDamageChanged(Entity blindness, ref EyeDamageChangedEvent args) { if (!_entityManager.TryGetComponent(blindness, out var blindable)) return; if (blindness.Comp.Blindness != 0) { // Set minimum eye damage to the trait value _blinding.SetMinDamage(new Entity(blindness.Owner, blindable), blindness.Comp.Blindness); } else { // Set maximum possible eye damage var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude; _blinding.SetMinDamage(new Entity(blindness.Owner, blindable), maxMagnitudeInt); } // Update blindness state after parameter changes _blinding.UpdateIsBlind(blindness.Owner); } // WD EDIT END }