ui/TimeBar.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@attribute [StyleSheet("TimeBar.razor.scss")]
<root>
@{
var manager = Manager.Instance;
var totalTime = manager.GetTimerTotalTime();
var remainingTime = MathF.Max(totalTime - manager.TimerElapsed, 0);
string timeText = remainingTime > 0.99f ? MathF.Ceiling(remainingTime).ToString("0") : remainingTime.ToString("0.0");
var timePercent = remainingTime > 0.99f
? Math.Clamp(MathF.Ceiling(remainingTime) / totalTime, 0f, 1f)
: Math.Clamp((totalTime - manager.TimerElapsed) / totalTime, 0f, 1f);
}
<div class="time_bar">
<div class="time_bar_overlay" style="height:@(timePercent * 100f)%; transition: height @(timePercent >= 1f ? 0.05f : Utils.Map(timePercent, 1f, 0f, 1.2f, 0.05f, EasingType.SineIn))s ease-out;"></div>
</div>
<div class="time_bar_border"></div>
<div class="hourglass_icon" style="transform: scale(@(Utils.Map(Manager.Instance.TimeSinceTimerChanged, 0f, 1f, 1.35f, 1f, EasingType.QuadOut)));">
⌛
<div class="time_label">
@($"{timeText}")
</div>
</div>
</root>
@code
{
protected override int BuildHash()
{
return HashCode.Combine(
Time.Now
);
}
}