Initial commit

This commit is contained in:
2025-04-08 11:31:35 +08:00
commit a5687dc451
13482 changed files with 5461110 additions and 0 deletions

View File

@ -0,0 +1,403 @@
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class BOOTUP_Manager : MonoBehaviour
{
[SerializeField]
private int MessengerCutsceneIndex;
[SerializeField]
private float CutsceneMultiplier = 1f;
[SerializeField]
private bool HasViewedDisclaimer;
[Space(10f)]
[Header("-= References =-")]
[SerializeField]
private Transform Camera;
[SerializeField]
private float CameraLerpSpeed = 5f;
[SerializeField]
private TRIG_LEVELTRANSITION LevelTransition;
[SerializeField]
private AudioSource source;
[SerializeField]
private AudioClip snd_jingle;
[SerializeField]
private AudioClip[] snd_typesounds;
[SerializeField]
private AudioClip snd_startup;
[SerializeField]
private AudioClip snd_notification;
[SerializeField]
private AudioClip snd_chatshow;
[Header("Computer Screen")]
[SerializeField]
private SpriteRenderer ScreenButtonLight;
[SerializeField]
private GameObject ScreenWhite;
[SerializeField]
private GameObject HourGlass;
[Header("BIOS loading Text")]
[SerializeField]
private TextMeshProUGUI BIOSTextMesh;
[TextArea]
[SerializeField]
private string BIOSText;
[SerializeField]
private float BIOSTextCharPerFrame = 2f;
[Header("Logo Glitched")]
[SerializeField]
private Image LogoGlitched;
[Header("Messenger")]
[SerializeField]
private GameObject Messenger;
[SerializeField]
private TMP_InputField MessengerInputField;
[SerializeField]
private TextMeshProUGUI MessageWindow;
[SerializeField]
private bool ForceFocusOnText;
[SerializeField]
private string previousAnswer;
[SerializeField]
private List<string> CurrentHostMessageQueue = new List<string>();
[SerializeField]
private List<bool> CurrentHostMessageFinale = new List<bool>();
[SerializeField]
private List<float> CurrentHostMessageLengths = new List<float>();
private void Start()
{
if (PlayerPrefs.GetInt("NewDisclaimerViewed", 0) == 1)
{
CutsceneMultiplier = 3f;
HasViewedDisclaimer = true;
}
else
{
PlayerPrefs.SetInt("NewDisclaimerViewed", 1);
HasViewedDisclaimer = false;
CutsceneMultiplier = 1f;
}
Camera.position = new Vector3(0f, 0f, -14f);
StartCoroutine(BOOTUP_Cutscene());
}
private IEnumerator BOOTUP_Cutscene()
{
yield return new WaitForSeconds(0.5f);
yield return new WaitForSeconds(1f / CutsceneMultiplier);
ScreenButtonLight.color = new Color32(byte.MaxValue, 108, 0, byte.MaxValue);
source.PlayOneShot(snd_startup, 0.5f);
source.PlayDelayed(0.5f);
ScreenButtonLight.enabled = true;
yield return new WaitForSeconds(1f / CutsceneMultiplier);
ScreenWhite.SetActive(value: true);
yield return new WaitForSeconds(1f / CutsceneMultiplier);
ScreenWhite.SetActive(value: false);
yield return new WaitForSeconds(0.35f / CutsceneMultiplier);
ScreenButtonLight.color = new Color32(0, byte.MaxValue, 0, byte.MaxValue);
yield return new WaitForSeconds(1.5f / CutsceneMultiplier);
int TargetVisibleCharacterCount = BIOSText.Length;
BIOSTextMesh.maxVisibleCharacters = 0;
BIOSTextMesh.text = BIOSText;
StartCoroutine(BIOSSpeedRandomizer());
while (BIOSTextMesh.maxVisibleCharacters < TargetVisibleCharacterCount)
{
yield return new WaitForSeconds(0f);
BIOSTextMesh.maxVisibleCharacters += (int)(BIOSTextCharPerFrame * CutsceneMultiplier);
if (BIOSTextMesh.maxVisibleCharacters < BIOSTextMesh.text.Length && BIOSTextMesh.text.ToCharArray()[BIOSTextMesh.maxVisibleCharacters] == '|')
{
yield return new WaitForSeconds(0.15f);
}
}
yield return new WaitForSeconds(0.25f / CutsceneMultiplier);
BIOSTextMesh.enabled = false;
yield return new WaitForSeconds(0.5f / CutsceneMultiplier);
HourGlass.SetActive(value: true);
yield return new WaitForSeconds(0.5f / CutsceneMultiplier);
HourGlass.SetActive(value: false);
yield return new WaitForSeconds(0.25f / CutsceneMultiplier);
LogoGlitched.fillAmount = 0.127f;
yield return new WaitForSeconds(0.1f / CutsceneMultiplier);
LogoGlitched.fillAmount = 0.256f;
yield return new WaitForSeconds(0.32f / CutsceneMultiplier);
LogoGlitched.fillAmount = 0.3f;
yield return new WaitForSeconds(0.25f / CutsceneMultiplier);
LogoGlitched.fillAmount = 0.73f;
yield return new WaitForSeconds(0.5f / CutsceneMultiplier);
LogoGlitched.fillAmount = 1f;
yield return new WaitForSeconds(0.1f / CutsceneMultiplier);
source.PlayOneShot(snd_jingle);
yield return new WaitForSeconds(3f);
LogoGlitched.enabled = false;
yield return new WaitForSeconds(0.1f);
if (HasViewedDisclaimer)
{
Vector3 TargetPos2 = new Vector3(0f, 0f, -8f);
while ((double)Vector3.Distance(Camera.position, TargetPos2) > 0.1)
{
Camera.position = Vector3.Lerp(Camera.position, TargetPos2, CameraLerpSpeed * Time.deltaTime);
yield return new WaitForSeconds(0f / CutsceneMultiplier);
}
LevelTransition.BeginTransition();
}
else
{
StartCoroutine(DisclaimerCutscene());
}
}
private IEnumerator DisclaimerCutscene()
{
yield return new WaitForSeconds(1f);
Messenger.SetActive(value: true);
source.PlayOneShot(snd_chatshow, 0.5f);
ForceFocusOnText = false;
yield return new WaitForSeconds(1.5f);
AddNewHostMessage("我们连上网络了吗?", EnableOnEnd: true);
StartCoroutine(PostHostLoop());
}
public void PlayTypeSFX()
{
source.PlayOneShot(snd_typesounds[Random.Range(0, snd_typesounds.Length)], 0.25f);
}
private void RunMessengerCutscene()
{
switch (MessengerCutsceneIndex)
{
case 1:
if (PreviousMessageHadValidAnswer())
{
AddNewHostMessage("太棒了。", EnableOnEnd: false);
AddNewHostMessage("我们可以开始了。", EnableOnEnd: false);
AddNewHostMessage("", EnableOnEnd: false, 0.25f);
AddNewHostMessage("首先,这里的一切均为<b>非官方内容<b>,纯属虚构。\n你是否知晓", EnableOnEnd: true);
}
else
{
AddNewHostMessage("怪了...", EnableOnEnd: false);
AddNewHostMessage("请不要做出不合逻辑的回应。", EnableOnEnd: false);
AddNewHostMessage("不管怎样,我们可以开始了。", EnableOnEnd: false);
AddNewHostMessage("", EnableOnEnd: false, 0.25f);
AddNewHostMessage("首先,这里的一切均为<b>非官方内容<b>,纯属虚构。\n你是否知晓", EnableOnEnd: true);
}
break;
case 2:
if (PreviousMessageHadValidAnswer())
{
AddNewHostMessage("明白。", EnableOnEnd: false);
AddNewHostMessage("我们继续。", EnableOnEnd: false);
AddNewHostMessage("", EnableOnEnd: false, 0.25f);
AddNewHostMessage("你能否接受异常现象和可能存在的\n<b>奇怪之处<b>", EnableOnEnd: true);
}
else
{
AddNewHostMessage("那问题就大了。", EnableOnEnd: false);
AddNewHostMessage("记住,犬科动物是没法在这个宇宙中\n生存下去的", EnableOnEnd: false, 3.5f);
AddNewHostMessage("这些实验皆非官方所作。", EnableOnEnd: false);
AddNewHostMessage("我们继续。", EnableOnEnd: false);
AddNewHostMessage("", EnableOnEnd: false, 0.25f);
AddNewHostMessage("你能否接受异常现象和可能存在的\n<b>奇怪之处<b>", EnableOnEnd: true);
}
break;
case 3:
if (PreviousMessageHadValidAnswer())
{
AddNewHostMessage("那我就放心了。", EnableOnEnd: false);
AddNewHostMessage("如果出现任何异常状况...", EnableOnEnd: false);
AddNewHostMessage("请随时联系... 制造商。", EnableOnEnd: false);
AddNewHostMessage("现在,我们来看最后一项。", EnableOnEnd: false);
AddNewHostMessage("", EnableOnEnd: false, 0.25f);
AddNewHostMessage("你是否有癫痫等症状?", EnableOnEnd: true);
}
else
{
AddNewHostMessage("有趣。", EnableOnEnd: false);
AddNewHostMessage("非常有趣。", EnableOnEnd: false);
AddNewHostMessage("如果你确实遇到异常状况,请不要惊慌。", EnableOnEnd: false, 3.5f);
AddNewHostMessage("联系制造商,把你的问题反映给他们。", EnableOnEnd: false, 3.5f);
AddNewHostMessage("现在,我们来看最后一项。", EnableOnEnd: false);
AddNewHostMessage("", EnableOnEnd: false, 0.25f);
AddNewHostMessage("你是否有癫痫等症状?", EnableOnEnd: true);
}
break;
case 4:
AddNewHostMessage("如果对频闪感到不适,请在设置中启用“简化视觉特效”。", EnableOnEnd: false);
AddNewHostMessage("记住,这很有用的。", EnableOnEnd: false, 3.5f);
AddNewHostMessage("...", EnableOnEnd: false);
AddNewHostMessage("至此,我们已经完成了所有确认步骤。", EnableOnEnd: false, 3.5f);
AddNewHostMessage("显然,你已准备好开始进行三角符文模拟实验。", EnableOnEnd: false, 4f);
AddNewHostMessage("我非常期待你的表现。", EnableOnEnd: false, 5f);
AddNewHostMessage("只要我们共同努力,我们的梦想就一定能够实现。", EnableOnEnd: false, 4f);
AddNewHostMessage("...", EnableOnEnd: false);
AddNewHostMessage("我不久后会再次联系你。", EnableOnEnd: false, 3.5f);
AddNewHostMessage("十分感谢你能百忙之中抽出时间回答我。", EnableOnEnd: false);
AddNewHostMessage("再见了HYPOASTER博士。", EnableOnEnd: false, 3f);
AddNewHostMessage("\"", EnableOnEnd: false, 1f);
break;
case 0:
break;
}
}
private bool PreviousMessageHadValidAnswer()
{
char[] array = previousAnswer.ToUpper().ToCharArray();
string input = previousAnswer.ToUpper();
if (array.Length == 0)
{
return false;
}
string pattern = "(YES|YEP|YEA(?:H)?|YUP|OKAY|ACKNOWLEDGED|UNDERSTAND|AGREE2ALL|MHM|OK|SI|SÍ|是(?:的|滴)?|对|好(?:的|滴)?|可以|嗯|当然|没问题|能接受|接受|可以|能|当然|确认|收到|了解|明白|晓得|认可|赞同|同意|支持|能|理解|清楚|懂|可|行|成|没毛病|没错|连(?:接)?上了|已阅|知道|知晓)";
string pattern2 = "(否|不是(?:的|滴)?|不对|不可以|不赞同|没有|没|不同意|不接受|不能接受|不可以|不行|不能|不理解|不懂|没连上|未连接|不清楚|不了解|不支持|不认可|没明白|不明白|不知道|不知晓)";
if (!Regex.IsMatch(input, pattern2, RegexOptions.IgnoreCase))
{
return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase);
}
return false;
}
private void Update()
{
if (ForceFocusOnText)
{
EventSystem.current.SetSelectedGameObject(MessengerInputField.gameObject, null);
MessengerInputField.gameObject.SetActive(value: true);
MessengerInputField.OnPointerClick(new PointerEventData(EventSystem.current));
if (Input.GetKeyDown(KeyCode.Return) && MessengerInputField.text.Length > 0)
{
MessengerCutsceneIndex++;
AddNewClientMessage(MessengerInputField.text);
previousAnswer = MessengerInputField.text;
StartCoroutine(RunMessageCutsceneDelay());
MessengerInputField.gameObject.SetActive(value: false);
MessengerInputField.text = "";
ForceFocusOnText = false;
}
}
else
{
EventSystem.current.SetSelectedGameObject(null, null);
MessengerInputField.gameObject.SetActive(value: false);
MessengerInputField.text = "";
}
}
private IEnumerator RunMessageCutsceneDelay()
{
yield return new WaitForSeconds(1.5f);
RunMessengerCutscene();
}
private IEnumerator PostHostLoop()
{
yield return new WaitForSeconds(0.1f);
if (CurrentHostMessageQueue.Count > 0)
{
yield return new WaitForSeconds(CurrentHostMessageLengths[0]);
if ((double)CurrentHostMessageLengths[0] >= 0.25)
{
PlayHostMessage(CurrentHostMessageQueue[0]);
}
else
{
PlayHostMessage(CurrentHostMessageQueue[0], PlaySound: false);
}
if (CurrentHostMessageQueue[0] == "\"")
{
StartCoroutine(DelayUntilLevelTransition());
}
CurrentHostMessageQueue.RemoveAt(0);
CurrentHostMessageLengths.RemoveAt(0);
if (CurrentHostMessageFinale[0])
{
ForceFocusOnText = true;
}
CurrentHostMessageFinale.RemoveAt(0);
}
StartCoroutine(PostHostLoop());
}
private void PlayHostMessage(string message, bool PlaySound = true)
{
if (message != "")
{
if (message != "\"")
{
if (PlaySound)
{
source.PlayOneShot(snd_notification, 0.5f);
}
TextMeshProUGUI messageWindow = MessageWindow;
messageWindow.text = messageWindow.text + "> " + message + "\n\n";
}
}
else
{
TextMeshProUGUI messageWindow2 = MessageWindow;
messageWindow2.text = messageWindow2.text + message + "\n\n";
}
}
private void AddNewHostMessage(string message, bool EnableOnEnd, float Length = 2.5f)
{
CurrentHostMessageQueue.Add(message.ToUpper() ?? "");
CurrentHostMessageFinale.Add(EnableOnEnd);
CurrentHostMessageLengths.Add(Length);
}
private IEnumerator DelayUntilLevelTransition()
{
yield return new WaitForSeconds(1f);
LevelTransition.BeginTransition(0.35f);
}
private void AddNewClientMessage(string message)
{
TextMeshProUGUI messageWindow = MessageWindow;
messageWindow.text = messageWindow.text + "< " + message + "\n\n";
}
private IEnumerator BIOSSpeedRandomizer()
{
if (BIOSTextMesh.maxVisibleCharacters < BIOSText.Length)
{
yield return new WaitForSeconds(Random.Range(0.25f, 2f) / CutsceneMultiplier);
BIOSTextCharPerFrame = Random.Range(3, 6);
StartCoroutine(BIOSSpeedRandomizer());
}
}
}