summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/PerkSelectionGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_v1.0/Decompile/PerkSelectionGroup.cs')
-rw-r--r--Thronefall_v1.0/Decompile/PerkSelectionGroup.cs165
1 files changed, 165 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/PerkSelectionGroup.cs b/Thronefall_v1.0/Decompile/PerkSelectionGroup.cs
new file mode 100644
index 0000000..06d1131
--- /dev/null
+++ b/Thronefall_v1.0/Decompile/PerkSelectionGroup.cs
@@ -0,0 +1,165 @@
+using System.Collections.Generic;
+using TMPro;
+using UnityEngine;
+
+public class PerkSelectionGroup : MonoBehaviour
+{
+ private enum Type
+ {
+ Weapons,
+ Perks,
+ Mutations,
+ FixedLoadout
+ }
+
+ public GameObject perkSelectionItemPrefab;
+
+ public GameObject perkLockedPrefab;
+
+ [SerializeField]
+ private Type type;
+
+ private PerkManager perkManager;
+
+ private int selectableAmount = 10000;
+
+ private List<PerkSelectionItem> selectedInMyGroup = new List<PerkSelectionItem>();
+
+ [SerializeField]
+ private TMP_Text headerText;
+
+ [SerializeField]
+ private string selectNone = "No perks unlocked yet.";
+
+ [SerializeField]
+ private string selectOne = "Select one perk.";
+
+ [SerializeField]
+ private string selectMulti = "Select <n> perks.";
+
+ [SerializeField]
+ private bool canDeselectPerks = true;
+
+ [SerializeField]
+ private Color textColorNormal = Color.white;
+
+ [SerializeField]
+ private Color textColorWarning = Color.red;
+
+ private int unlockedPerks;
+
+ private void Start()
+ {
+ UpdateVisuals();
+ }
+
+ public void UpdateVisuals()
+ {
+ perkManager = PerkManager.instance;
+ int num = 0;
+ for (int num2 = base.transform.childCount - 1; num2 >= 0; num2--)
+ {
+ Object.Destroy(base.transform.GetChild(num2).gameObject);
+ }
+ unlockedPerks = 0;
+ for (int i = 0; i < perkManager.UnlockedEquippables.Count; i++)
+ {
+ Equippable equippable = perkManager.UnlockedEquippables[i];
+ if (equippable.GetType() == typeof(PerkPoint))
+ {
+ num++;
+ }
+ if ((type == Type.Weapons && equippable.GetType() == typeof(EquippableWeapon)) || (type == Type.Perks && equippable.GetType() == typeof(EquippablePerk)) || (type == Type.Mutations && equippable.GetType() == typeof(EquippableMutation)))
+ {
+ Object.Instantiate(perkSelectionItemPrefab, base.transform).GetComponent<PerkSelectionItem>().Initialize(equippable);
+ unlockedPerks++;
+ }
+ }
+ for (int j = 0; j < perkManager.MetaLevels.Count; j++)
+ {
+ Equippable reward = perkManager.MetaLevels[j].reward;
+ if (((type == Type.Weapons && reward.GetType() == typeof(EquippableWeapon)) || (type == Type.Perks && reward.GetType() == typeof(EquippablePerk)) || (type == Type.Mutations && reward.GetType() == typeof(EquippableMutation))) && !perkManager.UnlockedEquippables.Contains(reward))
+ {
+ Object.Instantiate(perkLockedPrefab, base.transform);
+ }
+ }
+ if (type == Type.FixedLoadout && LevelInteractor.lastActivatedLevelInteractor != null)
+ {
+ selectableAmount = 0;
+ LevelInteractor lastActivatedLevelInteractor = LevelInteractor.lastActivatedLevelInteractor;
+ for (int k = 0; k < lastActivatedLevelInteractor.fixedLoadout.Count; k++)
+ {
+ Equippable equippable2 = lastActivatedLevelInteractor.fixedLoadout[k];
+ PerkSelectionItem component = Object.Instantiate(perkSelectionItemPrefab, base.transform).GetComponent<PerkSelectionItem>();
+ component.Selected = true;
+ component.Initialize(equippable2);
+ selectableAmount++;
+ }
+ }
+ if (type == Type.Weapons)
+ {
+ selectableAmount = 1;
+ }
+ if (type == Type.Perks)
+ {
+ selectableAmount = num;
+ }
+ if (type == Type.Mutations)
+ {
+ selectableAmount = 10000;
+ }
+ if (selectableAmount <= 0 || unlockedPerks <= 0)
+ {
+ headerText.text = selectNone;
+ }
+ else if (selectableAmount == 1)
+ {
+ headerText.text = selectOne;
+ }
+ else
+ {
+ headerText.text = selectMulti.Replace("<n>", selectableAmount.ToString());
+ }
+ }
+
+ private void Update()
+ {
+ if (selectedInMyGroup.Count < Mathf.Min(unlockedPerks, selectableAmount))
+ {
+ headerText.color = textColorWarning;
+ }
+ else
+ {
+ headerText.color = textColorNormal;
+ }
+ }
+
+ public void SelectPerk(PerkSelectionItem _selectedPerk)
+ {
+ if (!canDeselectPerks && _selectedPerk.Selected)
+ {
+ return;
+ }
+ _selectedPerk.Selected = !_selectedPerk.Selected;
+ if (_selectedPerk.Selected)
+ {
+ selectedInMyGroup.Add(_selectedPerk);
+ if (!perkManager.CurrentlyEquipped.Contains(_selectedPerk.Equippable))
+ {
+ perkManager.CurrentlyEquipped.Add(_selectedPerk.Equippable);
+ }
+ if (selectedInMyGroup.Count > selectableAmount)
+ {
+ PerkSelectionItem perkSelectionItem = selectedInMyGroup[0];
+ perkSelectionItem.Selected = false;
+ selectedInMyGroup.Remove(perkSelectionItem);
+ perkManager.CurrentlyEquipped.Remove(perkSelectionItem.Equippable);
+ }
+ }
+ else
+ {
+ selectedInMyGroup.Remove(_selectedPerk);
+ perkManager.CurrentlyEquipped.Remove(_selectedPerk.Equippable);
+ }
+ }
+}