Separate jetpack movement speed modifier (#9363)
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 {} }
|
||||||
|
|||||||
@@ -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)]
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user