using Content.Shared.ActionBlocker; using Content.Shared._DV.Movement.Components; using Content.Shared.Movement.Components; using Content.Shared.Movement.Events; namespace Content.Shared.Movement.Systems; public abstract partial class SharedJetpackSystem { [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; private void OnJetpackToggle(Entity jetpack, ref ToggleJetpackEvent args) { if (args.Handled) return; if (!_actionBlocker.CanComplexInteract(args.Performer)) { _popup.PopupClient(Loc.GetString("jetpack-too-complex"), jetpack, args.Performer); return; } jetpack.Comp.AutomaticMode = !jetpack.Comp.AutomaticMode; jetpack.Comp.AutomaticUser = args.Performer; Dirty(jetpack); if (!CanEnableOnGrid(_transform.GetGrid(jetpack.Owner))) { if (jetpack.Comp.AutomaticMode) EnsureComp(args.Performer).Jetpack = jetpack; else RemComp(args.Performer); var message = jetpack.Comp.AutomaticMode ? "jetpack-activated-on-grid" : "jetpack-deactivated"; _popup.PopupClient(Loc.GetString(message), jetpack, args.Performer); DirtyEntity(args.Performer); return; } var messageOffGrid = jetpack.Comp.AutomaticMode ? "jetpack-activated-off-grid" : "jetpack-deactivated"; _popup.PopupClient(Loc.GetString(messageOffGrid), jetpack, args.Performer); SetEnabled(jetpack.Owner, jetpack.Comp, !IsEnabled(jetpack.Owner)); } private void OnAutomaticJetpackEntParentChanged(Entity jetpackUser, ref EntParentChangedMessage args) { if (!TryComp(jetpackUser.Comp.Jetpack, out var jetpack) || args.Transform.GridUid != null) return; SetEnabled(jetpackUser.Comp.Jetpack, jetpack, true, args.Entity); _popup.PopupClient(Loc.GetString("jetpack-activates-automatically"), args.Entity, args.Entity); } private void RemoveAutomaticJetpack(Entity jetpack) { jetpack.Comp.AutomaticMode = false; if (jetpack.Comp.AutomaticUser.HasValue) RemComp(jetpack.Comp.AutomaticUser.Value); jetpack.Comp.AutomaticUser = null; } private void RefreshAutomaticJetpack(Entity jetpack, EntityUid user, bool jetpackEnabled) { if (jetpackEnabled) RemComp(user); else if (jetpack.Comp.AutomaticMode) // DeltaV - Jetpacks automatically turn on when toggled. EnsureComp(user).Jetpack = jetpack; } }