UI/Window/GoalWindow.razor
@using Sandbox
@using Sandbox.UI
@using System
@namespace HC3.UI
@inherits Window
<root class="column">
<tabview>
@foreach ( var manager in GoalGroups.OrderByDescending( x => x.IsActiveManager ) )
{
<tab ShowTitle=@true Icon="@manager.Icon" title="@manager.Title">
<label class="subtitle">@manager.Description</label>
<div class="goal-list">
@foreach (var goal in manager.GetGoals())
{
<div class="goal window-container @(goal.IsUnlocked() ? "complete" : "")">
<row>
<label class="goal-name">@goal.GoalName</label>
<div class="grow" />
<label class="goal-amount">@GetStatText(goal)</label>
</row>
@if (!string.IsNullOrEmpty(goal.GoalDescription))
{
<label class="goal-description">@goal.GoalDescription</label>
}
<div class="bar">
<div class="progress" style="@($"width: {GetStatPercent(goal)}")"></div>
</div>
@if ( !string.IsNullOrEmpty( goal.GoalReward ) )
{
<label class="goal-reward subtitle">@goal.GoalReward</label>
}
</div>
}
</div>
</tab>
}
</tabview>
</root>
@code
{
public override string Title => "Goals";
public override object Key => "GoalWindow";
public override string Icon => "award_star_gold_1";
public IEnumerable<GoalGroup> GoalGroups => Scene.GetAll<GoalGroup>();
public GoalGroup Active => GoalGroups.FirstOrDefault( x => x.IsActiveManager );
string GetStatPercent( Goal goal )
{
if (goal == null || goal.StatNeededToComplete <= 0)
return "0%";
float percent = MathF.Min(goal.GetStat() / goal.StatNeededToComplete, 1.0f) * 100.0f;
return $"{percent}%";
}
string GetStatText(Goal goal)
{
return $"{Math.Min(goal.GetStat(), goal.StatNeededToComplete)} / {goal.StatNeededToComplete}";
}
static GoalWindow goalWindow;
public static void Show()
{
if ( goalWindow.IsValid() )
{
WindowManager.Instance.Open( goalWindow );
return;
}
goalWindow = new GoalWindow();
WindowManager.Instance.Open( goalWindow );
goalWindow.SetPosition( ScreenAlignment.Center );
}
public static bool IsOpen => goalWindow.IsValid();
protected override int BuildHash() => System.HashCode.Combine(Time.Now);
}