using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class MainMenu_ContextMenu : MonoBehaviour { [SerializeField] private bool MenuOpen; [SerializeField] private bool AllowInput; [SerializeField] private bool WaitingUntilZUnpressed; [SerializeField] private Animator ContextMenuAnimator; [SerializeField] private MainMenu_SectionManager PreviousSection; [SerializeField] private TRIG_LEVELTRANSITION LevelTransition; [SerializeField] private TextMeshProUGUI ContextText; [SerializeField] private TextMeshProUGUI ContextTitleText; [SerializeField] private TextMeshProUGUI ControlsText; [SerializeField] private List ContextGoals = new List(); [SerializeField] private GameObject InputControlText; [SerializeField] private Image ContextIcon; [SerializeField] private AudioSource ContextSource; [SerializeField] private AudioClip Sound_Confirm; [SerializeField] private AudioClip Sound_Return; [SerializeField] private ChatboxSimpleText GonerText; [SerializeField] private CHATBOXTEXT ChatboxText; [SerializeField] private bool RanText; private Hypothesis CurrentHypothesis; public void OpenContextMenu(Hypothesis Hypothesis, MainMenu_SectionManager thisSection) { if (Hypothesis != null && thisSection != null) { CurrentHypothesis = Hypothesis; PreviousSection = thisSection; MenuOpen = true; if (Input.GetKey(KeyCode.Z) || Input.GetKey(KeyCode.Return)) { WaitingUntilZUnpressed = true; } else { StartCoroutine(OpenMenuInputDebounce()); } if (ChatboxText != null && GonerText != null && !RanText) { RanText = true; GonerText.RunText(ChatboxText, 0); } InputControlText.SetActive(value: true); ContextText.text = CurrentHypothesis.HypothesisDescription; ContextTitleText.text = CurrentHypothesis.HypothesisName; ContextIcon.sprite = CurrentHypothesis.HypothesisMenuSprite; SetupCurrentHypothesisGoals(); ControlsText.text = ""; ContextMenuAnimator.Play("ContextMenu_FadeIn"); } else { Debug.LogWarning("Hypothesis or thisSection is null?"); Debug.LogWarning(Hypothesis); Debug.LogWarning(thisSection); MenuOpen = false; } } public void CloseContextMenu() { MenuOpen = false; RanText = false; ContextMenuAnimator.Play("ContextMenu_FadeOut"); PreviousSection.SelectionState = 1; } public void CloseContextMenu_PreventPreviousStateUpdate() { MenuOpen = false; RanText = false; ContextMenuAnimator.Play("ContextMenu_Hidden"); } private void Update() { if ((Input.GetKeyDown(KeyCode.X) || Input.GetKeyDown(KeyCode.RightShift)) && MenuOpen && AllowInput) { StartCoroutine(CloseContextDebounce()); ContextSource.PlayOneShot(Sound_Return); } if ((Input.GetKeyDown(KeyCode.Z) || Input.GetKeyDown(KeyCode.Return)) && MenuOpen && AllowInput && !WaitingUntilZUnpressed) { AllowInput = false; InputControlText.SetActive(value: false); LevelTransition.LevelToGo = CurrentHypothesis.HypothesisStartingScene; LevelTransition.BeginTransition(2f); MusicManager.StopSong(Fade: true, 1f); ContextSource.PlayOneShot(Sound_Confirm); } if (Input.GetKeyUp(KeyCode.Z) || Input.GetKeyUp(KeyCode.Return)) { WaitingUntilZUnpressed = false; } if (Input.GetKeyDown(KeyCode.Delete) && MenuOpen && AllowInput) { PlayerPrefs.SetInt("HypothesisGoal_" + CurrentHypothesis.HypothesisGoals[1].GoalPlayprefName, 0); } } private IEnumerator CloseContextDebounce() { yield return new WaitForSeconds(0.05f); CloseContextMenu(); } private IEnumerator OpenMenuInputDebounce() { yield return new WaitForSeconds(0.05f); AllowInput = true; } private void SetupCurrentHypothesisGoals() { for (int i = 0; i < ContextGoals.Count; i++) { if (i < CurrentHypothesis.HypothesisGoals.Length) { EditGoalValues(i, CurrentHypothesis.HypothesisGoals[i]); } else { ClearGoalValue(i); } } } private void EditGoalValues(int index, HypothesisGoal Goal) { GameObject gameObject = ContextGoals[index]; GameObject gameObject2 = null; GameObject gameObject3 = null; for (int i = 0; i < gameObject.transform.childCount; i++) { if (gameObject.transform.GetChild(i).name == "GoalHint") { gameObject2 = gameObject.transform.GetChild(i).gameObject; } if (gameObject.transform.GetChild(i).name == "GoalProgress") { gameObject3 = gameObject.transform.GetChild(i).gameObject; } } TextMeshProUGUI component = gameObject2.GetComponent(); TextMeshProUGUI component2 = gameObject3.GetComponent(); component.text = Goal.GoalHint; int @int = PlayerPrefs.GetInt("HypothesisGoal_" + Goal.GoalPlayprefName, 0); if (@int >= Goal.RequiredTasks) { component.color = Color.green; component2.color = Color.green; } else { component.color = Color.white; component2.color = Color.white; } if (Goal.RequiredTasks > 1) { component2.text = @int + "/" + Goal.RequiredTasks; } else if (@int == 0) { component2.text = "( )"; } else { component2.text = "(X)"; } } private void ClearGoalValue(int index) { GameObject gameObject = ContextGoals[index]; GameObject gameObject2 = null; GameObject gameObject3 = null; for (int i = 0; i < gameObject.transform.childCount; i++) { if (gameObject.transform.GetChild(i).name == "GoalHint") { gameObject2 = gameObject.transform.GetChild(i).gameObject; } if (gameObject.transform.GetChild(i).name == "GoalProgress") { gameObject3 = gameObject.transform.GetChild(i).gameObject; } } TextMeshProUGUI component = gameObject2.GetComponent(); TextMeshProUGUI component2 = gameObject3.GetComponent(); component.text = ""; component2.text = ""; } }