r2mods/ilspy_dump/ror2_csproj/RoR2.UI.LogBook/PageBuilder.cs

529 lines
25 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Numerics;
using System.Text;
using HG;
using RoR2.Stats;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace RoR2.UI.LogBook;
public class PageBuilder
{
private static readonly StringBuilder sharedStringBuilder = new StringBuilder();
public UserProfile userProfile;
public RectTransform container;
public Entry entry;
public readonly List<GameObject> managedObjects = new List<GameObject>();
private StatSheet statSheet => userProfile.statSheet;
public void Destroy()
{
foreach (GameObject managedObject in managedObjects)
{
UnityEngine.Object.Destroy(managedObject);
}
}
public void AddSimpleTextPanel(string text)
{
AddPrefabInstance(LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/Logbook/SimpleTextPanel")).GetComponent<ChildLocator>().FindChild("MainLabel").GetComponent<TextMeshProUGUI>()
.text = text;
}
public GameObject AddPrefabInstance(GameObject prefab)
{
GameObject gameObject = UnityEngine.Object.Instantiate(prefab, container);
managedObjects.Add(gameObject);
return gameObject;
}
public void AddSimpleTextPanel(params string[] textLines)
{
AddSimpleTextPanel(string.Join("\n", textLines));
}
public void AddSimplePickup(PickupIndex pickupIndex)
{
PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
ItemIndex itemIndex = pickupDef?.itemIndex ?? ItemIndex.None;
EquipmentIndex equipmentIndex = pickupDef?.equipmentIndex ?? EquipmentIndex.None;
string token = null;
if (itemIndex != ItemIndex.None)
{
ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
AddDescriptionPanel(Language.GetString(itemDef.descriptionToken));
token = itemDef.loreToken;
ulong statValueULong = statSheet.GetStatValueULong(PerItemStatDef.totalCollected.FindStatDef(itemIndex));
ulong statValueULong2 = statSheet.GetStatValueULong(PerItemStatDef.highestCollected.FindStatDef(itemIndex));
string stringFormatted = Language.GetStringFormatted("GENERIC_PREFIX_FOUND", statValueULong);
string stringFormatted2 = Language.GetStringFormatted("ITEM_PREFIX_STACKCOUNT", statValueULong2);
AddSimpleTextPanel(stringFormatted, stringFormatted2);
}
else if (equipmentIndex != EquipmentIndex.None)
{
EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(equipmentIndex);
AddDescriptionPanel(Language.GetString(equipmentDef.descriptionToken));
token = equipmentDef.loreToken;
string stringFormatted3 = Language.GetStringFormatted("EQUIPMENT_PREFIX_COOLDOWN", equipmentDef.cooldown);
string stringFormatted4 = Language.GetStringFormatted("EQUIPMENT_PREFIX_TOTALTIMEHELD", statSheet.GetStatDisplayValue(PerEquipmentStatDef.totalTimeHeld.FindStatDef(equipmentIndex)));
string stringFormatted5 = Language.GetStringFormatted("EQUIPMENT_PREFIX_USECOUNT", statSheet.GetStatDisplayValue(PerEquipmentStatDef.totalTimesFired.FindStatDef(equipmentIndex)));
AddSimpleTextPanel(stringFormatted3);
AddSimpleTextPanel(stringFormatted4, stringFormatted5);
}
AddNotesPanel(Language.IsTokenInvalid(token) ? Language.GetString("EARLY_ACCESS_LORE") : Language.GetString(token));
}
public void AddDescriptionPanel(string content)
{
AddSimpleTextPanel(Language.GetStringFormatted("DESCRIPTION_PREFIX_FORMAT", content));
}
public void AddNotesPanel(string content)
{
AddSimpleTextPanel(Language.GetStringFormatted("NOTES_PREFIX_FORMAT", content));
}
public void AddBodyStatsPanel(CharacterBody bodyPrefabComponent)
{
float baseMaxHealth = bodyPrefabComponent.baseMaxHealth;
float levelMaxHealth = bodyPrefabComponent.levelMaxHealth;
float baseDamage = bodyPrefabComponent.baseDamage;
float levelDamage = bodyPrefabComponent.levelDamage;
float baseArmor = bodyPrefabComponent.baseArmor;
float baseRegen = bodyPrefabComponent.baseRegen;
float levelRegen = bodyPrefabComponent.levelRegen;
float baseMoveSpeed = bodyPrefabComponent.baseMoveSpeed;
AddSimpleTextPanel(Language.GetStringFormatted("BODY_HEALTH_FORMAT", Language.GetStringFormatted("BODY_STATS_FORMAT", baseMaxHealth.ToString(), levelMaxHealth.ToString())) + "\n" + Language.GetStringFormatted("BODY_DAMAGE_FORMAT", Language.GetStringFormatted("BODY_STATS_FORMAT", baseDamage.ToString(), levelDamage.ToString())) + "\n" + ((baseRegen >= Mathf.Epsilon) ? (Language.GetStringFormatted("BODY_REGEN_FORMAT", Language.GetStringFormatted("BODY_STATS_FORMAT", baseRegen.ToString(), levelRegen.ToString())) + "\n") : "") + Language.GetStringFormatted("BODY_MOVESPEED_FORMAT", baseMoveSpeed) + "\n" + Language.GetStringFormatted("BODY_ARMOR_FORMAT", baseArmor.ToString()));
}
public void AddMonsterPanel(CharacterBody bodyPrefabComponent)
{
ulong statValueULong = statSheet.GetStatValueULong(PerBodyStatDef.killsAgainst, bodyPrefabComponent.gameObject.name);
ulong statValueULong2 = statSheet.GetStatValueULong(PerBodyStatDef.killsAgainstElite, bodyPrefabComponent.gameObject.name);
ulong statValueULong3 = statSheet.GetStatValueULong(PerBodyStatDef.deathsFrom, bodyPrefabComponent.gameObject.name);
string stringFormatted = Language.GetStringFormatted("MONSTER_PREFIX_KILLED", statValueULong);
string stringFormatted2 = Language.GetStringFormatted("MONSTER_PREFIX_ELITESKILLED", statValueULong2);
string stringFormatted3 = Language.GetStringFormatted("MONSTER_PREFIX_DEATH", statValueULong3);
AddSimpleTextPanel(stringFormatted, stringFormatted2, stringFormatted3);
}
public void AddSurvivorPanel(CharacterBody bodyPrefabComponent)
{
string statDisplayValue = statSheet.GetStatDisplayValue(PerBodyStatDef.longestRun.FindStatDef(bodyPrefabComponent.name));
ulong statValueULong = statSheet.GetStatValueULong(PerBodyStatDef.timesPicked.FindStatDef(bodyPrefabComponent.name));
ulong statValueULong2 = statSheet.GetStatValueULong(StatDef.totalGamesPlayed);
double num = 0.0;
if (statValueULong2 != 0L)
{
num = (double)statValueULong / (double)statValueULong2 * 100.0;
}
sharedStringBuilder.Clear();
sharedStringBuilder.AppendLine(Language.GetStringFormatted("SURVIVOR_PREFIX_LONGESTRUN", statDisplayValue));
sharedStringBuilder.AppendLine(Language.GetStringFormatted("SURVIVOR_PREFIX_TIMESPICKED", statValueULong));
sharedStringBuilder.AppendLine(Language.GetStringFormatted("SURVIVOR_PREFIX_PICKPERCENTAGE", num));
AddSimpleTextPanel(sharedStringBuilder.ToString());
}
public void AddSimpleBody(CharacterBody bodyPrefabComponent)
{
AddBodyStatsPanel(bodyPrefabComponent);
}
public void AddBodyLore(CharacterBody characterBody)
{
bool flag = false;
string token = "";
string baseNameToken = characterBody.baseNameToken;
if (!string.IsNullOrEmpty(baseNameToken))
{
token = baseNameToken.Replace("_NAME", "_LORE");
if (!Language.IsTokenInvalid(token))
{
flag = true;
}
}
if (flag)
{
AddNotesPanel(Language.GetString(token));
}
else
{
AddNotesPanel(Language.GetString("EARLY_ACCESS_LORE"));
}
}
public void AddStagePanel(SceneDef sceneDef)
{
string statDisplayValue = userProfile.statSheet.GetStatDisplayValue(PerStageStatDef.totalTimesVisited.FindStatDef(sceneDef.baseSceneName));
string statDisplayValue2 = userProfile.statSheet.GetStatDisplayValue(PerStageStatDef.totalTimesCleared.FindStatDef(sceneDef.baseSceneName));
string stringFormatted = Language.GetStringFormatted("STAGE_PREFIX_TOTALTIMESVISITED", statDisplayValue);
string stringFormatted2 = Language.GetStringFormatted("STAGE_PREFIX_TOTALTIMESCLEARED", statDisplayValue2);
sharedStringBuilder.Clear();
sharedStringBuilder.Append(stringFormatted);
sharedStringBuilder.Append("\n");
sharedStringBuilder.Append(stringFormatted2);
AddSimpleTextPanel(sharedStringBuilder.ToString());
}
public void AddPieChart(PieChartMeshController.SliceInfo[] sliceInfos)
{
GameObject gameObject = UnityEngine.Object.Instantiate(LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/PieChartPanel"), container);
gameObject.GetComponent<PieChartMeshController>().SetSlices(sliceInfos);
managedObjects.Add(gameObject);
}
public static void Stage(PageBuilder builder)
{
SceneDef sceneDef = (SceneDef)builder.entry.extraData;
builder.AddStagePanel(sceneDef);
builder.AddNotesPanel(Language.IsTokenInvalid(sceneDef.loreToken) ? Language.GetString("EARLY_ACCESS_LORE") : Language.GetString(sceneDef.loreToken));
}
public static void SimplePickup(PageBuilder builder)
{
builder.AddSimplePickup((PickupIndex)builder.entry.extraData);
}
public static void SimpleBody(PageBuilder builder)
{
builder.AddSimpleBody((CharacterBody)builder.entry.extraData);
}
public static void MonsterBody(PageBuilder builder)
{
CharacterBody characterBody = (CharacterBody)builder.entry.extraData;
builder.AddSimpleBody(characterBody);
builder.AddMonsterPanel(characterBody);
builder.AddBodyLore(characterBody);
}
public static void SurvivorBody(PageBuilder builder)
{
CharacterBody characterBody = (CharacterBody)builder.entry.extraData;
builder.AddSimpleBody(characterBody);
builder.AddSurvivorPanel(characterBody);
builder.AddBodyLore(characterBody);
}
public static void StatsPanel(PageBuilder builder)
{
UserProfile userProfile = (UserProfile)builder.entry.extraData;
GameCompletionStatsHelper gameCompletionStatsHelper = new GameCompletionStatsHelper();
StatSheet statSheet = userProfile.statSheet;
CalcAllBodyStatTotalDouble(PerBodyStatDef.totalTimeAlive);
_ = (double)CalcAllBodyStatTotalULong(PerBodyStatDef.timesPicked);
double value = (double)CalcAllBodyStatTotalULong(PerBodyStatDef.totalWins);
_ = (double)CalcAllBodyStatTotalULong(PerBodyStatDef.deathsAs);
ChildLocator component = builder.AddPrefabInstance(LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/Logbook/ProfileStatsPanel")).GetComponent<ChildLocator>();
RectTransform rectTransform = (RectTransform)component.FindChild("CharacterPieChart");
RectTransform rectTransform2 = (RectTransform)component.FindChild("CompletionBarPanel");
RectTransform rectTransform3 = (RectTransform)component.FindChild("CompletionLabel");
RectTransform rectTransform4 = (RectTransform)component.FindChild("CharacterStatsCarousel");
RectTransform rectTransform5 = (RectTransform)component.FindChild("TotalsStatsList");
RectTransform rectTransform6 = (RectTransform)component.FindChild("RecordsStatsList");
RectTransform rectTransform7 = (RectTransform)component.FindChild("MiscStatsList");
RectTransform rectTransform8 = (RectTransform)component.FindChild("CompletionStatsList");
PieChartMeshController characterPieChartMeshController = rectTransform.GetComponent<PieChartMeshController>();
CarouselNavigationController carousel = rectTransform4.GetComponent<CarouselNavigationController>();
List<string> statNames = new List<string>();
List<Action> callbacks = new List<Action>();
AddPerBodyStat(PerBodyStatDef.totalWins);
AddPerBodyStat(PerBodyStatDef.timesPicked);
AddPerBodyStat(PerBodyStatDef.totalTimeAlive);
AddPerBodyStat(PerBodyStatDef.longestRun);
AddPerBodyStat(PerBodyStatDef.deathsAs);
AddPerBodyStat(PerBodyStatDef.damageDealtAs);
AddPerBodyStat(PerBodyStatDef.damageTakenAs);
AddPerBodyStat(PerBodyStatDef.damageDealtTo);
AddPerBodyStat(PerBodyStatDef.damageTakenFrom);
AddPerBodyStat(PerBodyStatDef.killsAgainst);
AddPerBodyStat(PerBodyStatDef.killsAgainstElite);
AddPerBodyStat(PerBodyStatDef.deathsFrom);
AddPerBodyStat(PerBodyStatDef.minionDamageDealtAs);
AddPerBodyStat(PerBodyStatDef.minionKillsAs);
AddPerBodyStat(PerBodyStatDef.killsAs);
carousel.onPageChangeSubmitted += OnPageChangeSubmitted;
carousel.SetDisplayData(new CarouselNavigationController.DisplayData(statNames.Count, 0));
OnPageChangeSubmitted(0);
GameObject statStripPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/Logbook/LogbookStatStrip");
StatDef statDef2 = PerBodyStatDef.longestRun.FindStatDef(statSheet.FindBodyWithHighestStat(PerBodyStatDef.longestRun)) ?? PerBodyStatDef.longestRun.FindStatDef(BodyCatalog.FindBodyIndex("CommandoBody"));
CharacterBody bodyPrefabBodyComponent = BodyCatalog.GetBodyPrefabBodyComponent(statSheet.FindBodyWithHighestStat(PerBodyStatDef.deathsFrom));
EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(statSheet.FindEquipmentWithHighestStat(PerEquipmentStatDef.totalTimeHeld));
(string, string, Texture)[] array = new(string, string, Texture)[20];
(string, string, Texture2D) tuple = StatStripDataFromStatDef(StatDef.totalGamesPlayed);
array[0] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalTimeAlive);
array[1] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalDeaths);
array[2] = (tuple.Item1, tuple.Item2, tuple.Item3);
array[3] = (Language.GetString("STATNAME_TOTALWINS"), TextSerialization.ToStringNumeric(value), null);
tuple = StatStripDataFromStatDef(StatDef.totalKills);
array[4] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalEliteKills);
array[5] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalDamageDealt);
array[6] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalStagesCompleted);
array[7] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalDamageTaken);
array[8] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalHealthHealed);
array[9] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.goldCollected);
array[10] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalDistanceTraveled);
array[11] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalPurchases);
array[12] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalBloodPurchases);
array[13] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalDronesPurchased);
array[14] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalTurretsPurchased);
array[15] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalCrocoInfectionsInflicted);
array[16] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalMinionDamageDealt);
array[17] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalMinionKills);
array[18] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.totalDeathsWhileBurning);
array[19] = (tuple.Item1, tuple.Item2, tuple.Item3);
SetStats(rectTransform5, array);
(string, string, Texture)[] obj = new(string, string, Texture)[6]
{
(Language.GetString("STATNAME_LONGESTRUN"), statSheet.GetStatDisplayValue(statDef2), null),
default((string, string, Texture)),
default((string, string, Texture)),
default((string, string, Texture)),
default((string, string, Texture)),
default((string, string, Texture))
};
tuple = StatStripDataFromStatDef(StatDef.highestStagesCompleted);
obj[1] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.highestLevel);
obj[2] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.highestDamageDealt);
obj[3] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.maxGoldCollected);
obj[4] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromStatDef(StatDef.highestPurchases);
obj[5] = (tuple.Item1, tuple.Item2, tuple.Item3);
SetStats(rectTransform6, obj);
SetStats(rectTransform7, new(string, string, Texture)[2]
{
(Language.GetString("STATNAME_NEMESIS"), bodyPrefabBodyComponent ? Language.GetString(bodyPrefabBodyComponent.baseNameToken) : string.Empty, bodyPrefabBodyComponent ? bodyPrefabBodyComponent.portraitIcon : null),
(Language.GetString("STATNAME_FAVORITEEQUIPMENT"), (equipmentDef != null) ? Language.GetString(equipmentDef.nameToken) : string.Empty, equipmentDef?.pickupIconTexture)
});
(string, string, Texture)[] array2 = new(string, string, Texture)[5];
tuple = StatStripDataFromCompletionFraction("STATNAME_COMPLETION_ACHIEVEMENTS", gameCompletionStatsHelper.GetAchievementCompletion(userProfile));
array2[0] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromCompletionFraction("STATNAME_COMPLETION_COLLECTIBLES", gameCompletionStatsHelper.GetCollectibleCompletion(userProfile));
array2[1] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromCompletionFraction("STATNAME_COMPLETION_PICKUPDISCOVERY", gameCompletionStatsHelper.GetPickupEncounterCompletion(userProfile));
array2[2] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromCompletionFraction("STATNAME_COMPLETION_SURVIVORSPICKED", gameCompletionStatsHelper.GetSurvivorPickCompletion(userProfile));
array2[3] = (tuple.Item1, tuple.Item2, tuple.Item3);
tuple = StatStripDataFromCompletionFraction("STATNAME_COMPLETION_SURVIVORSWON", gameCompletionStatsHelper.GetSurvivorWinCompletion(userProfile));
array2[4] = (tuple.Item1, tuple.Item2, tuple.Item3);
SetStats(rectTransform8, array2);
IntFraction value2 = gameCompletionStatsHelper.GetTotalCompletion(userProfile);
float num = (float)value2;
UnityEngine.Vector2 anchorMax = rectTransform2.anchorMax;
anchorMax.x = num;
rectTransform2.anchorMax = anchorMax;
rectTransform3.GetComponent<TMP_Text>().SetText($"{num:0%}");
void AddLine(StatDef statDef, string statNameToken, double? allBodyTotal)
{
string @string = Language.GetString("STAT_NAME_VALUE_FORMAT");
string statDisplayValue = statSheet.GetStatDisplayValue(statDef);
P_3.bodyTextStringBuilder.AppendFormat(@string, Language.GetString(statNameToken), statDisplayValue);
if (allBodyTotal.HasValue)
{
double statValueAsDouble = statSheet.GetStatValueAsDouble(statDef);
double num2 = 0.0;
if (allBodyTotal != 0.0)
{
num2 = statValueAsDouble / allBodyTotal.Value;
}
P_3.bodyTextStringBuilder.Append(" ").AppendFormat(P_3.rateFormat, num2);
}
P_3.bodyTextStringBuilder.AppendLine();
}
void AddLineFromPerBodyStat(PerBodyStatDef perBodyStatDef, double? total)
{
if (!total.HasValue)
{
total = CalcAllBodyStatTotalDouble(perBodyStatDef);
}
StatDef statDef3 = perBodyStatDef.FindStatDef(P_2.bodyIndex);
AddLine(statDef3, perBodyStatDef.nameToken, total);
}
void AddPerBodyStat(PerBodyStatDef perBodyStatDef)
{
statNames.Add(Language.GetString(perBodyStatDef.nameToken));
callbacks.Add(Callback);
void Callback()
{
BuildCharacterPieChart(characterPieChartMeshController, (BodyIndex bodyIndex) => GetStatWeight(perBodyStatDef.FindStatDef(bodyIndex)));
}
}
TooltipContent BuildBodyTooltipContent(BodyIndex bodyIndex, Color bodyColor)
{
CharacterBody bodyPrefabBodyComponent2 = BodyCatalog.GetBodyPrefabBodyComponent(bodyIndex);
StringBuilder bodyTextStringBuilder = HG.StringBuilderPool.RentStringBuilder();
string rateFormat = Language.GetString("PERCENT_FORMAT_PARENTHESES");
AddLineFromPerBodyStat(PerBodyStatDef.timesPicked, null);
AddLineFromPerBodyStat(PerBodyStatDef.totalTimeAlive, null);
AddLineFromPerBodyStat(PerBodyStatDef.longestRun, null);
AddLineFromPerBodyStat(PerBodyStatDef.totalWins, null);
AddLineFromPerBodyStat(PerBodyStatDef.deathsAs, null);
AddLineFromPerBodyStat(PerBodyStatDef.damageDealtAs, null);
AddLineFromPerBodyStat(PerBodyStatDef.damageTakenAs, null);
AddLineFromPerBodyStat(PerBodyStatDef.damageDealtTo, null);
AddLineFromPerBodyStat(PerBodyStatDef.damageTakenFrom, null);
AddLineFromPerBodyStat(PerBodyStatDef.killsAgainst, null);
AddLineFromPerBodyStat(PerBodyStatDef.killsAgainstElite, null);
AddLineFromPerBodyStat(PerBodyStatDef.deathsFrom, null);
AddLineFromPerBodyStat(PerBodyStatDef.minionDamageDealtAs, null);
AddLineFromPerBodyStat(PerBodyStatDef.minionKillsAs, null);
AddLineFromPerBodyStat(PerBodyStatDef.killsAs, null);
TooltipContent tooltipContent = default(TooltipContent);
tooltipContent.titleToken = bodyPrefabBodyComponent2.baseNameToken;
tooltipContent.titleColor = bodyColor;
tooltipContent.overrideBodyText = bodyTextStringBuilder.ToString();
TooltipContent result3 = tooltipContent;
HG.StringBuilderPool.ReturnStringBuilder(bodyTextStringBuilder);
return result3;
}
void BuildCharacterPieChart(PieChartMeshController pieChartMeshController, Func<BodyIndex, float> bodyWeightGetter)
{
List<PieChartMeshController.SliceInfo> list = new List<PieChartMeshController.SliceInfo>();
for (BodyIndex bodyIndex2 = (BodyIndex)0; (int)bodyIndex2 < BodyCatalog.bodyCount; bodyIndex2++)
{
float num4 = bodyWeightGetter(bodyIndex2);
if (num4 != 0f)
{
PieChartMeshController.SliceInfo item4 = default(PieChartMeshController.SliceInfo);
item4.color = GetBodyColor(bodyIndex2);
item4.weight = num4;
item4.tooltipContent = BuildBodyTooltipContent(bodyIndex2, item4.color);
list.Add(item4);
}
}
pieChartMeshController.SetSlices(list.OrderBy((PieChartMeshController.SliceInfo slice) => 0f - slice.weight).ToArray());
}
double CalcAllBodyStatTotalDouble(PerBodyStatDef perBodyStatDef)
{
double num5 = 0.0;
for (BodyIndex bodyIndex4 = (BodyIndex)0; (int)bodyIndex4 < BodyCatalog.bodyCount; bodyIndex4++)
{
num5 += statSheet.GetStatValueAsDouble(perBodyStatDef.FindStatDef(bodyIndex4));
}
return num5;
}
BigInteger CalcAllBodyStatTotalULong(PerBodyStatDef perBodyStatDef)
{
BigInteger result4 = 0;
for (BodyIndex bodyIndex3 = (BodyIndex)0; (int)bodyIndex3 < BodyCatalog.bodyCount; bodyIndex3++)
{
result4 += (BigInteger)statSheet.GetStatValueULong(perBodyStatDef.FindStatDef(bodyIndex3));
}
return result4;
}
static Color GetBodyColor(BodyIndex bodyIndex)
{
CharacterBody bodyPrefabBodyComponent3 = BodyCatalog.GetBodyPrefabBodyComponent(bodyIndex);
if (bodyPrefabBodyComponent3.bodyColor != Color.clear)
{
return bodyPrefabBodyComponent3.bodyColor;
}
string bodyName = BodyCatalog.GetBodyName(bodyIndex);
ulong num3 = 0uL;
for (int j = 0; j < bodyName.Length; j++)
{
num3 += bodyName[j];
}
Xoroshiro128Plus xoroshiro128Plus = new Xoroshiro128Plus(num3);
return Color.HSVToRGB(xoroshiro128Plus.nextNormalizedFloat, xoroshiro128Plus.RangeFloat(0.5f, 1f), xoroshiro128Plus.RangeFloat(0.6f, 0.8f));
}
float GetStatWeight(StatDef statDef)
{
return statDef.dataType switch
{
StatDataType.ULong => statSheet.GetStatValueULong(statDef),
StatDataType.Double => (float)statSheet.GetStatValueDouble(statDef),
_ => throw new ArgumentOutOfRangeException(),
};
}
void OnPageChangeSubmitted(int newPage)
{
callbacks[newPage]();
carousel.GetComponent<ChildLocator>().FindChild("StatLabel").GetComponent<HGTextMeshProUGUI>()
.text = statNames[newPage];
}
void SetStats(RectTransform container, (string name, string value, Texture texture)[] data)
{
UIElementAllocator<ChildLocator> uIElementAllocator = new UIElementAllocator<ChildLocator>(container, statStripPrefab, markElementsUnsavable: true, acquireExistingChildren: true);
uIElementAllocator.AllocateElements(data.Length);
ReadOnlyCollection<ChildLocator> elements = uIElementAllocator.elements;
for (int i = 0; i < data.Length; i++)
{
(string name, string value, Texture texture) tuple2 = data[i];
string item = tuple2.name;
string item2 = tuple2.value;
Texture item3 = tuple2.texture;
ChildLocator childLocator = elements[i];
childLocator.FindChild("NameLabel").GetComponent<TMP_Text>().SetText(item);
childLocator.FindChild("ValueLabel").GetComponent<TMP_Text>().SetText("<color=#FFFF7F>" + item2 + "</color>");
RawImage component2 = childLocator.FindChild("IconRawImage").GetComponent<RawImage>();
component2.transform.parent.gameObject.SetActive(item3);
component2.texture = item3;
}
}
static (string name, string value, Texture2D texture) StatStripDataFromCompletionFraction(string displayToken, IntFraction completionFraction)
{
(string, string, Texture2D) result = default((string, string, Texture2D));
result.Item1 = Language.GetString(displayToken);
result.Item2 = Language.GetStringFormatted("STAT_COMPLETION_VALUE_FORMAT", completionFraction.numerator, completionFraction.denominator, (float)completionFraction);
result.Item3 = null;
return result;
}
(string name, string value, Texture2D texture) StatStripDataFromStatDef(StatDef statDef)
{
(string, string, Texture2D) result2 = default((string, string, Texture2D));
result2.Item1 = Language.GetString(statDef.displayToken);
result2.Item2 = statSheet.GetStatDisplayValue(statDef);
result2.Item3 = null;
return result2;
}
}
public void AddRunReportPanel(RunReport runReport)
{
GameObject gameObject = UnityEngine.Object.Instantiate(LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/GameEndReportPanelScrolling"), container);
gameObject.GetComponent<GameEndReportPanelController>().SetDisplayData(new GameEndReportPanelController.DisplayData
{
runReport = runReport,
playerIndex = 0
});
gameObject.GetComponent<MPEventSystemProvider>().fallBackToMainEventSystem = true;
managedObjects.Add(gameObject);
}
public static void RunReportPanel(PageBuilder builder)
{
builder.AddRunReportPanel((RunReport)builder.entry.extraData);
}
}