MovementSpeedModifierComponent (#721)
* movement modifier system * update default exposedata values * changing base speed marks as dirty * formatting * movement speed modifier component * Moves slowdown component to the prototype AIController respects slowdown * reset dirty flag
This commit is contained in:
@@ -14,11 +14,11 @@ using Robust.Shared.ViewVariables;
|
||||
namespace Content.Server.GameObjects.Components.Nutrition
|
||||
{
|
||||
[RegisterComponent]
|
||||
public sealed class ThirstComponent : Component
|
||||
public sealed class ThirstComponent : Component, IMoveSpeedModifier
|
||||
{
|
||||
#pragma warning disable 649
|
||||
#pragma warning disable 649
|
||||
[Dependency] private readonly IRobustRandom _random;
|
||||
#pragma warning restore 649
|
||||
#pragma warning restore 649
|
||||
|
||||
public override string Name => "Thirst";
|
||||
|
||||
@@ -53,16 +53,15 @@ namespace Content.Server.GameObjects.Components.Nutrition
|
||||
|
||||
public void ThirstThresholdEffect(bool force = false)
|
||||
{
|
||||
if (_currentThirstThreshold != _lastThirstThreshold || force) {
|
||||
if (_currentThirstThreshold != _lastThirstThreshold || force)
|
||||
{
|
||||
Logger.InfoS("thirst", $"Updating Thirst state for {Owner.Name}");
|
||||
|
||||
// Revert slow speed if required
|
||||
if (_lastThirstThreshold == ThirstThreshold.Parched && _currentThirstThreshold != ThirstThreshold.Dead &&
|
||||
Owner.TryGetComponent(out PlayerInputMoverComponent playerSpeedupComponent))
|
||||
Owner.TryGetComponent(out MovementSpeedModifierComponent movementSlowdownComponent))
|
||||
{
|
||||
// TODO shitcode: Come up something better
|
||||
playerSpeedupComponent.WalkMoveSpeed = playerSpeedupComponent.WalkMoveSpeed * 2;
|
||||
playerSpeedupComponent.SprintMoveSpeed = playerSpeedupComponent.SprintMoveSpeed * 4;
|
||||
movementSlowdownComponent.RefreshMovementSpeedModifiers();
|
||||
}
|
||||
|
||||
// Update UI
|
||||
@@ -89,11 +88,9 @@ namespace Content.Server.GameObjects.Components.Nutrition
|
||||
return;
|
||||
|
||||
case ThirstThreshold.Parched:
|
||||
// TODO: If something else bumps this could cause mega-speed.
|
||||
// If some form of speed update system if multiple things are touching it use that.
|
||||
if (Owner.TryGetComponent(out PlayerInputMoverComponent playerInputMoverComponent)) {
|
||||
playerInputMoverComponent.WalkMoveSpeed = playerInputMoverComponent.WalkMoveSpeed / 2;
|
||||
playerInputMoverComponent.SprintMoveSpeed = playerInputMoverComponent.SprintMoveSpeed / 4;
|
||||
if (Owner.TryGetComponent(out MovementSpeedModifierComponent movementSlowdownComponent1))
|
||||
{
|
||||
movementSlowdownComponent1.RefreshMovementSpeedModifiers();
|
||||
}
|
||||
_lastThirstThreshold = _currentThirstThreshold;
|
||||
_actualDecayRate = _baseDecayRate * 0.6f;
|
||||
@@ -166,6 +163,29 @@ namespace Content.Server.GameObjects.Components.Nutrition
|
||||
}
|
||||
}
|
||||
|
||||
float IMoveSpeedModifier.SprintSpeedModifier
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_currentThirstThreshold == ThirstThreshold.Parched)
|
||||
{
|
||||
return 0.25f;
|
||||
}
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
float IMoveSpeedModifier.WalkSpeedModifier
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_currentThirstThreshold == ThirstThreshold.Parched)
|
||||
{
|
||||
return 0.5f;
|
||||
}
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetThirst()
|
||||
{
|
||||
_currentThirst = ThirstThresholds[ThirstThreshold.Okay];
|
||||
|
||||
Reference in New Issue
Block a user