diff --git a/Content.Client/Shuttles/UI/RadarControl.cs b/Content.Client/Shuttles/UI/RadarControl.cs
index 2e82ce3c60..fd846746c0 100644
--- a/Content.Client/Shuttles/UI/RadarControl.cs
+++ b/Content.Client/Shuttles/UI/RadarControl.cs
@@ -6,6 +6,7 @@ using Robust.Client.UserInterface.Controls;
using Robust.Shared.Map;
using Robust.Shared.Physics;
using Robust.Shared.Physics.Collision.Shapes;
+using Robust.Shared.Timing;
using Robust.Shared.Utility;
namespace Content.Client.Shuttles.UI;
@@ -16,6 +17,7 @@ namespace Content.Client.Shuttles.UI;
public sealed class RadarControl : Control
{
[Dependency] private readonly IEntityManager _entManager = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
private const float ScrollSensitivity = 8f;
@@ -35,6 +37,11 @@ public sealed class RadarControl : Control
private float _radarMaxRange = 256f;
public float RadarRange { get; private set; } = 256f;
+ ///
+ /// We'll lerp between the radarrange and actual range
+ ///
+ private float _actualRadarRange = 256f;
+
///
/// Controls the maximum distance that IFF labels will display.
///
@@ -80,8 +87,7 @@ public sealed class RadarControl : Control
if (_radarMaxRange < RadarRange)
{
- RadarRange = _radarMaxRange;
- OnRadarRangeChanged?.Invoke(RadarRange);
+ _actualRadarRange = _radarMaxRange;
}
if (_radarMaxRange < _radarMinRange)
@@ -100,21 +106,25 @@ public sealed class RadarControl : Control
protected override void MouseWheel(GUIMouseWheelEventArgs args)
{
base.MouseWheel(args);
- AddRadarRange(-args.Delta.Y * ScrollSensitivity);
+ AddRadarRange(-args.Delta.Y * 1f / ScrollSensitivity * RadarRange);
}
public void AddRadarRange(float value)
{
- var oldValue = RadarRange;
- RadarRange = MathF.Max(0f, MathF.Max(_radarMinRange, MathF.Min(RadarRange + value, _radarMaxRange)));
-
- if (oldValue.Equals(RadarRange)) return;
-
- OnRadarRangeChanged?.Invoke(RadarRange);
+ _actualRadarRange = Math.Clamp(_actualRadarRange + value, _radarMinRange, _radarMaxRange);
}
protected override void Draw(DrawingHandleScreen handle)
{
+ if (!_actualRadarRange.Equals(RadarRange))
+ {
+ var diff = _actualRadarRange - RadarRange;
+ var lerpRate = 10f;
+
+ RadarRange += (float) Math.Clamp(diff, -lerpRate * MathF.Abs(diff) * _timing.FrameTime.TotalSeconds, lerpRate * MathF.Abs(diff) * _timing.FrameTime.TotalSeconds);
+ OnRadarRangeChanged?.Invoke(RadarRange);
+ }
+
var fakeAA = new Color(0.08f, 0.08f, 0.08f);
handle.DrawCircle((MidPoint, MidPoint), ScaledMinimapRadius + 1, fakeAA);