private void OnPlayerDetached(EntityUid uid, SeeingRainbowsComponent component, LocalPlayerDetachedEvent args)
{
_overlay.Intoxication = 0;
+ _overlay.TimeTicker = 0;
_overlayMan.RemoveOverlay(_overlay);
}
if (_player.LocalEntity == uid)
{
_overlay.Intoxication = 0;
+ _overlay.TimeTicker = 0;
_overlayMan.RemoveOverlay(_overlay);
}
}
private readonly ShaderInstance _rainbowShader;
public float Intoxication = 0.0f;
+ public float TimeTicker = 0.0f;
private const float VisualThreshold = 10.0f;
private const float PowerDivisor = 250.0f;
return;
var timeLeft = (float) (time.Value.Item2 - time.Value.Item1).TotalSeconds;
- Intoxication += (timeLeft - Intoxication) * args.DeltaSeconds / 16f;
+
+ TimeTicker += args.DeltaSeconds;
+
+ if (timeLeft - TimeTicker > timeLeft / 16f)
+ {
+ Intoxication += (timeLeft - Intoxication) * args.DeltaSeconds / 16f;
+ }
+ else
+ {
+ Intoxication -= Intoxication/(timeLeft - TimeTicker) * args.DeltaSeconds;
+ }
}
protected override bool BeforeDraw(in OverlayDrawArgs args)