using Content.Shared.Gravity; using Content.Shared.Movement.Components; using Content.Shared.Movement.Events; namespace Content.Shared.Movement.Systems; public sealed class MovementIgnoreGravitySystem : EntitySystem { [Dependency] SharedGravitySystem _gravity = default!; public override void Initialize() { SubscribeLocalEvent(OnWeightless); SubscribeLocalEvent(OnIsWeightless); SubscribeLocalEvent(OnComponentStartup); } private void OnWeightless(Entity entity, ref CanWeightlessMoveEvent args) { args.CanMove = true; } private void OnIsWeightless(Entity entity, ref IsWeightlessEvent args) { // We don't check if the event has been handled as this component takes precedent over other things. args.IsWeightless = entity.Comp.Weightless; args.Handled = true; } private void OnComponentStartup(Entity entity, ref ComponentStartup args) { EnsureComp(entity); _gravity.RefreshWeightless(entity.Owner, entity.Comp.Weightless); } }