diff options
Diffstat (limited to 'Thronefall_1_57/Decompile/Thronefall/LevelInteractor.cs')
| -rw-r--r-- | Thronefall_1_57/Decompile/Thronefall/LevelInteractor.cs | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/Thronefall/LevelInteractor.cs b/Thronefall_1_57/Decompile/Thronefall/LevelInteractor.cs new file mode 100644 index 0000000..69a0d9c --- /dev/null +++ b/Thronefall_1_57/Decompile/Thronefall/LevelInteractor.cs @@ -0,0 +1,231 @@ +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; + +public class LevelInteractor : InteractorBase +{ + public static LevelInfo lastActiveLevelInfo; + + private LevelSelectManager levelSelectManager; + + private LevelProgressManager levelProgressManager; + + private LevelData myLevelData; + + [Header("Setup")] + [SerializeField] + private string tooltipThisLevelMustBeBeaten = "Beat <lvlname> to unlock this level."; + + [SerializeField] + private GameObject focusPanel; + + [SerializeField] + private GameObject cantBePlayedPanel; + + [SerializeField] + private TextMeshProUGUI cantBePlayedCue; + + [SerializeField] + private GameObject lockedLevelVisuals; + + [SerializeField] + private GameObject unlockedLevelVisuals; + + [SerializeField] + private GameObject beatenLevelVisuals; + + [SerializeField] + private Transform rewardBuildingsParent; + + [SerializeField] + private TMP_Text questsComplete; + + [SerializeField] + private TextMeshProUGUI challengeName; + + [Header("Colors")] + [SerializeField] + private Color allQuestComplete; + + [SerializeField] + private Color notAllQuestComplete; + + [Header("Level Info")] + public LevelInfo levelInfo; + + public List<Quest> Quests => levelInfo.quests; + + public bool CanBePlayed + { + get + { + if (levelInfo.unlockRequirement != null && !levelInfo.unlockRequirement.Beaten) + { + return false; + } + return true; + } + } + + public string CanNotBePlayedReason + { + get + { + if ((bool)levelInfo.unlockRequirement && !levelInfo.unlockRequirement.Beaten) + { + return tooltipThisLevelMustBeBeaten.Replace("<lvlname>", levelInfo.unlockRequirement.displayName); + } + return ""; + } + } + + public void UpdateVisualsOnStart() + { + if (myLevelData == null) + { + levelProgressManager = LevelProgressManager.instance; + myLevelData = levelProgressManager.GetLevelDataForScene(levelInfo.sceneName); + } + lockedLevelVisuals.SetActive(value: false); + unlockedLevelVisuals.SetActive(value: false); + beatenLevelVisuals.SetActive(value: false); + questsComplete.transform.parent.gameObject.SetActive(value: false); + questsComplete.text = QuestsBeatenString(); + int num = levelInfo.QuestsComplete(); + if (num == levelInfo.QuestsTotal()) + { + AchievementManager.LevelAllQuestsComplete(levelInfo.sceneName); + } + if (myLevelData.beatenBest) + { + AchievementManager.LevelBeaten(levelInfo.sceneName); + } + questsComplete.color = ((num >= levelInfo.QuestsTotal()) ? allQuestComplete : notAllQuestComplete); + float num2 = (float)num / (float)levelInfo.QuestsTotal(); + int enabledBuildings = Mathf.FloorToInt((float)rewardBuildingsParent.childCount * (float)myLevelData.questsCompleteWhenLastVisitingMap); + int num3 = Mathf.FloorToInt((float)rewardBuildingsParent.childCount * num2); + myLevelData.questsCompleteWhenLastVisitingMap = num3; + StartCoroutine(EnableBuildingsCoroutine(enabledBuildings, num3, 0.75f, 0.5f)); + if (challengeName != null) + { + challengeName.text = levelInfo.displaySubtitle; + } + if (!CanBePlayed) + { + lockedLevelVisuals.SetActive(value: true); + return; + } + questsComplete.transform.parent.gameObject.SetActive(value: true); + if (!levelInfo.Beaten) + { + unlockedLevelVisuals.SetActive(value: true); + } + else + { + beatenLevelVisuals.SetActive(value: true); + } + } + + private IEnumerator EnableBuildingsCoroutine(int _enabledBuildings, int _enabledBuildingsUpTo, float _initialDelay, float _interval) + { + if (rewardBuildingsParent.childCount < _enabledBuildingsUpTo) + { + Debug.LogWarning("Not enough children in the rewardBuildingsParent to satisfy enabledBuildingsUpTo"); + yield break; + } + if (rewardBuildingsParent.childCount < _enabledBuildings) + { + Debug.LogWarning("Not enough children in the rewardBuildingsParent to satisfy enabledBuildings"); + yield break; + } + for (int j = 0; j < rewardBuildingsParent.childCount; j++) + { + rewardBuildingsParent.GetChild(j).gameObject.SetActive(value: false); + } + for (int k = 0; k < _enabledBuildings; k++) + { + rewardBuildingsParent.GetChild(k).gameObject.SetActive(value: true); + } + yield return new WaitForSeconds(_initialDelay); + for (int i = _enabledBuildings; i < _enabledBuildingsUpTo; i++) + { + rewardBuildingsParent.GetChild(i).gameObject.SetActive(value: true); + rewardBuildingsParent.GetChild(i).GetChild(0).gameObject.SetActive(value: true); + yield return new WaitForSeconds(_interval); + } + } + + private void Start() + { + levelSelectManager = GetComponentInParent<LevelSelectManager>(); + levelProgressManager = LevelProgressManager.instance; + myLevelData = levelProgressManager.GetLevelDataForScene(levelInfo.sceneName); + focusPanel.SetActive(value: false); + cantBePlayedPanel.SetActive(value: false); + UpdateVisualsOnStart(); + } + + public override string ReturnTooltip() + { + if (CanBePlayed) + { + return TextTranslator.Translate("Menu/Level Interactor Cue"); + } + return ""; + } + + private string GenerateCueText() + { + if (!CanBePlayed) + { + return CanNotBePlayedReason; + } + if (levelSelectManager.PreLevelMenuIsOpen) + { + return ""; + } + return levelInfo.displayName; + } + + public override void InteractionBegin(PlayerInteraction _player) + { + if (CanBePlayed) + { + lastActiveLevelInfo = levelInfo; + UIFrameManager.TryOpenLevelSelect(); + } + } + + public override void Focus(PlayerInteraction _player) + { + if (CanBePlayed) + { + focusPanel.SetActive(value: true); + cantBePlayedPanel.SetActive(value: false); + if (challengeName != null) + { + challengeName.text = levelInfo.displaySubtitle; + } + return; + } + cantBePlayedCue.text = GenerateCueText(); + cantBePlayedPanel.SetActive(value: true); + focusPanel.SetActive(value: false); + if (challengeName != null) + { + challengeName.text = levelInfo.displaySubtitle; + } + } + + public override void Unfocus(PlayerInteraction _player) + { + focusPanel.SetActive(value: false); + cantBePlayedPanel.SetActive(value: false); + } + + public string QuestsBeatenString() + { + return levelInfo.QuestsComplete() + "/" + levelInfo.QuestsTotal(); + } +} |
