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

487 lines
18 KiB
C#

using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class MainMenu_SectionManager : MonoBehaviour
{
[SerializeField]
private RectTransform[] OptionTransforms;
[SerializeField]
private Vector3[] OriginalOptionTransform;
[SerializeField]
private RectTransform[] UnselectableTransforms;
[SerializeField]
private Vector3[] OriginalUnselectableTransform;
[SerializeField]
private TextMeshProUGUI ControlsText;
[SerializeField]
private string ThisControlText;
[SerializeField]
private float lerpSpeed = 5f;
[Header("Spacing for if SelectionMode is 1")]
[SerializeField]
private float OptionSpacing = 700f;
public int cursorPos;
private int secondarycursorPos;
[Space(10f)]
[SerializeField]
private int SelectionMode;
public int SelectionState = 1;
[SerializeField]
private int SelectionActionIndex;
[Space(10f)]
[SerializeField]
private string HoverAnimationStateName;
[SerializeField]
private string UnHoverAnimationStateName;
[SerializeField]
private string SelectAnimationStateName;
[Space(10f)]
[SerializeField]
private AudioSource SectionSource;
[SerializeField]
private AudioClip SwitchSectionClip;
[SerializeField]
private AudioClip ConfirmSectionClip;
[SerializeField]
private AudioClip DenySectionClip;
[SerializeField]
private AudioClip ReturnSectionClip;
[SerializeField]
private AudioClip EnterSectionClip;
[Space(10f)]
[SerializeField]
private MainMenu_SectionManager[] OtherSections;
[SerializeField]
private MainMenu_SectionManager PreviousSection;
[SerializeField]
private ChatboxSimpleText GonerText;
[SerializeField]
private CHATBOXTEXT ChatboxText;
[SerializeField]
private bool RanText;
[Header("Selection Index 1, Scene Transition")]
[SerializeField]
private int[] TargetSceneName;
[SerializeField]
private TRIG_LEVELTRANSITION transition;
[Space(10f)]
[Header("Selection Mode 1 Specific")]
[SerializeField]
private RectTransform CreditOptionTransform;
[SerializeField]
private Vector3 OriginalCreditOptionTransform;
[SerializeField]
private MainMenu_SectionManager CreditSection;
[Space(10f)]
[Header("Selection Mode 2 Specific")]
[SerializeField]
private Hypothesis[] Hypotheticals;
[SerializeField]
private MainMenu_ContextMenu ContextMenu;
private void Start()
{
for (int i = 0; i < OptionTransforms.Length; i++)
{
OriginalOptionTransform[i] = OptionTransforms[i].localPosition;
OptionTransforms[i].localPosition = OriginalOptionTransform[i] - Vector3.up * 700f;
if (SelectionActionIndex != 1 || !(Hypotheticals[i] != null))
{
continue;
}
Hypothesis hypothesis = Hypotheticals[i];
GameObject gameObject = null;
GameObject gameObject2 = null;
GameObject gameObject3 = null;
for (int j = 0; j < OptionTransforms[i].childCount; j++)
{
if (OptionTransforms[i].GetChild(j).name == "SectionIcon")
{
gameObject = OptionTransforms[i].GetChild(j).gameObject;
}
if (OptionTransforms[i].GetChild(j).name == "SectionName")
{
gameObject2 = OptionTransforms[i].GetChild(j).gameObject;
}
if (OptionTransforms[i].GetChild(j).name == "SectionDescription")
{
gameObject3 = OptionTransforms[i].GetChild(j).gameObject;
}
}
RawImage component = gameObject.GetComponent<RawImage>();
TextMeshProUGUI component2 = gameObject2.GetComponent<TextMeshProUGUI>();
TextMeshProUGUI component3 = gameObject3.GetComponent<TextMeshProUGUI>();
component.texture = hypothesis.HypothesisMenuSprite.texture;
component2.text = hypothesis.HypothesisName;
component3.text = hypothesis.HypothesisDescription;
}
for (int k = 0; k < UnselectableTransforms.Length; k++)
{
OriginalUnselectableTransform[k] = UnselectableTransforms[k].localPosition;
UnselectableTransforms[k].localPosition = OriginalUnselectableTransform[k] - Vector3.up * 700f;
}
if (SelectionMode == 1)
{
OriginalCreditOptionTransform = CreditOptionTransform.localPosition;
CreditOptionTransform.localPosition = OriginalCreditOptionTransform - Vector3.up * 700f;
}
}
private void Update()
{
if (SelectionState == 1)
{
if (ChatboxText != null && GonerText != null && !RanText)
{
RanText = true;
GonerText.RunText(ChatboxText, 0);
SectionSource.PlayOneShot(EnterSectionClip);
}
if (ThisControlText != "" && (bool)ControlsText && ControlsText.text != ThisControlText)
{
ControlsText.text = ThisControlText;
}
if (SelectionMode == 1)
{
ContextMenu.CloseContextMenu_PreventPreviousStateUpdate();
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Right))
{
if (secondarycursorPos == 0 && SelectionMode != 2)
{
cursorPos++;
if (cursorPos >= OptionTransforms.Length)
{
cursorPos = 0;
}
SectionSource.PlayOneShot(SwitchSectionClip);
}
}
else if (Input.GetKeyDown(PlayerInput.Instance.Key_Left) && secondarycursorPos == 0 && SelectionMode != 2)
{
cursorPos--;
if (cursorPos < 0)
{
cursorPos = OptionTransforms.Length - 1;
}
SectionSource.PlayOneShot(SwitchSectionClip);
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Down))
{
if (SelectionMode == 1)
{
secondarycursorPos++;
if (secondarycursorPos >= 2)
{
secondarycursorPos = 0;
}
if (secondarycursorPos < 0)
{
secondarycursorPos = 1;
}
SectionSource.PlayOneShot(SwitchSectionClip);
}
if (SelectionMode == 2)
{
cursorPos++;
if (cursorPos >= OptionTransforms.Length)
{
cursorPos = 0;
}
SectionSource.PlayOneShot(SwitchSectionClip);
}
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Up))
{
if (SelectionMode == 1)
{
secondarycursorPos--;
if (secondarycursorPos >= 2)
{
secondarycursorPos = 0;
}
if (secondarycursorPos < 0)
{
secondarycursorPos = 1;
}
SectionSource.PlayOneShot(SwitchSectionClip);
}
if (SelectionMode == 2)
{
cursorPos--;
if (cursorPos < 0)
{
cursorPos = OptionTransforms.Length - 1;
}
SectionSource.PlayOneShot(SwitchSectionClip);
}
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Confirm))
{
if (SelectionMode != 2)
{
SectionSource.PlayOneShot(ConfirmSectionClip);
SelectionState = 0;
CompareSelectionAction();
}
if (secondarycursorPos == 0)
{
if (SelectionMode != 2 && (bool)OptionTransforms[cursorPos].GetComponent<Animator>())
{
OptionTransforms[cursorPos].GetComponent<Animator>().Play(SelectAnimationStateName);
}
}
else if ((bool)CreditOptionTransform.GetComponent<Animator>())
{
CreditOptionTransform.GetComponent<Animator>().Play(SelectAnimationStateName);
}
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Cancel) && SelectionState == 1)
{
ReturnToPrevious();
}
if (secondarycursorPos == 1 && cursorPos != 1)
{
cursorPos = 1;
}
}
else
{
RanText = false;
}
LerpMenuOptions();
}
private void LerpMenuOptions()
{
if (SelectionState == 1)
{
if (SelectionMode == 0)
{
float num = 0.65f;
float num2 = 1f;
for (int i = 0; i < OptionTransforms.Length; i++)
{
float x = (float)(i - cursorPos) * OptionSpacing;
Vector3 b = new Vector3(x, 0f, 0f);
Vector3 b2 = ((cursorPos == i) ? (Vector3.one * num2) : (Vector3.one * num));
OptionTransforms[i].localScale = Vector3.Lerp(OptionTransforms[i].localScale, b2, lerpSpeed * Time.deltaTime);
OptionTransforms[i].localPosition = Vector3.Lerp(OptionTransforms[i].localPosition, b, lerpSpeed * Time.deltaTime);
if (cursorPos == i)
{
OptionTransforms[i].SetAsLastSibling();
if ((bool)OptionTransforms[i].GetComponent<Animator>())
{
OptionTransforms[i].GetComponent<Animator>().Play(HoverAnimationStateName);
}
}
else
{
OptionTransforms[i].SetAsFirstSibling();
if ((bool)OptionTransforms[i].GetComponent<Animator>())
{
OptionTransforms[i].GetComponent<Animator>().Play(UnHoverAnimationStateName);
}
}
}
}
if (SelectionMode == 1)
{
float num3 = 0.65f;
float num4 = 0.7f;
if (SelectionState == 1)
{
for (int j = 0; j < OptionTransforms.Length; j++)
{
Vector3 one = Vector3.one;
_ = Vector3.one;
if (secondarycursorPos == 0)
{
one = ((cursorPos == j) ? (Vector3.one * num4) : (Vector3.one * num3));
_ = Vector3.one * num4;
}
else
{
one = Vector3.one * num3;
_ = Vector3.one * num4;
}
OptionTransforms[j].localScale = Vector3.Lerp(OptionTransforms[j].localScale, one, lerpSpeed * Time.deltaTime);
CreditOptionTransform.localScale = Vector3.Lerp(CreditOptionTransform.localScale, one, lerpSpeed * Time.deltaTime);
Vector3 b3 = OriginalOptionTransform[j];
Vector3 originalCreditOptionTransform = OriginalCreditOptionTransform;
if (cursorPos == j && secondarycursorPos == 0)
{
OptionTransforms[j].SetAsLastSibling();
if ((bool)OptionTransforms[j].GetComponent<Animator>())
{
OptionTransforms[j].GetComponent<Animator>().Play(HoverAnimationStateName);
}
}
else
{
if ((bool)OptionTransforms[j].GetComponent<Animator>())
{
OptionTransforms[j].GetComponent<Animator>().Play(UnHoverAnimationStateName);
}
OptionTransforms[j].SetAsFirstSibling();
}
if (secondarycursorPos == 0)
{
if ((bool)OptionTransforms[j].GetComponent<Animator>())
{
CreditOptionTransform.GetComponent<Animator>().Play(UnHoverAnimationStateName);
}
}
else if ((bool)OptionTransforms[j].GetComponent<Animator>())
{
CreditOptionTransform.GetComponent<Animator>().Play(HoverAnimationStateName);
}
OptionTransforms[j].localPosition = Vector3.Lerp(OptionTransforms[j].localPosition, b3, lerpSpeed * Time.deltaTime);
CreditOptionTransform.localPosition = Vector3.Lerp(CreditOptionTransform.localPosition, originalCreditOptionTransform, lerpSpeed * Time.deltaTime);
}
}
}
if (SelectionMode == 2)
{
float num5 = 0.65f;
float num6 = 1f;
for (int k = 0; k < UnselectableTransforms.Length; k++)
{
UnselectableTransforms[k].localPosition = Vector3.Lerp(UnselectableTransforms[k].localPosition, OriginalUnselectableTransform[k], lerpSpeed * Time.deltaTime);
}
for (int l = 0; l < OptionTransforms.Length; l++)
{
float y = (float)(l - cursorPos) * OptionSpacing;
Vector3 b4 = new Vector3(-323.05f, y, 0f);
Vector3 b5 = ((cursorPos == l) ? (Vector3.one * num6) : (Vector3.one * num5));
OptionTransforms[l].localScale = Vector3.Lerp(OptionTransforms[l].localScale, b5, lerpSpeed * Time.deltaTime);
OptionTransforms[l].localPosition = Vector3.Lerp(OptionTransforms[l].localPosition, b4, lerpSpeed * Time.deltaTime);
if (cursorPos == l)
{
OptionTransforms[l].SetAsLastSibling();
if ((bool)OptionTransforms[l].GetComponent<Animator>())
{
OptionTransforms[l].GetComponent<Animator>().Play(HoverAnimationStateName);
}
}
else
{
OptionTransforms[l].SetAsFirstSibling();
if ((bool)OptionTransforms[l].GetComponent<Animator>())
{
OptionTransforms[l].GetComponent<Animator>().Play(UnHoverAnimationStateName);
}
}
}
}
}
if (SelectionState == 2)
{
for (int m = 0; m < OptionTransforms.Length; m++)
{
Vector3 b6 = OptionTransforms[m].localPosition - Vector3.up * 960f;
OptionTransforms[m].localPosition = Vector3.Lerp(OptionTransforms[m].localPosition, b6, lerpSpeed * Time.deltaTime / 4f);
}
for (int n = 0; n < UnselectableTransforms.Length; n++)
{
Vector3 b7 = UnselectableTransforms[n].localPosition - Vector3.up * 960f;
UnselectableTransforms[n].localPosition = Vector3.Lerp(UnselectableTransforms[n].localPosition, b7, lerpSpeed * Time.deltaTime);
}
if (SelectionMode == 1)
{
Vector3 b8 = CreditOptionTransform.localPosition - Vector3.up * 960f;
CreditOptionTransform.localPosition = Vector3.Lerp(CreditOptionTransform.localPosition, b8, lerpSpeed * Time.deltaTime / 4f);
}
}
}
private void CompareSelectionAction()
{
switch (SelectionActionIndex)
{
case 0:
if (secondarycursorPos == 0)
{
StartCoroutine(DelayUntilTransition());
}
else
{
StartCoroutine(ShowCredits());
}
break;
case 1:
SelectionState = 2;
ContextMenu.OpenContextMenu(Hypotheticals[cursorPos], this);
break;
}
}
private void ReturnToPrevious()
{
if (PreviousSection != null)
{
SelectionState = 2;
SectionSource.PlayOneShot(ReturnSectionClip);
PreviousSection.SelectionState = 1;
}
}
private IEnumerator DelayUntilTransition()
{
yield return new WaitForSeconds(1f);
if (OtherSections[cursorPos] != null)
{
SelectionState = 2;
OtherSections[cursorPos].SelectionState = 1;
OtherSections[cursorPos].PreviousSection = this;
}
else
{
SelectionState = 1;
}
}
private IEnumerator ShowCredits()
{
yield return new WaitForSeconds(1f);
SelectionState = 2;
CreditSection.SelectionState = 1;
CreditSection.PreviousSection = this;
}
}