diff options
Diffstat (limited to 'Thronefall_v1.0/Decompile/LoadoutUIHelper.cs')
-rw-r--r-- | Thronefall_v1.0/Decompile/LoadoutUIHelper.cs | 398 |
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]; + } + } + } +} |