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

@@ -19,6 +19,7 @@ namespace Content.Server.Nutrition.EntitySystems
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly DamageableSystem _damage = default!; [Dependency] private readonly DamageableSystem _damage = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movement = default!; [Dependency] private readonly MovementSpeedModifierSystem _movement = default!;
[Dependency] private readonly SharedJetpackSystem _jetpack = default!;
private ISawmill _sawmill = default!; private ISawmill _sawmill = default!;
private float _accumulatedFrameTime; private float _accumulatedFrameTime;
@@ -44,6 +45,9 @@ namespace Content.Server.Nutrition.EntitySystems
private void OnRefreshMovespeed(EntityUid uid, ThirstComponent component, RefreshMovementSpeedModifiersEvent args) private void OnRefreshMovespeed(EntityUid uid, ThirstComponent component, RefreshMovementSpeedModifiersEvent args)
{ {
if (_jetpack.IsUserFlying(component.Owner))
return;
var mod = component.CurrentThirstThreshold <= ThirstThreshold.Parched ? 0.75f : 1.0f; var mod = component.CurrentThirstThreshold <= ThirstThreshold.Parched ? 0.75f : 1.0f;
args.ModifySpeed(mod, mod); args.ModifySpeed(mod, mod);
} }

View File

@@ -4,16 +4,6 @@ namespace Content.Shared.Movement.Components
// There can only be one. // There can only be one.
public interface IMoverComponent : IComponent public interface IMoverComponent : IComponent
{ {
/// <summary>
/// Movement speed (m/s) that the entity walks.
/// </summary>
float CurrentWalkSpeed { get; }
/// <summary>
/// Movement speed (m/s) that the entity sprints.
/// </summary>
float CurrentSprintSpeed { get; }
/// <summary> /// <summary>
/// Is the entity Sprinting (running)? /// Is the entity Sprinting (running)?
/// </summary> /// </summary>

View File

@@ -5,8 +5,7 @@ namespace Content.Shared.Movement.Components
public sealed class SharedDummyInputMoverComponent : Component, IMoverComponent public sealed class SharedDummyInputMoverComponent : Component, IMoverComponent
{ {
public bool IgnorePaused => false; public bool IgnorePaused => false;
public float CurrentWalkSpeed => 0f;
public float CurrentSprintSpeed => 0f;
public bool CanMove { get; set; } = true; public bool CanMove { get; set; } = true;
public Angle LastGridAngle { get => Angle.Zero; set {} } public Angle LastGridAngle { get => Angle.Zero; set {} }

View File

@@ -43,18 +43,6 @@ namespace Content.Shared.Movement.Components
[ViewVariables] [ViewVariables]
public Angle LastGridAngle { get; set; } = new(0); public Angle LastGridAngle { get; set; } = new(0);
public float CurrentWalkSpeed =>
_entityManager.TryGetComponent<MovementSpeedModifierComponent>(Owner,
out var movementSpeedModifierComponent)
? movementSpeedModifierComponent.CurrentWalkSpeed
: MovementSpeedModifierComponent.DefaultBaseWalkSpeed;
public float CurrentSprintSpeed =>
_entityManager.TryGetComponent<MovementSpeedModifierComponent>(Owner,
out var movementSpeedModifierComponent)
? movementSpeedModifierComponent.CurrentSprintSpeed
: MovementSpeedModifierComponent.DefaultBaseSprintSpeed;
public bool Sprinting => !HasFlag(_heldMoveButtons, MoveButtons.Walk); public bool Sprinting => !HasFlag(_heldMoveButtons, MoveButtons.Walk);
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]

View File

@@ -21,7 +21,7 @@ namespace Content.Shared.Movement.Systems
BaseWalkSpeed = component.BaseWalkSpeed, BaseWalkSpeed = component.BaseWalkSpeed,
BaseSprintSpeed = component.BaseSprintSpeed, BaseSprintSpeed = component.BaseSprintSpeed,
WalkSpeedModifier = component.WalkSpeedModifier, WalkSpeedModifier = component.WalkSpeedModifier,
SprintSpeedModifier = component.SprintSpeedModifier SprintSpeedModifier = component.SprintSpeedModifier,
}; };
} }

View File

@@ -1,9 +1,11 @@
using Content.Shared.Actions; using Content.Shared.Actions;
using Content.Shared.Gravity;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Movement.Components; using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Map;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
namespace Content.Shared.Movement.Systems; namespace Content.Shared.Movement.Systems;
@@ -11,6 +13,8 @@ namespace Content.Shared.Movement.Systems;
public abstract class SharedJetpackSystem : EntitySystem public abstract class SharedJetpackSystem : EntitySystem
{ {
[Dependency] protected readonly SharedContainerSystem Container = default!; [Dependency] protected readonly SharedContainerSystem Container = default!;
[Dependency] protected readonly IMapManager MapManager = default!;
[Dependency] protected readonly MovementSpeedModifierSystem MovementSpeedModifier = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -20,6 +24,8 @@ public abstract class SharedJetpackSystem : EntitySystem
SubscribeLocalEvent<JetpackComponent, ToggleJetpackEvent>(OnJetpackToggle); SubscribeLocalEvent<JetpackComponent, ToggleJetpackEvent>(OnJetpackToggle);
SubscribeLocalEvent<JetpackUserComponent, CanWeightlessMoveEvent>(OnJetpackUserCanWeightless); SubscribeLocalEvent<JetpackUserComponent, CanWeightlessMoveEvent>(OnJetpackUserCanWeightless);
SubscribeLocalEvent<JetpackUserComponent, MobMovementProfileEvent>(OnJetpackUserMovement); SubscribeLocalEvent<JetpackUserComponent, MobMovementProfileEvent>(OnJetpackUserMovement);
SubscribeLocalEvent<JetpackUserComponent, EntParentChangedMessage>(OnJetpackUserEntParentChanged);
SubscribeLocalEvent<GravityChangedMessage>(OnJetpackUserGravityChanged);
} }
private void OnJetpackDropped(EntityUid uid, JetpackComponent component, DroppedEvent args) private void OnJetpackDropped(EntityUid uid, JetpackComponent component, DroppedEvent args)
@@ -43,6 +49,21 @@ public abstract class SharedJetpackSystem : EntitySystem
args.CanMove = true; 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) private void SetupUser(EntityUid uid, JetpackComponent component)
{ {
var user = EnsureComp<JetpackUserComponent>(uid); var user = EnsureComp<JetpackUserComponent>(uid);
@@ -101,6 +122,8 @@ public abstract class SharedJetpackSystem : EntitySystem
{ {
RemComp<JetpackUserComponent>(user.Value); RemComp<JetpackUserComponent>(user.Value);
} }
MovementSpeedModifier.RefreshMovementSpeedModifiers(user.Value);
} }
TryComp<AppearanceComponent>(component.Owner, out var appearance); TryComp<AppearanceComponent>(component.Owner, out var appearance);
@@ -108,6 +131,13 @@ public abstract class SharedJetpackSystem : EntitySystem
Dirty(component); 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); protected abstract bool CanEnable(JetpackComponent component);
[Serializable, NetSerializable] [Serializable, NetSerializable]

View File

@@ -156,7 +156,10 @@ namespace Content.Shared.Movement.Systems
// Regular movement. // Regular movement.
// Target velocity. // 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; var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total;
@@ -218,7 +221,11 @@ namespace Content.Shared.Movement.Systems
// Regular movement. // Regular movement.
// Target velocity. // Target velocity.
// This is relative to the map / grid we're on. // 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 parentRotation = GetParentGridAngle(xform, mover);
var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total; var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total;

View File

@@ -1,10 +1,12 @@
using Content.Shared.Movement.Systems; using Content.Shared.Movement.Systems;
using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.Components;
namespace Content.Shared.Nutrition.EntitySystems namespace Content.Shared.Nutrition.EntitySystems
{ {
public sealed class SharedHungerSystem : EntitySystem public sealed class SharedHungerSystem : EntitySystem
{ {
[Dependency] private readonly SharedJetpackSystem _jetpack = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
@@ -14,6 +16,9 @@ namespace Content.Shared.Nutrition.EntitySystems
private void OnRefreshMovespeed(EntityUid uid, SharedHungerComponent component, RefreshMovementSpeedModifiersEvent args) private void OnRefreshMovespeed(EntityUid uid, SharedHungerComponent component, RefreshMovementSpeedModifiersEvent args)
{ {
if (_jetpack.IsUserFlying(component.Owner))
return;
float mod = component.CurrentHungerThreshold <= HungerThreshold.Starving ? 0.75f : 1.0f; float mod = component.CurrentHungerThreshold <= HungerThreshold.Starving ? 0.75f : 1.0f;
args.ModifySpeed(mod, mod); args.ModifySpeed(mod, mod);
} }