UI/HQ/Elements/HQShop.razor
@using Sandbox.UI;
@inherits Panel
@namespace PlanetMeat
<root>
@if (Tab != "")
{
<div class="inventory pm-body">
<span class="tab-title noshrink pm-title">#toolbox.@(Tab).title</span>
@if (Tab == "research")
{
<div class="items">
@if (Research.Current.HasTech("research_speed"))
{
<div class="item">
<div class="info grow">
<span>#improvement.@(ImproveResearch.Ident).title</span>
<span>@(ImproveResearch.DisplayedCurrentEffect) -> @(ImproveResearch.DisplayedNextEffect)</span>
</div>
<button class="btn-buy click-active" onclick=@(() => ImproveResearch.TryPurchase())>
<CurrencyDisplay Mode="cost" AccountId="meat" Amount=@(ImproveResearch.NextCost)>
</CurrencyDisplay>
</button>
</div>
}
<div class="scroll-v pm-inset techlist">
@foreach (var tech in AvailableTechs)
{
var completed = tech.Completed;
var researching = tech == ResearchTarget;
<div onclick=@(() => SelectTech(tech))
class="item tech @(completed ? "item-disabled" : "") @(researching ? "researching" : "")">
<div class="info grow">
<span>#@(tech.DisplayName)</span>
@if (completed)
{
<span>#tech.duration.complete</span>
}
else
{
if (researching)
{
var remaining = Research.Current.ResearchRoundsRemaining;
<div class="research-time">
<span>@remaining</span>
<span>#tech.duration.until@(remaining != 1 ? "_pl" : "")</span>
</div>
}
else
{
<div class="research-time">
<span>@(tech.Progress)</span>
<span>/</span>
<span>@(tech.Duration)</span>
</div>
}
}
</div>
</div>
}
</div>
</div>
}
else if (Tab == "improve")
{
<div class="items">
<UpgradeShop Currency="meat"></UpgradeShop>
</div>
}
</div>
}
</root>
@code
{
private string Tab
{
get => Catalogue.Current.CurrentTab;
set => Catalogue.Current.CurrentTab = value;
}
private BaseTech ResearchTarget
{
get => Research.Current.ResearchTarget;
set => Research.Current.ResearchTarget = value;
}
private ImproveResearch ImproveResearch => Research.Current.ImproveResearch;
private IEnumerable<BaseTech> AvailableTechs => Research.Current.AvailableTechs;
private void SelectTech(BaseTech tech)
{
if (Game.IsEditor && ResearchTarget == tech)
{
tech.AdvanceProgress(1000);
Research.Current.BakeCatalogue();
}
else
{
ResearchTarget = tech;
}
}
protected override int BuildHash() => System.HashCode.Combine(
Tab,
ResearchTarget,
AvailableTechs.HashContents()
);
}