Files
OldThink/Content.Server/_White/ChangeTemperatureOnCollide/LowTemperatureSlowdownSystem.cs
Aviu00 6272da2bb3 Fixes (#289)
* - fix: Ling fixes.

* - fix: Fix ghasp identity.

* - fix: Low temp slowdown fix.

* - fix: Crossbow fix.

* - fix: Fix gamerules.

* - fix: Fix shadow shackles.

* - fix: Cleanup refund.

* - fix: Can't pry runic door.

* - fix: Fix crash.

* - fix: Fix mood.

* - fix: Fix dictionary.
2024-04-21 18:07:27 +03:00

57 lines
1.9 KiB
C#

using Content.Server.Temperature.Components;
using Content.Server.Temperature.Systems;
using Content.Shared.Changeling;
using Content.Shared.Damage.Components;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Systems;
namespace Content.Server._White.ChangeTemperatureOnCollide;
public sealed class LowTemperatureSlowdownSystem : EntitySystem
{
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifierSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MovementSpeedModifierComponent, OnTemperatureChangeEvent>(OnTemperatureChange);
SubscribeLocalEvent<TemperatureComponent, RefreshMovementSpeedModifiersEvent>(OnMoveSpeedRefresh);
}
private void OnMoveSpeedRefresh(EntityUid uid, TemperatureComponent component,
RefreshMovementSpeedModifiersEvent args)
{
var modifier = HasComp<GodmodeComponent>(uid) || HasComp<VoidAdaptationComponent>(uid) || !component.Slowdown
? 1f
: GetSpeedModifier(component.CurrentTemperature);
args.ModifySpeed(modifier, modifier);
}
private void OnTemperatureChange(EntityUid uid, MovementSpeedModifierComponent component,
OnTemperatureChangeEvent args)
{
// ReSharper disable once CompareOfFloatsByEqualityOperator
if(GetSpeedModifier(args.LastTemperature) == GetSpeedModifier(args.CurrentTemperature))
return;
_movementSpeedModifierSystem.RefreshMovementSpeedModifiers(uid, component);
}
private static float GetSpeedModifier(float temperature)
{
return temperature switch
{
> 290f => 1f,
> 280f => 0.9f,
> 260f => 0.8f,
> 230f => 0.7f,
> 200f => 0.6f,
> 160f => 0.5f,
> 110f => 0.4f,
> 50f => 0.3f,
_ => 0.2f
};
}
}