Separate jetpack movement speed modifier (#9363)
This commit is contained in:
@@ -21,7 +21,7 @@ namespace Content.Shared.Movement.Systems
|
||||
BaseWalkSpeed = component.BaseWalkSpeed,
|
||||
BaseSprintSpeed = component.BaseSprintSpeed,
|
||||
WalkSpeedModifier = component.WalkSpeedModifier,
|
||||
SprintSpeedModifier = component.SprintSpeedModifier
|
||||
SprintSpeedModifier = component.SprintSpeedModifier,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -156,7 +156,10 @@ namespace Content.Shared.Movement.Systems
|
||||
|
||||
// Regular movement.
|
||||
// Target velocity.
|
||||
var total = walkDir * mover.CurrentWalkSpeed + sprintDir * mover.CurrentSprintSpeed;
|
||||
var moveSpeedComponent = CompOrNull<MovementSpeedModifierComponent>(mover.Owner);
|
||||
var walkSpeed = moveSpeedComponent?.CurrentWalkSpeed ?? MovementSpeedModifierComponent.DefaultBaseWalkSpeed;
|
||||
var sprintSpeed = moveSpeedComponent?.CurrentSprintSpeed ?? MovementSpeedModifierComponent.DefaultBaseSprintSpeed;
|
||||
var total = walkDir * walkSpeed + sprintDir * sprintSpeed;
|
||||
|
||||
var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total;
|
||||
|
||||
@@ -218,7 +221,11 @@ namespace Content.Shared.Movement.Systems
|
||||
// Regular movement.
|
||||
// Target velocity.
|
||||
// This is relative to the map / grid we're on.
|
||||
var total = walkDir * mover.CurrentWalkSpeed + sprintDir * mover.CurrentSprintSpeed;
|
||||
var moveSpeedComponent = CompOrNull<MovementSpeedModifierComponent>(mover.Owner);
|
||||
var walkSpeed = moveSpeedComponent?.CurrentWalkSpeed ?? MovementSpeedModifierComponent.DefaultBaseWalkSpeed;
|
||||
var sprintSpeed = moveSpeedComponent?.CurrentSprintSpeed ?? MovementSpeedModifierComponent.DefaultBaseSprintSpeed;
|
||||
var total = walkDir * walkSpeed + sprintDir * sprintSpeed;
|
||||
|
||||
var parentRotation = GetParentGridAngle(xform, mover);
|
||||
var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user