UI/CurrentGoalsPanel.razor
@using Sandbox
@using Sandbox.UI
@using HC3.UI
@using System
@inherits PanelComponent
@namespace HC3
<root class="@(ShouldBeVisible ? "visible" : "")">
<column>
@if ( !Group.IsValid() )
{
return;
}
<row class="header">
<label class="title">Tasks</label>
<div class="icon" />
<label class="subtitle">@Group.Description</label>
</row>
<div class="goal-list">
@foreach ( var goal in Group.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 class="window-button button" onclick=@(() => GoalWindow.Show())>
<span>
<Silkicon Icon="star" />
View all tasks
</span>
</div>
</div>
</column>
</root>
@code
{
public GoalGroup Group => Scene.GetAll<GoalGroup>().FirstOrDefault( x => x.IsActiveManager );
public bool ShouldBeVisible => Group.IsValid() && !GoalWindow.IsOpen;
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}";
}
protected override int BuildHash()
{
if ( GoalWindow.IsOpen ) return -2;
if ( !Group.IsValid() ) return -1;
return System.HashCode.Combine( Time.Now );
}
}