Remove IMoveSpeedModifier in favor of events (#5212)
* Remove IMoveSpeedModifier * fucking magboots * yope * rabiews
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.GameStates;
|
||||
@@ -8,6 +10,18 @@ namespace Content.Shared.Movement.EntitySystems
|
||||
{
|
||||
public sealed class MovementSpeedModifierSystem : EntitySystem
|
||||
{
|
||||
private readonly HashSet<EntityUid> _needsRefresh = new();
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
foreach (var uid in _needsRefresh)
|
||||
{
|
||||
RecalculateMovementSpeedModifiers(uid);
|
||||
}
|
||||
|
||||
_needsRefresh.Clear();
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
@@ -31,6 +45,25 @@ namespace Content.Shared.Movement.EntitySystems
|
||||
component.BaseSprintSpeed = state.BaseSprintSpeed;
|
||||
}
|
||||
|
||||
public void RefreshMovementSpeedModifiers(EntityUid uid)
|
||||
{
|
||||
_needsRefresh.Add(uid);
|
||||
}
|
||||
|
||||
private void RecalculateMovementSpeedModifiers(EntityUid uid, MovementSpeedModifierComponent? move = null)
|
||||
{
|
||||
if (!Resolve(uid, ref move, false))
|
||||
return;
|
||||
|
||||
var ev = new RefreshMovementSpeedModifiersEvent();
|
||||
RaiseLocalEvent(uid, ev, false);
|
||||
|
||||
move.WalkSpeedModifier = ev.WalkSpeedModifier;
|
||||
move.SprintSpeedModifier = ev.SprintSpeedModifier;
|
||||
|
||||
move.Dirty();
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
private sealed class MovementSpeedModifierComponentState : ComponentState
|
||||
{
|
||||
@@ -38,4 +71,21 @@ namespace Content.Shared.Movement.EntitySystems
|
||||
public float BaseSprintSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raised on an entity to determine its new movement speed. Any system that wishes to change movement speed
|
||||
/// should hook into this event and set it then. If you want this event to be raised,
|
||||
/// call <see cref="MovementSpeedModifierSystem.RefreshMovementSpeedModifiers"/>.
|
||||
/// </summary>
|
||||
public class RefreshMovementSpeedModifiersEvent : EntityEventArgs
|
||||
{
|
||||
public float WalkSpeedModifier { get; private set; } = 1.0f;
|
||||
public float SprintSpeedModifier { get; private set; } = 1.0f;
|
||||
|
||||
public void ModifySpeed(float walk, float sprint)
|
||||
{
|
||||
WalkSpeedModifier *= walk;
|
||||
SprintSpeedModifier *= sprint;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user