2025-08-19 11:35:09 -07:00
|
|
|
|
using Content.Shared.Gravity;
|
|
|
|
|
|
using Content.Shared.Movement.Components;
|
2022-08-08 10:18:14 +10:00
|
|
|
|
using Content.Shared.Movement.Events;
|
2022-05-27 02:41:18 -05:00
|
|
|
|
|
2022-06-24 17:44:30 +10:00
|
|
|
|
namespace Content.Shared.Movement.Systems;
|
2022-05-27 02:41:18 -05:00
|
|
|
|
|
|
|
|
|
|
public sealed class MovementIgnoreGravitySystem : EntitySystem
|
|
|
|
|
|
{
|
2025-08-19 11:35:09 -07:00
|
|
|
|
[Dependency] SharedGravitySystem _gravity = default!;
|
2022-05-27 02:41:18 -05:00
|
|
|
|
public override void Initialize()
|
|
|
|
|
|
{
|
2022-08-08 10:18:14 +10:00
|
|
|
|
SubscribeLocalEvent<MovementAlwaysTouchingComponent, CanWeightlessMoveEvent>(OnWeightless);
|
2025-08-19 11:35:09 -07:00
|
|
|
|
SubscribeLocalEvent<MovementIgnoreGravityComponent, IsWeightlessEvent>(OnIsWeightless);
|
|
|
|
|
|
SubscribeLocalEvent<MovementIgnoreGravityComponent, ComponentStartup>(OnComponentStartup);
|
2022-08-08 10:18:14 +10:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-19 11:35:09 -07:00
|
|
|
|
private void OnWeightless(Entity<MovementAlwaysTouchingComponent> entity, ref CanWeightlessMoveEvent args)
|
2022-08-08 10:18:14 +10:00
|
|
|
|
{
|
|
|
|
|
|
args.CanMove = true;
|
2022-05-27 02:41:18 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-19 11:35:09 -07:00
|
|
|
|
private void OnIsWeightless(Entity<MovementIgnoreGravityComponent> entity, ref IsWeightlessEvent args)
|
2022-05-27 02:41:18 -05:00
|
|
|
|
{
|
2025-08-19 11:35:09 -07:00
|
|
|
|
// We don't check if the event has been handled as this component takes precedent over other things.
|
2022-05-27 02:41:18 -05:00
|
|
|
|
|
2025-08-19 11:35:09 -07:00
|
|
|
|
args.IsWeightless = entity.Comp.Weightless;
|
|
|
|
|
|
args.Handled = true;
|
2022-05-27 02:41:18 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-19 11:35:09 -07:00
|
|
|
|
private void OnComponentStartup(Entity<MovementIgnoreGravityComponent> entity, ref ComponentStartup args)
|
2022-05-27 02:41:18 -05:00
|
|
|
|
{
|
2025-08-19 11:35:09 -07:00
|
|
|
|
EnsureComp<GravityAffectedComponent>(entity);
|
|
|
|
|
|
_gravity.RefreshWeightless(entity.Owner, entity.Comp.Weightless);
|
2022-05-27 02:41:18 -05:00
|
|
|
|
}
|
|
|
|
|
|
}
|