ui/Panels/TimerPanel.razor
@using Sandbox;
@using Sandbox.UI;
@namespace SS1
@inherits Panel
@attribute [StyleSheet("TimerPanel.razor.scss")]
<root>
@{
var manager = Manager.Instance;
var player = manager.Player;
TimeSpan time;
if(manager.IsGameOver)
{
time = manager.HasSpawnedBoss
? TimeSpan.FromSeconds(manager.FinalRunTime)
: TimeSpan.FromSeconds(player.Stats[PlayerStat.BossArrivalTime]) - TimeSpan.FromSeconds(manager.FinalRunTime);
}
else
{
time = manager.HasSpawnedBoss
? TimeSpan.FromSeconds(manager.ElapsedTime.Relative) //TimeSpan.FromSeconds(manager.TimeSinceRunStart.Relative)
: TimeSpan.FromSeconds(player.Stats[PlayerStat.BossArrivalTime]) - TimeSpan.FromSeconds(manager.ElapsedTime.Relative);
}
}
@if(time.TotalMinutes >= 0)
{
<div class="timer_label @(manager.HasSpawnedBoss ? "red" : "white")">
@(time.TotalSeconds > 3600 ? time.ToString(@"hh\:mm\:ss") : time.ToString(@"mm\:ss"))
</div>
}
@{
if(manager.IsGameOver || manager.IsPauseMenuOpen || !manager.Player.IsChoosingLevelUpReward || !(manager.Player.Stats[PlayerStat.PauseWhileChoosing] > 0f))
return;
var runTime = TimeSpan.FromSeconds(manager.TimeSinceRunStart.Relative);
string runTimeStr = runTime.TotalSeconds > 3600 ? runTime.ToString(@"hh\:mm\:ss") : runTime.ToString(@"mm\:ss");
}
<label class="timer">@($"Run Time\n{runTimeStr}")</label>
</root>
@code
{
public Player Player { get; set; }
protected override int BuildHash()
{
var manager = Manager.Instance;
var seconds = MathX.FloorToInt(manager.ElapsedTime.Relative);
var runTime = !manager.IsPauseMenuOpen && !manager.IsGameOver && manager.Player.IsChoosingLevelUpReward && manager.Player.Stats[PlayerStat.PauseWhileChoosing] > 0f
? manager.TimeSinceRunStart.Relative
: 0f;
return HashCode.Combine(
seconds,
runTime,
manager.IsPauseMenuOpen,
manager.Player.IsChoosingLevelUpReward,
manager.Player.Stats[PlayerStat.PauseWhileChoosing],
manager.Player.Stats[PlayerStat.BossArrivalTime],
manager.IsGameOver
);
}
}