using Content.Server.Alert; using Content.Server.Atmos.Components; using Content.Server.Clothing.Components; using Content.Shared.Actions; using Content.Shared.Alert; using Content.Shared.Clothing; using Content.Shared.Inventory.Events; using Content.Shared.Movement.EntitySystems; using Content.Shared.Slippery; using Content.Shared.Verbs; namespace Content.Server.Clothing { public sealed class MagbootsSystem : SharedMagbootsSystem { [Dependency] private readonly AlertsSystem _alertsSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent>(AddToggleVerb); SubscribeLocalEvent(OnSlipAttempt); SubscribeLocalEvent(OnGotEquipped); SubscribeLocalEvent(OnGotUnequipped); } public void UpdateMagbootEffects(EntityUid parent, EntityUid uid, bool state, MagbootsComponent? component) { if (!Resolve(uid, ref component)) return; state = state && component.On; if (TryComp(parent, out MovedByPressureComponent? movedByPressure)) { movedByPressure.Enabled = state; } if (state) { _alertsSystem.ShowAlert(parent, AlertType.Magboots); } else { _alertsSystem.ClearAlert(parent, AlertType.Magboots); } } private void OnGotUnequipped(EntityUid uid, MagbootsComponent component, GotUnequippedEvent args) { if (args.Slot == "shoes") { UpdateMagbootEffects(args.Equipee, uid, false, component); } } private void OnGotEquipped(EntityUid uid, MagbootsComponent component, GotEquippedEvent args) { if (args.Slot == "shoes") { UpdateMagbootEffects(args.Equipee, uid, true, component); } } private void AddToggleVerb(EntityUid uid, MagbootsComponent component, GetVerbsEvent args) { if (!args.CanAccess || !args.CanInteract) return; ActivationVerb verb = new(); verb.Text = Loc.GetString("toggle-magboots-verb-get-data-text"); verb.Act = () => component.On = !component.On; // TODO VERB ICON add toggle icon? maybe a computer on/off symbol? args.Verbs.Add(verb); } private void OnSlipAttempt(EntityUid uid, MagbootsComponent component, SlipAttemptEvent args) { if (component.On) { args.Cancel(); } } } }