Separate jetpack movement speed modifier (#9363)

This commit is contained in:
TekuNut
2022-07-07 19:29:25 +01:00
committed by GitHub
parent abaf850ea5
commit 6eba481657
8 changed files with 51 additions and 28 deletions

View File

@@ -1,9 +1,11 @@
using Content.Shared.Actions;
using Content.Shared.Gravity;
using Content.Shared.Interaction.Events;
using Content.Shared.Inventory;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events;
using Robust.Shared.Containers;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
namespace Content.Shared.Movement.Systems;
@@ -11,6 +13,8 @@ namespace Content.Shared.Movement.Systems;
public abstract class SharedJetpackSystem : EntitySystem
{
[Dependency] protected readonly SharedContainerSystem Container = default!;
[Dependency] protected readonly IMapManager MapManager = default!;
[Dependency] protected readonly MovementSpeedModifierSystem MovementSpeedModifier = default!;
public override void Initialize()
{
@@ -20,6 +24,8 @@ public abstract class SharedJetpackSystem : EntitySystem
SubscribeLocalEvent<JetpackComponent, ToggleJetpackEvent>(OnJetpackToggle);
SubscribeLocalEvent<JetpackUserComponent, CanWeightlessMoveEvent>(OnJetpackUserCanWeightless);
SubscribeLocalEvent<JetpackUserComponent, MobMovementProfileEvent>(OnJetpackUserMovement);
SubscribeLocalEvent<JetpackUserComponent, EntParentChangedMessage>(OnJetpackUserEntParentChanged);
SubscribeLocalEvent<GravityChangedMessage>(OnJetpackUserGravityChanged);
}
private void OnJetpackDropped(EntityUid uid, JetpackComponent component, DroppedEvent args)
@@ -43,6 +49,21 @@ public abstract class SharedJetpackSystem : EntitySystem
args.CanMove = true;
}
private void OnJetpackUserEntParentChanged(EntityUid uid, JetpackUserComponent component, ref EntParentChangedMessage args)
{
MovementSpeedModifier.RefreshMovementSpeedModifiers(component.Owner);
}
private void OnJetpackUserGravityChanged(GravityChangedMessage ev)
{
var gridUid = ev.ChangedGridIndex;
foreach (var (_, transform) in EntityQuery<JetpackUserComponent, TransformComponent>(true))
{
if(transform.GridUid == gridUid)
MovementSpeedModifier.RefreshMovementSpeedModifiers(transform.Owner);
}
}
private void SetupUser(EntityUid uid, JetpackComponent component)
{
var user = EnsureComp<JetpackUserComponent>(uid);
@@ -101,6 +122,8 @@ public abstract class SharedJetpackSystem : EntitySystem
{
RemComp<JetpackUserComponent>(user.Value);
}
MovementSpeedModifier.RefreshMovementSpeedModifiers(user.Value);
}
TryComp<AppearanceComponent>(component.Owner, out var appearance);
@@ -108,6 +131,13 @@ public abstract class SharedJetpackSystem : EntitySystem
Dirty(component);
}
public bool IsUserFlying(EntityUid uid)
{
return HasComp<JetpackUserComponent>(uid) &&
TryComp<PhysicsComponent>(uid, out var physicsComponent) &&
uid.IsWeightless(physicsComponent, mapManager: MapManager, entityManager: EntityManager);
}
protected abstract bool CanEnable(JetpackComponent component);
[Serializable, NetSerializable]