UI/HQ/Elements/CampaignStatsReadout.razor
@using Sandbox.UI;
@using System;
@inherits Panel
@namespace PlanetMeat
<root>
@{
<div class="game-title">
<span>#game.by.title</span>
</div>
<div class="game-by">
<span>#game.by.alxl</span>
</div>
<div></div>
var ctx = Career.Current.CareerStats;
<div class="category">
@{
var (myAllDmg, globalAllDmg) = GetDamageText(ctx, "all");
<span class="title key">#stats.dmg.all</span>
<span class="value">@myAllDmg</span>
<span class="value">@globalAllDmg</span>
}
@foreach (var tool in Catalogue.Current.BlameTools)
{
var (myDmg, globalDmg) = GetDamageText(ctx, "by_" + tool);
if (myDmg != "" && globalDmg != "")
{
<span class="key">#tool.@(tool).title</span>
<span class="value">@myDmg</span>
<span class="value">@globalDmg</span>
}
}
</div>
@foreach (var (header, headerStat, statPrefix, statIter, getDisplayName) in Categories)
{
var (myHeadStat, globalHeadStat) = GetGenericText(ctx, headerStat);
<div class="category">
<span class="title key">#stats.@header</span>
<span class="value">@myHeadStat</span>
<span class="value">@globalHeadStat</span>
@foreach (var stat in statIter)
{
var (myStat, globalStat) = GetGenericText(ctx, statPrefix + stat);
if (myStat != "" && globalStat != "")
{
<span class="key">#@(getDisplayName.Invoke(stat))</span>
<span class="value">@myStat</span>
<span class="value">@globalStat</span>
}
}
</div>
}
<div class="category">
@{
var (myBank, globalBank) = GetDamageText(ctx, "meat_banked");
<span class="title key">#stats.meat.banked</span>
<span class="value">@myBank</span>
<span class="value">@globalBank</span>
var (myLosses, globalLosses) = GetDamageText(ctx, "meat_lost");
<span class="key">#stats.meat.lost</span>
<span class="value">@myLosses</span>
<span class="value">@globalLosses</span>
var (myWins, globalWins) = GetDamageText(ctx, "runs_banked");
<span class="key">#stats.runs.banked</span>
<span class="value">@myWins</span>
<span class="value">@globalWins</span>
var (myRounds, globalRounds) = GetDamageText(ctx, "round");
<span class="key">#stats.rounds.passed</span>
<span class="value">@myRounds</span>
<span class="value">@globalRounds</span>
}
</div>
<div class="category">
@{
var (mySpent, globalSpent) = GetDamageText(ctx, "meat_spent");
<span class="title key">#stats.meat.spent</span>
<span class="value">@mySpent</span>
<span class="value">@globalSpent</span>
var (myImps, globalImps) = GetDamageText(ctx, "improvements");
<span class="key">#stats.improvements.bought</span>
<span class="value">@myImps</span>
<span class="value">@globalImps</span>
var (myTechs, globalTechs) = GetDamageText(ctx, "tech");
<span class="key">#stats.tech.researched</span>
<span class="value">@myTechs</span>
<span class="value">@globalTechs</span>
}
</div>
<div></div>
<div></div>
<div class="hint">
<span>#stats.hint</span>
</div>
}
</root>
@code
{
private IEnumerable<(string, string, string, IEnumerable<string>, Func<string, string>)> Categories => field ??= [
("kill_weps.all", "wep_kills", "kills_by_", Catalogue.Current.BlameTools, (t) => "tool." + t + ".title"),
("kill_types.all", "kills_all", "kills_", Agenda.Current.AllVariantIdents, EnemyVariant.GetDisplayName),
("runs.lost", "runs_lost", "defeated_by_", Agenda.Current.AllVariantIdents, EnemyVariant.GetDisplayName),
];
private static string GetDamageString(double dmg, double overkill) => LargeNumberString.ToCompact(dmg - overkill) + " · " + LargeNumberString.ToCompact(overkill);
private (string, string) GetDamageText(StatContext ctx, string scope)
{
var dmgIdent = "damage_" + scope;
var overkillIdent = "overkill_" + scope;
var myDmg = ctx.GetNow(dmgIdent);
var myOverkill = ctx.GetNow(overkillIdent);
var worldDmg = Career.GetGlobalStat(dmgIdent);
var worldOverkill = Career.GetGlobalStat(overkillIdent);
return (GetDamageString(myDmg, myOverkill), "(" + GetDamageString(worldDmg, worldOverkill) + ")");
}
private (string, string) GetGenericText(StatContext ctx, string ident)
{
var me = ctx.GetNow(ident);
var world = Career.GetGlobalStat(ident);
return (LargeNumberString.ToCompact(me), "(" + LargeNumberString.ToCompact(world) + ")");
}
protected override int BuildHash() => HashCode.Combine(
HqNavigator.View
);
}