summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/LoadoutUIHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_v1.0/Decompile/LoadoutUIHelper.cs')
-rw-r--r--Thronefall_v1.0/Decompile/LoadoutUIHelper.cs398
1 files changed, 398 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/LoadoutUIHelper.cs b/Thronefall_v1.0/Decompile/LoadoutUIHelper.cs
new file mode 100644
index 0000000..7eccf08
--- /dev/null
+++ b/Thronefall_v1.0/Decompile/LoadoutUIHelper.cs
@@ -0,0 +1,398 @@
+using System.Collections.Generic;
+using I2.Loc;
+using TMPro;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class LoadoutUIHelper : MonoBehaviour
+{
+ public UIFrame frame;
+
+ public TextMeshProUGUI perksText;
+
+ public TextMeshProUGUI mutatorBonusText;
+
+ public ThronefallUIElement playButton;
+
+ public GridLayoutGroup weaponsParent;
+
+ public GridLayoutGroup perksParent;
+
+ public GridLayoutGroup mutatorsParent;
+
+ public TFUIEquippable equippableButtonPrefab;
+
+ public GameObject fixedLoadoutWarning;
+
+ public Transform questsParent;
+
+ public QuestEntry questEntryPrefab;
+
+ private List<TFUIEquippable> weapons = new List<TFUIEquippable>();
+
+ private List<TFUIEquippable> perks = new List<TFUIEquippable>();
+
+ private List<TFUIEquippable> mutators = new List<TFUIEquippable>();
+
+ private List<TFUIEquippable> equippedWeapons = new List<TFUIEquippable>();
+
+ private List<TFUIEquippable> equippedPerks = new List<TFUIEquippable>();
+
+ private List<TFUIEquippable> equippedMutators = new List<TFUIEquippable>();
+
+ private readonly int numberOfWeaponsAllowedToEquip = 1;
+
+ private readonly int numberOfMutatiomsAllowedToEquip = 1000;
+
+ private int numberOfPerksAllowedToEquip;
+
+ private LevelData levelData;
+
+ public void OnShow()
+ {
+ levelData = LevelProgressManager.instance.GetLevelDataForScene(LevelInteractor.lastActivatedLevelInteractor.sceneName);
+ weapons.Clear();
+ perks.Clear();
+ mutators.Clear();
+ equippedWeapons.Clear();
+ equippedPerks.Clear();
+ equippedMutators.Clear();
+ foreach (Transform item in weaponsParent.transform)
+ {
+ Object.Destroy(item.gameObject);
+ }
+ foreach (Transform item2 in perksParent.transform)
+ {
+ Object.Destroy(item2.gameObject);
+ }
+ foreach (Transform item3 in mutatorsParent.transform)
+ {
+ Object.Destroy(item3.gameObject);
+ }
+ fixedLoadoutWarning.SetActive(LevelInteractor.lastActivatedLevelInteractor.HasFixedLoadout);
+ numberOfPerksAllowedToEquip = 0;
+ foreach (Equippable unlockedEquippable in PerkManager.instance.UnlockedEquippables)
+ {
+ if (unlockedEquippable is PerkPoint)
+ {
+ numberOfPerksAllowedToEquip++;
+ }
+ else if (unlockedEquippable is EquippableWeapon)
+ {
+ AddTFUIEquippable(weaponsParent, unlockedEquippable);
+ }
+ else if (unlockedEquippable is EquippablePerk)
+ {
+ AddTFUIEquippable(perksParent, unlockedEquippable);
+ }
+ else if (unlockedEquippable is EquippableMutation)
+ {
+ AddTFUIEquippable(mutatorsParent, unlockedEquippable);
+ }
+ }
+ foreach (MetaLevel metaLevel in PerkManager.instance.MetaLevels)
+ {
+ Equippable reward = metaLevel.reward;
+ if (!PerkManager.instance.UnlockedEquippables.Contains(reward))
+ {
+ if (reward is EquippableWeapon)
+ {
+ AddTFUIEquippable(weaponsParent, reward);
+ }
+ else if (reward is EquippablePerk)
+ {
+ AddTFUIEquippable(perksParent, reward);
+ }
+ else if (reward is EquippableMutation)
+ {
+ AddTFUIEquippable(mutatorsParent, reward);
+ }
+ }
+ }
+ RecomputeNavigation();
+ RewriteQuestTexts();
+ UpdatePerksText();
+ UpdateMutatorBonusText();
+ }
+
+ private void AddTFUIEquippable(GridLayoutGroup parent, Equippable e)
+ {
+ TFUIEquippable component = Object.Instantiate(equippableButtonPrefab, parent.transform).GetComponent<TFUIEquippable>();
+ component.SetData(e);
+ if (PerkManager.IsEquipped(e))
+ {
+ if (LevelInteractor.lastActivatedLevelInteractor.HasFixedLoadout && !LevelInteractor.lastActivatedLevelInteractor.fixedLoadout.Contains(e))
+ {
+ PerkManager.SetEquipped(e, _equipped: false);
+ }
+ else
+ {
+ component.Pick();
+ if (e is EquippableWeapon)
+ {
+ equippedWeapons.Add(component);
+ }
+ if (e is EquippablePerk)
+ {
+ equippedPerks.Add(component);
+ }
+ if (e is EquippableMutation)
+ {
+ equippedMutators.Add(component);
+ }
+ }
+ }
+ else if (LevelInteractor.lastActivatedLevelInteractor.HasFixedLoadout && LevelInteractor.lastActivatedLevelInteractor.fixedLoadout.Contains(e))
+ {
+ PerkManager.SetEquipped(e, _equipped: true);
+ component.Pick();
+ if (e is EquippableWeapon)
+ {
+ equippedWeapons.Add(component);
+ }
+ if (e is EquippablePerk)
+ {
+ equippedPerks.Add(component);
+ }
+ if (e is EquippableMutation)
+ {
+ equippedMutators.Add(component);
+ }
+ }
+ if (parent == weaponsParent)
+ {
+ weapons.Add(component);
+ }
+ else if (parent == perksParent)
+ {
+ perks.Add(component);
+ }
+ else if (parent == mutatorsParent)
+ {
+ mutators.Add(component);
+ }
+ }
+
+ public void TrySelectEquippableForLoadout()
+ {
+ TFUIEquippable tFUIEquippable = frame.LastApplied as TFUIEquippable;
+ if (tFUIEquippable == null || tFUIEquippable.Locked || LevelInteractor.lastActivatedLevelInteractor.HasFixedLoadout)
+ {
+ return;
+ }
+ if (tFUIEquippable.Data is EquippableWeapon)
+ {
+ for (int num = equippedWeapons.Count - 1; num >= 0; num--)
+ {
+ PerkManager.SetEquipped(equippedWeapons[num].Data, _equipped: false);
+ equippedWeapons[num].UnPick();
+ equippedWeapons.Remove(equippedWeapons[num]);
+ }
+ tFUIEquippable.Pick();
+ PerkManager.SetEquipped(tFUIEquippable.Data, _equipped: true);
+ equippedWeapons.Add(tFUIEquippable);
+ }
+ if (tFUIEquippable.Data is EquippablePerk)
+ {
+ List<TFUIEquippable> list = new List<TFUIEquippable>();
+ int num2 = 0;
+ for (int num3 = equippedPerks.Count - 1; num3 >= 0; num3--)
+ {
+ if (equippedPerks[num3] != tFUIEquippable)
+ {
+ num2++;
+ }
+ if (num2 >= numberOfPerksAllowedToEquip)
+ {
+ list.Add(equippedPerks[num3]);
+ }
+ }
+ foreach (TFUIEquippable item in list)
+ {
+ PerkManager.SetEquipped(item.Data, _equipped: false);
+ item.UnPick();
+ equippedPerks.Remove(item);
+ }
+ if (equippedPerks.Contains(tFUIEquippable))
+ {
+ tFUIEquippable.UnPick();
+ PerkManager.SetEquipped(tFUIEquippable.Data, _equipped: false);
+ equippedPerks.Remove(tFUIEquippable);
+ }
+ else
+ {
+ tFUIEquippable.Pick();
+ PerkManager.SetEquipped(tFUIEquippable.Data, _equipped: true);
+ equippedPerks.Add(tFUIEquippable);
+ }
+ }
+ if (tFUIEquippable.Data is EquippableMutation)
+ {
+ if (equippedMutators.Contains(tFUIEquippable))
+ {
+ tFUIEquippable.UnPick();
+ PerkManager.SetEquipped(tFUIEquippable.Data, _equipped: false);
+ equippedMutators.Remove(tFUIEquippable);
+ }
+ else
+ {
+ tFUIEquippable.Pick();
+ PerkManager.SetEquipped(tFUIEquippable.Data, _equipped: true);
+ equippedMutators.Add(tFUIEquippable);
+ }
+ }
+ UpdatePerksText();
+ UpdateMutatorBonusText();
+ }
+
+ private void RecomputeNavigation()
+ {
+ int constraintCount = weaponsParent.constraintCount;
+ AssignNavigationTargets(weapons, playButton, null, null, perks, constraintCount);
+ AssignNavigationTargets(perks, null, weapons, null, mutators, constraintCount);
+ AssignNavigationTargets(mutators, null, perks, playButton, null, constraintCount);
+ playButton.topNav = mutators[mutators.Count - 1];
+ playButton.leftNav = mutators[mutators.Count - 1];
+ playButton.botNav = weapons[0];
+ playButton.rightNav = weapons[0];
+ GetComponent<UIFrame>().firstSelected = weapons[0];
+ }
+
+ private void RewriteQuestTexts()
+ {
+ for (int num = questsParent.childCount - 1; num >= 0; num--)
+ {
+ Object.Destroy(questsParent.GetChild(num).gameObject);
+ }
+ int num2 = 0;
+ foreach (Quest quest in LevelInteractor.lastActivatedLevelInteractor.Quests)
+ {
+ Object.Instantiate(questEntryPrefab, questsParent).Init(quest, num2, quest.CheckBeaten(levelData));
+ num2++;
+ }
+ }
+
+ private void UpdatePerksText()
+ {
+ if (LevelInteractor.lastActivatedLevelInteractor.HasFixedLoadout)
+ {
+ perksText.text = LocalizationManager.GetTranslation("Menu/Perks");
+ return;
+ }
+ perksText.text = LocalizationManager.GetTranslation("Menu/Perks") + " (" + equippedPerks.Count + "/" + numberOfPerksAllowedToEquip + ")";
+ }
+
+ private void UpdateMutatorBonusText()
+ {
+ if (equippedMutators.Count > 0)
+ {
+ mutatorBonusText.gameObject.SetActive(value: true);
+ float num = 1f;
+ foreach (TFUIEquippable equippedMutator in equippedMutators)
+ {
+ EquippableMutation equippableMutation = equippedMutator.Data as EquippableMutation;
+ if (!(equippableMutation == null))
+ {
+ num *= equippableMutation.scoreMultiplyerOnWin;
+ }
+ }
+ num -= 1f;
+ mutatorBonusText.text = LocalizationManager.GetTermTranslation("Menu/Mutator Bonus Preview") + ": <style=Body Bold>+" + (num * 100f).ToString("F0") + "%";
+ }
+ else
+ {
+ mutatorBonusText.gameObject.SetActive(value: false);
+ }
+ }
+
+ private void AssignNavigationTargets(List<TFUIEquippable> targetElements, ThronefallUIElement aboveElement, List<TFUIEquippable> aboveList, ThronefallUIElement belowElement, List<TFUIEquippable> belowList, int maxColumns)
+ {
+ for (int i = 0; i < targetElements.Count; i++)
+ {
+ TFUIEquippable tFUIEquippable = targetElements[i];
+ int num = i - 1;
+ int num2 = i + 1;
+ int num3 = i + maxColumns;
+ int num4 = i - maxColumns;
+ if (num < 0)
+ {
+ if (aboveElement != null)
+ {
+ tFUIEquippable.leftNav = aboveElement;
+ }
+ else
+ {
+ tFUIEquippable.leftNav = aboveList[aboveList.Count - 1];
+ }
+ }
+ else
+ {
+ tFUIEquippable.leftNav = targetElements[num];
+ }
+ if (num2 >= targetElements.Count)
+ {
+ if (belowElement != null)
+ {
+ tFUIEquippable.rightNav = belowElement;
+ }
+ else
+ {
+ tFUIEquippable.rightNav = belowList[0];
+ }
+ }
+ else
+ {
+ tFUIEquippable.rightNav = targetElements[num2];
+ }
+ if (num3 >= targetElements.Count)
+ {
+ if (targetElements.Count - i > targetElements.Count % maxColumns)
+ {
+ tFUIEquippable.botNav = targetElements[targetElements.Count - 1];
+ }
+ else if (belowElement != null)
+ {
+ tFUIEquippable.botNav = belowElement;
+ }
+ else
+ {
+ int num5 = i % maxColumns;
+ if (belowList.Count < num5)
+ {
+ tFUIEquippable.botNav = belowList[belowList.Count - 1];
+ }
+ else
+ {
+ tFUIEquippable.botNav = belowList[num5];
+ }
+ }
+ }
+ else
+ {
+ tFUIEquippable.botNav = targetElements[num3];
+ }
+ if (num4 < 0)
+ {
+ if (aboveElement != null)
+ {
+ tFUIEquippable.topNav = aboveElement;
+ continue;
+ }
+ int num6 = i % maxColumns;
+ int num7 = aboveList.Count % maxColumns;
+ if (num6 > num7)
+ {
+ tFUIEquippable.topNav = aboveList[aboveList.Count - 1];
+ continue;
+ }
+ int value = aboveList.Count - num7 + num6;
+ value = Mathf.Clamp(value, 0, aboveList.Count - 1);
+ tFUIEquippable.topNav = aboveList[value];
+ }
+ else
+ {
+ tFUIEquippable.topNav = targetElements[num4];
+ }
+ }
+ }
+}