DRHPS/code-csharp/en_US/MainMenu_ContextMenu.cs
2025-04-08 11:31:35 +08:00

236 lines
7.2 KiB
C#

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<GameObject> ContextGoals = new List<GameObject>();
[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>();
TextMeshProUGUI component2 = gameObject3.GetComponent<TextMeshProUGUI>();
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>();
TextMeshProUGUI component2 = gameObject3.GetComponent<TextMeshProUGUI>();
component.text = "";
component2.text = "";
}
}