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

1608 lines
63 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ChatboxManager : MonoBehaviour
{
[Header("- References -")]
public Transform TextboxObject;
public Image CharacterPortrait;
public TextMeshProUGUI TextUI;
public TextMeshProUGUI TextBulletpointUI;
public AudioSource TextVoiceEmitter;
public PlayerManager P_Manager;
public ChatboxEffectTags EffectTagController;
private PlayerManager.PlayerState PreviousPlayerState;
[Header("- Text inner workings -")]
private string CurrentText = "";
public int CurrentTextIndex;
public int CurrentAdditionalTextIndex;
public bool CurrentChatOnTopPos;
private int Text_SubtractedRichText;
private int StoredAfterIndex;
public int PauseCounter;
[Header("- Text Settings -")]
public bool FinishedShowingReactions;
public CHATBOXTEXT storedchatboxtext;
public CHATBOXTEXT previouschatboxtext;
public bool ChatIsCurrentlyRunning;
public bool AllowInput = true;
public bool TextIsCurrentlyTyping;
private INT_Chat storedreciever;
public List<string> StoredAdditiveValues = new List<string>();
[SerializeField]
private Transform ReactionHolder;
public GameObject ReactionTemplate;
private List<GameObject> StoredReactions = new List<GameObject>();
[SerializeField]
private TMP_StyleSheet StyleSheet;
public TMP_FontAsset DefaultFont;
public TMP_FontAsset DyslexicFont;
public Image[] ChatboxImages;
public Sprite Kojima;
public AudioClip DefaultSpeakSound;
public Sprite DefaultIcon;
public List<RectTransform> Options = new List<RectTransform>();
public RectTransform HeartCursor;
[SerializeField]
private Transform ChoiceHolder;
[SerializeField]
private GameObject ChoicePrefab;
public Animator ChatboxAnimator;
public bool InDarkworld;
public GameObject DarkworldTextShadow;
public bool ChatboxInteractDebounce;
private int ChoiceNumber;
public int PreviousChosenChoiceIndex;
private int cursorpos;
private bool CurrentlyInChoice;
private bool HideChoicesUntilFinish;
private float CurrentTextSpeedMultiplier;
private bool AllowPreviousStateTamper = true;
private float TalkIconTimer;
private float TalkIconInterval = 1f / 6f;
private static ChatboxManager instance;
public Action Event_OnLetterTyped;
public static ChatboxManager Instance => instance;
private void Awake()
{
if (instance != null && instance != this)
{
UnityEngine.Object.Destroy(base.gameObject);
}
else
{
instance = this;
}
}
private void Update()
{
ProcessInput();
TalkingIconProcess();
SetHeartCursorPOS();
if (InDarkworld)
{
ChatboxAnimator.Play("Chatbox_Darkworld");
DarkworldTextShadow.SetActive(value: true);
}
else
{
ChatboxAnimator.Play("Chatbox_Lightworld");
DarkworldTextShadow.SetActive(value: false);
}
if (StoredReactions.Count > 0 && !ChatIsCurrentlyRunning)
{
ClearReactions();
}
}
private void ProcessInput()
{
bool key = Input.GetKey(PlayerInput.Instance.Key_Menu);
if (CurrentText != "" || CurrentText != null)
{
PauseCounter = FormatCurrentText(CurrentText, IncludeBulletPoint: true, ActivateNextDialogueCharacter: false).Length - Text_SubtractedRichText;
}
if (P_Manager == null)
{
P_Manager = UnityEngine.Object.FindFirstObjectByType<PlayerManager>();
}
if (CurrentlyInChoice && TextUI.maxVisibleCharacters == PauseCounter && HideChoicesUntilFinish && !HeartCursor.gameObject.activeSelf)
{
HeartCursor.gameObject.SetActive(value: true);
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Left) && CurrentlyInChoice && AllowInput)
{
if (cursorpos >= 0 && cursorpos < Options.Count)
{
if (cursorpos - 1 >= 0)
{
cursorpos--;
}
}
else
{
int num = (int)Mathf.Floor((float)Options.Count / 2f - 0.2f);
cursorpos = num;
}
SetHeartCursorPOS();
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Right) && CurrentlyInChoice && AllowInput)
{
if (cursorpos >= 0 && cursorpos < Options.Count)
{
if (cursorpos + 1 <= Options.Count - 1)
{
cursorpos++;
}
}
else
{
int num2 = (int)Mathf.Ceil((float)Options.Count / 2f);
cursorpos = num2;
}
SetHeartCursorPOS();
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Confirm) && cursorpos >= 0 && cursorpos < Options.Count && P_Manager._PlayerState != 0 && FinishedShowingReactions && CurrentlyInChoice && TextUI.maxVisibleCharacters == PauseCounter && AllowInput)
{
AttemptRunActions();
AttemptRunSubActions(IsChatEnd: true);
AttemptRunMultipleActions(IsChatEnd: true);
ClearReactions();
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Choice[CurrentTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Choice[CurrentTextIndex].ChoiceTextResults[cursorpos] == null)
{
PreviousChosenChoiceIndex = cursorpos;
if (CurrentTextIndex + 1 != storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length && !LightworldMenu.Instance.MenuOpen && !DarkworldMenu.Instance.MenuOpen && storedchatboxtext != null)
{
CurrentlyInChoice = false;
CurrentTextIndex++;
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
MonoBehaviour.print("test");
}
else
{
EndText();
}
}
else
{
PreviousChosenChoiceIndex = cursorpos;
CurrentlyInChoice = false;
RunText(storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Choice[CurrentTextIndex].ChoiceTextResults[cursorpos], 0, storedreciever, ResetCurrentTextIndex: true);
}
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Cancel) && P_Manager._PlayerState == PlayerManager.PlayerState.Cutscene && CurrentlyInChoice && AllowInput && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Choice[CurrentTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Choice[CurrentTextIndex].CanBackOut)
{
EndText();
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Confirm) && !CurrentTextHasSkip(CurrentText) && P_Manager._PlayerState != 0 && FinishedShowingReactions && TextUI.maxVisibleCharacters == PauseCounter && !LightworldMenu.Instance.MenuOpen && !DarkworldMenu.Instance.MenuOpen && storedchatboxtext != null && !CurrentlyInChoice && AllowInput)
{
AttemptRunActions();
AttemptRunSubActions(IsChatEnd: true);
AttemptRunMultipleActions(IsChatEnd: true);
if (storedchatboxtext != null && storedchatboxtext.Textboxes[StoredAfterIndex] != null && CurrentTextIndex + 1 != storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
CurrentTextIndex++;
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
EndText();
}
}
if (DRHDebugManager.instance.DebugModeEnabled && Input.GetKeyDown(PlayerInput.Instance.Key_Left) && !CurrentTextHasSkip(CurrentText) && P_Manager._PlayerState != 0 && FinishedShowingReactions && TextUI.maxVisibleCharacters == PauseCounter && !LightworldMenu.Instance.MenuOpen && !DarkworldMenu.Instance.MenuOpen && storedchatboxtext != null && !CurrentlyInChoice && AllowInput)
{
AttemptRunActions();
AttemptRunSubActions(IsChatEnd: true);
AttemptRunMultipleActions(IsChatEnd: true);
if (storedchatboxtext != null && storedchatboxtext.Textboxes[StoredAfterIndex] != null && CurrentTextIndex + -1 >= 0)
{
CurrentTextIndex--;
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
BattleSystem.PlayBattleSoundEffect(BattleSystem.Instance.SFX_menu_deny);
}
}
if (DRHDebugManager.instance.DebugModeEnabled && Input.GetKeyDown(PlayerInput.Instance.Key_Up) && P_Manager._PlayerState != 0 && FinishedShowingReactions && TextUI.maxVisibleCharacters == PauseCounter && !LightworldMenu.Instance.MenuOpen && !DarkworldMenu.Instance.MenuOpen && storedchatboxtext != null && !CurrentlyInChoice && AllowInput)
{
AttemptRunActions();
AttemptRunSubActions(IsChatEnd: true);
AttemptRunMultipleActions(IsChatEnd: true);
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Cancel) && !CurrentTextHasSkip(CurrentText) && P_Manager._PlayerState != 0 && !DarkworldMenu.Instance.MenuOpen && !LightworldMenu.Instance.MenuOpen && TextUI.maxVisibleCharacters != PauseCounter && storedchatboxtext != null && AllowInput)
{
StopCoroutine("PlayText");
FinishCurrentText();
}
if (!key || P_Manager._PlayerState == PlayerManager.PlayerState.Game || CurrentlyInChoice || LightworldMenu.Instance.MenuOpen || !(storedchatboxtext != null) || !AllowInput)
{
return;
}
AttemptRunActions();
AttemptRunSubActions(IsChatEnd: true);
AttemptRunMultipleActions(IsChatEnd: true);
if (!CurrentlyInChoice)
{
if (storedchatboxtext != null && storedchatboxtext.Textboxes[StoredAfterIndex] != null && CurrentTextIndex + 1 != storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
CurrentTextIndex++;
if (storedreciever != null)
{
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
RunText(storedchatboxtext, StoredAfterIndex, null, ResetCurrentTextIndex: false);
}
}
else
{
EndText();
}
}
else
{
StopCoroutine("PlayText");
FinishCurrentText();
}
}
private bool CurrentTextHasSkip(string Text)
{
if (Text == null || Text == "" || SettingsManager.Instance.GetBoolSettingValue("InstantText"))
{
return false;
}
if (Text.Contains('£') | Text.Contains('*'))
{
return true;
}
return false;
}
private string FormatCurrentText(string TargetText, bool IncludeBulletPoint, bool ActivateNextDialogueCharacter)
{
string input = TargetText;
input = Regex.Replace(input, "(?<!\\=)#", "");
input = input.Replace("@", "");
input = input.Replace(";", "\n");
input = input.Replace("~", "\n");
input = input.Replace("&", Environment.UserName.ToUpper());
while (input.Contains('|'))
{
int num = input.IndexOf('|');
int num2 = num + 1;
int i;
for (i = num2; i < input.Length && char.IsDigit(input[i]); i++)
{
}
if (int.TryParse(input.Substring(num2, i - num2), out var result) && result >= 0 && result < StoredAdditiveValues.Count)
{
string value = StoredAdditiveValues[result];
input = input.Remove(num, i - num);
input = input.Insert(num, value);
continue;
}
Debug.LogError("Invalid index after '|' or index out of range.");
break;
}
if (input.Contains('£') && ActivateNextDialogueCharacter && !SettingsManager.Instance.GetBoolSettingValue("InstantText"))
{
if (storedchatboxtext != null && storedchatboxtext.Textboxes[StoredAfterIndex] != null && CurrentTextIndex + 1 != storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
CurrentTextIndex++;
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
EndText();
}
}
input = input.Replace("£", "-");
if (input.Contains('*') && ActivateNextDialogueCharacter && !SettingsManager.Instance.GetBoolSettingValue("InstantText"))
{
if (storedchatboxtext != null && storedchatboxtext.Textboxes[StoredAfterIndex] != null && CurrentTextIndex + 1 != storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
CurrentTextIndex++;
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
EndText();
}
}
return input.Replace("*", "-");
}
private void FinishCurrentText(bool TellRecieverIsFinished = true)
{
if (storedchatboxtext == null || storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] == null)
{
return;
}
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null)
{
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].GiveCharacterBulletpoint)
{
TextBulletpointUI.text = "*";
}
else
{
TextBulletpointUI.text = "";
}
}
else
{
TextBulletpointUI.text = "*";
}
if (storedreciever != null && TellRecieverIsFinished)
{
storedreciever.CurrentlyBeingUsed = false;
}
TextUI.text = FormatCurrentText(CurrentText, IncludeBulletPoint: true, ActivateNextDialogueCharacter: true);
StartShowingReactions();
if (ChoiceNumber > 0)
{
ShowChoices();
}
TextIsCurrentlyTyping = false;
Text_SubtractedRichText = CountRichTextTagCharacters(TextUI.text);
TextUI.maxVisibleCharacters = TextUI.text.Length - Text_SubtractedRichText;
char[] array = storedchatboxtext.Textboxes[StoredAfterIndex].Text[CurrentTextIndex].ToCharArray();
foreach (char num in array)
{
if (num == ';')
{
MonoBehaviour.print("DETECTED");
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null)
{
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].GiveCharacterBulletpoint)
{
TextBulletpointUI.text += "\n*";
}
else
{
TextBulletpointUI.text += "\n";
}
}
else
{
TextBulletpointUI.text += "\n*";
}
}
if (num != '~')
{
continue;
}
MonoBehaviour.print("DETECTED");
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null)
{
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].GiveCharacterBulletpoint)
{
TextBulletpointUI.text += "\n\n*";
}
else
{
TextBulletpointUI.text += "\n";
}
}
else
{
TextBulletpointUI.text += "\n\n*";
}
}
}
private void StartShowingReactions()
{
StartCoroutine(ShowCurrentTextReactions());
}
private IEnumerator ShowCurrentTextReactions()
{
FinishedShowingReactions = false;
if (storedchatboxtext == null || !ChatIsCurrentlyRunning || storedchatboxtext.Textboxes == null || storedchatboxtext.Textboxes.Length == 0)
{
FinishedShowingReactions = true;
yield break;
}
Textbox textbox = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex];
if (textbox == null || textbox.Reaction == null || textbox.Reaction.Length == 0)
{
FinishedShowingReactions = true;
yield break;
}
CHATBOXREACTION cHATBOXREACTION = textbox.Reaction[CurrentTextIndex];
if (cHATBOXREACTION == null || cHATBOXREACTION.Reaction == null)
{
FinishedShowingReactions = true;
yield break;
}
REACTIONDATA[] reaction = cHATBOXREACTION.Reaction;
foreach (REACTIONDATA rEACTIONDATA in reaction)
{
if (rEACTIONDATA == null || rEACTIONDATA.Character == null)
{
continue;
}
GameObject gameObject = UnityEngine.Object.Instantiate(ReactionTemplate, ReactionHolder);
if (gameObject == null)
{
continue;
}
Image componentInChildren = gameObject.GetComponentInChildren<Image>();
TextMeshProUGUI componentInChildren2 = gameObject.GetComponentInChildren<TextMeshProUGUI>();
if (componentInChildren2 == null || componentInChildren == null)
{
UnityEngine.Object.Destroy(gameObject);
continue;
}
gameObject.SetActive(value: true);
gameObject.GetComponent<RectTransform>().localPosition = rEACTIONDATA.Offset;
componentInChildren2.text = rEACTIONDATA.Text;
componentInChildren2.fontSize = rEACTIONDATA.Character.CharacterFontSize / 2f;
componentInChildren2.color = rEACTIONDATA.Character.TextColor;
if (PlayerPrefs.GetInt("Setting_DyslexicText", 0) == 0)
{
componentInChildren2.font = ((rEACTIONDATA.Character.CharacterFont != null) ? rEACTIONDATA.Character.CharacterFont : DefaultFont);
}
else
{
componentInChildren2.font = DyslexicFont;
}
if (rEACTIONDATA.Character.CharacterIcon != null)
{
componentInChildren.sprite = rEACTIONDATA.Character.CharacterIcon;
componentInChildren.rectTransform.sizeDelta = new Vector2(rEACTIONDATA.Character.CharacterIconWidth / 2f, rEACTIONDATA.Character.CharacterIconHeight / 2f);
}
else
{
componentInChildren.sprite = DefaultIcon;
}
StoredReactions.Add(gameObject);
yield return new WaitForSeconds(0.05f);
}
FinishedShowingReactions = true;
}
private void ClearReactions()
{
StopCoroutine("ShowCurrentTextReactions");
foreach (GameObject storedReaction in StoredReactions)
{
UnityEngine.Object.Destroy(storedReaction);
}
StoredReactions.Clear();
}
private void TalkingIconProcess()
{
TalkIconTimer += Time.deltaTime;
if (!ChatIsCurrentlyRunning)
{
return;
}
if (TextUI.maxVisibleCharacters < PauseCounter || SettingsManager.Instance.GetBoolSettingValue("InstantText"))
{
if (storedchatboxtext != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterHasTalkingAnimation && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterIcon != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterTalkingIcon != null && TalkIconTimer >= TalkIconInterval)
{
MonoBehaviour.print("SUCCESS!");
if (CharacterPortrait.sprite == storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterIcon)
{
CharacterPortrait.sprite = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterTalkingIcon;
}
else
{
CharacterPortrait.sprite = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterIcon;
}
TalkIconTimer = 0f;
}
}
else if (storedchatboxtext != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterIcon != null)
{
CharacterPortrait.sprite = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].CharacterIcon;
}
}
public void MoveTextboxToScreenPos(bool OnBottom)
{
if (OnBottom)
{
SetTextboxPosY(-280f);
CurrentChatOnTopPos = false;
}
else
{
SetTextboxPosY(280f);
CurrentChatOnTopPos = true;
}
}
public static void MoveTextboxToTop()
{
Instance.MoveTextboxToScreenPos(OnBottom: false);
}
public static void MoveTextboxToBottom()
{
Instance.MoveTextboxToScreenPos(OnBottom: true);
}
private void AttemptRunActions()
{
Debug.Log("AttemptRunActions started.");
if (storedchatboxtext.Textboxes == null)
{
Debug.LogError("storedchatboxtext.Textboxes is null");
return;
}
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] == null)
{
Debug.LogError("storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] is null");
return;
}
Textbox textbox = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex];
if (textbox.Action == null)
{
Debug.LogError("currentTextbox.Action is null");
return;
}
if (textbox.Action.Length == 0)
{
Debug.Log("currentTextbox.Action.Length is 0");
return;
}
if (textbox.Action[CurrentTextIndex] == null)
{
Debug.Log("currentTextbox.Action[CurrentTextIndex] is null");
return;
}
CHATBOXACTION cHATBOXACTION = textbox.Action[CurrentTextIndex];
if (!cHATBOXACTION.RunActionOnChatEnd)
{
Debug.Log("action.RunActionOnChatEnd is false");
return;
}
Debug.Log("Action will be run: " + cHATBOXACTION.ToString());
if (cHATBOXACTION.PlaySound)
{
if (cHATBOXACTION.PossibleSounds == null)
{
Debug.LogError("action.PossibleSounds is null");
return;
}
if (cHATBOXACTION.PossibleSounds.Length == 0)
{
Debug.LogError("action.PossibleSounds.Length is 0");
return;
}
AudioClip audioClip = cHATBOXACTION.PossibleSounds[UnityEngine.Random.Range(0, cHATBOXACTION.PossibleSounds.Length)];
Debug.Log("Playing sound: " + audioClip.name);
TextVoiceEmitter.PlayOneShot(audioClip);
}
if (!cHATBOXACTION.RunComponentFunction)
{
return;
}
if (cHATBOXACTION.TargetComponentGameObjectName == null)
{
Debug.LogError("action.TargetComponentGameObjectName is null");
return;
}
GameObject gameObject = GameObject.Find(cHATBOXACTION.TargetComponentGameObjectName);
if (gameObject == null)
{
Debug.LogError("TargetGameObject not found: " + cHATBOXACTION.TargetComponentGameObjectName);
return;
}
if (cHATBOXACTION.FunctionName == null)
{
Debug.LogError("action.FunctionName is null");
return;
}
string targetComponentClassname = cHATBOXACTION.TargetComponentClassname;
if (targetComponentClassname == null)
{
Debug.LogError("action.TargetComponentClassname is null");
return;
}
Component component = gameObject.GetComponent(targetComponentClassname);
if (component == null)
{
Debug.LogError("Couldn't find Component named: " + targetComponentClassname);
return;
}
MethodInfo method = component.GetType().GetMethod(cHATBOXACTION.FunctionName);
if (method == null)
{
Debug.LogError("Method not found: " + cHATBOXACTION.FunctionName);
return;
}
Debug.Log("Invoking method: " + cHATBOXACTION.FunctionName);
method.Invoke(component, null);
Debug.Log("AttemptRunActions ended.");
}
private void AttemptRunMultipleActions(bool IsChatEnd = false)
{
Debug.Log("AttemptRunMultipleActions started.");
if (storedchatboxtext == null)
{
Debug.Log("storedchatboxtext is null");
return;
}
if (storedchatboxtext.Textboxes == null)
{
Debug.Log("storedchatboxtext.Textboxes is null");
return;
}
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] == null)
{
Debug.LogError("storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] is null");
return;
}
Textbox textbox = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex];
if (textbox.SubActions == null)
{
Debug.Log("currentTextbox.SubActions is null");
return;
}
if (textbox.SubActions.Length == 0)
{
Debug.Log("currentTextbox.SubActions.Length is 0");
return;
}
if (textbox.SubActions[CurrentTextIndex].SubActions.Length == 0)
{
Debug.Log("currentTextbox.SubActions.SubActions.Length is 0");
return;
}
CHATBOXSUBACTION cHATBOXSUBACTION = textbox.SubActions[CurrentTextIndex];
CHATBOXACTION[] subActions = cHATBOXSUBACTION.SubActions;
foreach (CHATBOXACTION cHATBOXACTION in subActions)
{
if (cHATBOXACTION == null)
{
Debug.Log("Action is null, skipping");
}
else
{
if (cHATBOXACTION.RunActionOnChatEnd != IsChatEnd)
{
continue;
}
Debug.Log("Action will be run: " + cHATBOXSUBACTION.ToString());
if (cHATBOXACTION.PlaySound)
{
if (cHATBOXACTION.PossibleSounds == null)
{
Debug.LogError("action.PossibleSounds is null");
continue;
}
if (cHATBOXACTION.PossibleSounds.Length == 0)
{
Debug.LogError("action.PossibleSounds.Length is 0");
continue;
}
AudioClip audioClip = cHATBOXACTION.PossibleSounds[UnityEngine.Random.Range(0, cHATBOXACTION.PossibleSounds.Length)];
Debug.Log("Playing sound: " + audioClip.name);
TextVoiceEmitter.PlayOneShot(audioClip);
}
if (!cHATBOXACTION.RunComponentFunction)
{
continue;
}
if (cHATBOXACTION.TargetComponentGameObjectName == null)
{
Debug.LogError("action.TargetComponentGameObjectName is null");
continue;
}
GameObject gameObject = GameObject.Find(cHATBOXACTION.TargetComponentGameObjectName);
if (gameObject == null)
{
Debug.LogError("TargetGameObject not found: " + cHATBOXACTION.TargetComponentGameObjectName);
continue;
}
if (cHATBOXACTION.FunctionName == null)
{
Debug.LogError("action.FunctionName is null");
continue;
}
string targetComponentClassname = cHATBOXACTION.TargetComponentClassname;
if (targetComponentClassname == null)
{
Debug.LogError("action.TargetComponentClassname is null");
continue;
}
Component component = gameObject.GetComponent(targetComponentClassname);
if (component == null)
{
Debug.LogError("Couldn't find Component named: " + targetComponentClassname);
continue;
}
MethodInfo method = component.GetType().GetMethod(cHATBOXACTION.FunctionName);
if (method == null)
{
Debug.LogError("Method not found: " + cHATBOXACTION.FunctionName);
continue;
}
Debug.Log("Invoking method: " + cHATBOXACTION.FunctionName);
method.Invoke(component, null);
}
}
Debug.Log("AttemptRunMultipleActions ended.");
}
private void AttemptRunSubActions(bool IsChatEnd = false)
{
if (storedchatboxtext == null)
{
return;
}
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] == null)
{
Debug.LogError("storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] is null");
return;
}
Textbox textbox = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex];
if (textbox.Action == null)
{
Debug.LogError("currentTextbox.Action is null");
return;
}
if (textbox.Action.Length == 0)
{
Debug.Log("currentTextbox.Action.Length is 0");
return;
}
if (textbox.Action[CurrentTextIndex] == null)
{
Debug.Log("currentTextbox.Action[CurrentTextIndex] is null");
return;
}
CHATBOXACTION obj = textbox.Action[CurrentTextIndex];
CHATBOXACTION_SubAction[] subActions = obj.SubActions;
if (obj.RunComponentFunction && subActions != null && subActions.Length != 0)
{
CHATBOXACTION_SubAction[] array = subActions;
foreach (CHATBOXACTION_SubAction cHATBOXACTION_SubAction in array)
{
if (cHATBOXACTION_SubAction.RunActionOnChatEnd != IsChatEnd)
{
return;
}
if (cHATBOXACTION_SubAction.TargetComponentGameObjectName == null)
{
Debug.LogError("action.TargetComponentGameObjectName is null");
return;
}
GameObject gameObject = GameObject.Find(cHATBOXACTION_SubAction.TargetComponentGameObjectName);
if (gameObject == null)
{
Debug.LogError("TargetGameObject not found: " + cHATBOXACTION_SubAction.TargetComponentGameObjectName);
return;
}
if (cHATBOXACTION_SubAction.FunctionName == null)
{
Debug.LogError("action.FunctionName is null");
return;
}
string targetComponentClassname = cHATBOXACTION_SubAction.TargetComponentClassname;
if (targetComponentClassname == null)
{
Debug.LogError("action.TargetComponentClassname is null");
return;
}
Component component = gameObject.GetComponent(targetComponentClassname);
if (component == null)
{
Debug.LogError("Couldn't find Component named: " + targetComponentClassname);
return;
}
MethodInfo method = component.GetType().GetMethod(cHATBOXACTION_SubAction.FunctionName);
if (method == null)
{
Debug.LogError("Method not found: " + cHATBOXACTION_SubAction.FunctionName);
return;
}
Debug.Log("Invoking method: " + cHATBOXACTION_SubAction.FunctionName);
method.Invoke(component, null);
}
}
Debug.Log("AttemptRunActions ended.");
}
private void SetupChoices(CHATBOXTEXT chatbox, int index)
{
CleanupOptions();
CHATBOXCHOICE cHATBOXCHOICE = chatbox.Textboxes[index].Choice[CurrentTextIndex];
if (cHATBOXCHOICE != null)
{
CurrentlyInChoice = true;
ChoiceNumber = cHATBOXCHOICE.Choices.Count;
cursorpos = cHATBOXCHOICE.DefaultSelectedChoice;
if (cHATBOXCHOICE.ShowOnTextScrollFinish)
{
HideChoices();
}
else
{
ShowChoices();
}
for (int i = 0; i < ChoiceNumber; i++)
{
GameObject obj = UnityEngine.Object.Instantiate(ChoicePrefab, ChoiceHolder);
RectTransform component = obj.GetComponent<RectTransform>();
TextMeshProUGUI component2 = obj.GetComponent<TextMeshProUGUI>();
component2.text = Regex.Replace(cHATBOXCHOICE.Choices[i], "([『』「」\\u201A-\\u201F\\u4E00-\\u9FFF\\u3000-\\u303F\\uFF00-\\uFFEF])", "$1 ");
component2.text = component2.text.Replace('\n', '\n');
if (PlayerPrefs.GetInt("Setting_DyslexicText", 0) == 1)
{
component2.font = DyslexicFont;
component2.textStyle = StyleSheet.GetStyle(1867431062);
component2.extraPadding = false;
}
else if (PlayerPrefs.GetInt("Setting_NoFont", 0) == 0)
{
if (cHATBOXCHOICE.ChoiceCharacterReference != null)
{
component2.font = DefaultFont;
component2.textStyle = StyleSheet.GetStyle((int)cHATBOXCHOICE.ChoiceCharacterReference.TextStyleSheet);
component2.extraPadding = true;
if (cHATBOXCHOICE.ChoiceCharacterReference.CharacterFont != null)
{
component2.font = cHATBOXCHOICE.ChoiceCharacterReference.CharacterFont;
}
}
else
{
component2.font = DefaultFont;
component2.textStyle = StyleSheet.GetStyle(1867431062);
component2.extraPadding = true;
}
}
else
{
component2.font = DefaultFont;
component2.textStyle = StyleSheet.GetStyle(1867431062);
component2.extraPadding = true;
}
component.localPosition = cHATBOXCHOICE.ChoicePositions[i];
Options.Add(component);
}
SetHeartCursorPOS();
}
else
{
CleanupOptions();
}
}
private void CleanupOptions()
{
foreach (RectTransform option in Options)
{
UnityEngine.Object.Destroy(option.gameObject);
}
Options.Clear();
HeartCursor.gameObject.SetActive(value: false);
}
private void SetHeartCursorPOS()
{
if (Options.Count == 0)
{
return;
}
if (cursorpos >= 0 && cursorpos <= Options.Count)
{
HeartCursor.localPosition = new Vector2(Options[cursorpos].localPosition.x - 35f, Options[cursorpos].localPosition.y);
}
else
{
HeartCursor.localPosition = new Vector2(0f, 0f);
}
for (int i = 0; i < Options.Count; i++)
{
if (cursorpos >= 0 && cursorpos < Options.Count)
{
if (i != cursorpos)
{
Options[i].GetComponent<TextMeshProUGUI>().color = Color.white;
}
else
{
Options[i].GetComponent<TextMeshProUGUI>().color = new Color(0.996f, 1f, 0f);
}
}
else
{
Options[i].GetComponent<TextMeshProUGUI>().color = Color.white;
}
}
}
private void ShowChoices()
{
ChoiceHolder.gameObject.SetActive(value: true);
HeartCursor.gameObject.SetActive(value: true);
HideChoicesUntilFinish = false;
}
private void HideChoices()
{
ChoiceHolder.gameObject.SetActive(value: false);
HeartCursor.gameObject.SetActive(value: false);
HideChoicesUntilFinish = true;
}
private void SetTextboxPosY(float PosY)
{
TextboxObject.localPosition = new Vector2(TextboxObject.localPosition.x, PosY);
}
public void MimicInput_Confirm()
{
if (!CurrentTextHasSkip(CurrentText) && P_Manager._PlayerState != 0 && FinishedShowingReactions && TextUI.maxVisibleCharacters == PauseCounter && !LightworldMenu.Instance.MenuOpen && !DarkworldMenu.Instance.MenuOpen && storedchatboxtext != null && !CurrentlyInChoice)
{
AttemptRunActions();
AttemptRunSubActions(IsChatEnd: true);
AttemptRunMultipleActions(IsChatEnd: true);
if (storedchatboxtext != null && storedchatboxtext.Textboxes[StoredAfterIndex] != null && CurrentTextIndex + 1 != storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
CurrentTextIndex++;
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
EndText();
}
}
}
public void RunText(CHATBOXTEXT Chatbox, int index, INT_Chat reciever, bool ResetCurrentTextIndex)
{
if (ResetCurrentTextIndex)
{
CurrentTextIndex = 0;
}
StopCoroutine("PlayText");
CleanupOptions();
ClearReactions();
ChatIsCurrentlyRunning = true;
CurrentAdditionalTextIndex = index;
CurrentTextSpeedMultiplier = 1f;
TextUI.color = Color.white;
ChatboxInteractDebounce = true;
Text_SubtractedRichText = 0;
if (AllowPreviousStateTamper)
{
PreviousPlayerState = P_Manager._PlayerState;
AllowPreviousStateTamper = false;
}
Image[] chatboxImages = ChatboxImages;
for (int i = 0; i < chatboxImages.Length; i++)
{
chatboxImages[i].enabled = true;
}
if (Chatbox.Textboxes[index].Character.Length != 0 && Chatbox.Textboxes[index].Character[CurrentTextIndex] == null)
{
CharacterPortrait.sprite = DefaultIcon;
TextUI.margin = new Vector4(-145.0626f, 17.84375f, -20.04016f, 16.56921f);
TextBulletpointUI.margin = new Vector4(-200.549f, 17.84375f, 800.6914f, 16.56921f);
}
else
{
(CharacterPortrait.transform as RectTransform).sizeDelta = new Vector2(Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterIconWidth, Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterIconHeight);
TextUI.margin = new Vector4(112.481f, 17.84375f, -20.04016f, 16.56921f);
TextBulletpointUI.margin = new Vector4(58.25925f, 17.84375f, 800.6914f, 16.56921f);
UnityEngine.Random.Range(0, 10000);
CurrentTextSpeedMultiplier = Chatbox.Textboxes[index].Character[CurrentTextIndex].TextSpeedMultiplier;
TextUI.color = Chatbox.Textboxes[index].Character[CurrentTextIndex].TextColor;
if (Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterIcon != null)
{
CharacterPortrait.sprite = Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterIcon;
}
else
{
CharacterPortrait.sprite = DefaultIcon;
TextUI.margin = new Vector4(-145.0626f, 17.84375f, -20.04016f, 16.56921f);
TextBulletpointUI.margin = new Vector4(-200.549f, 17.84375f, 800.6914f, 16.56921f);
}
}
if (Chatbox.Textboxes[index].Character[CurrentTextIndex] == null || Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterSound == null)
{
TextVoiceEmitter.clip = DefaultSpeakSound;
}
else
{
TextVoiceEmitter.clip = Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterSound;
}
if (Chatbox.Textboxes[index] != null && Chatbox.Textboxes[index].Choice.Length != 0 && Chatbox.Textboxes[index].Choice[CurrentTextIndex] != null)
{
SetupChoices(Chatbox, index);
}
else
{
ChoiceNumber = 0;
}
TextUI.enabled = true;
TextUI.text = "";
StoredAfterIndex = index;
storedchatboxtext = Chatbox;
if (reciever != null)
{
storedreciever = reciever;
if (Chatbox.Textboxes[index].Character[CurrentTextIndex] != null && Chatbox.Textboxes[index].Character[CurrentTextIndex].TellRecieverIfChatting)
{
reciever.CurrentlyBeingUsed = true;
}
else
{
reciever.CurrentlyBeingUsed = false;
}
}
if (Camera.main != null && PlayerManager.Instance != null && storedreciever != null)
{
if (!storedreciever.ManualTextboxPosition)
{
if (PlayerManager.Instance.transform.position.y >= Camera.main.transform.position.y)
{
SetTextboxPosY(-280f);
CurrentChatOnTopPos = false;
}
else
{
SetTextboxPosY(280f);
CurrentChatOnTopPos = true;
}
}
else if (storedreciever.OnBottom)
{
SetTextboxPosY(-280f);
CurrentChatOnTopPos = false;
}
else
{
SetTextboxPosY(280f);
CurrentChatOnTopPos = true;
}
}
TextUI.font = DefaultFont;
TextUI.textStyle = StyleSheet.GetStyle(1867431062);
TextBulletpointUI.font = DefaultFont;
TextUI.extraPadding = true;
if (PlayerPrefs.GetInt("Setting_DyslexicText", 0) == 1)
{
TextUI.font = DyslexicFont;
TextUI.textStyle = StyleSheet.GetStyle(1867431062);
TextBulletpointUI.font = DefaultFont;
TextUI.extraPadding = false;
}
else if (PlayerPrefs.GetInt("Setting_NoFont", 0) == 0 && Chatbox.Textboxes[index].Character[CurrentTextIndex] != null && Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterFont != null)
{
if (Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterFont != null)
{
TextUI.font = Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterFont;
}
TextUI.textStyle = StyleSheet.GetStyle((int)Chatbox.Textboxes[index].Character[CurrentTextIndex].TextStyleSheet);
TextBulletpointUI.font = TextUI.font;
}
if (Chatbox.Textboxes[index].Character[CurrentTextIndex] != null && Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterFontSize != 0f)
{
TextUI.fontSize = Chatbox.Textboxes[index].Character[CurrentTextIndex].CharacterFontSize;
}
else
{
TextUI.fontSize = 64f;
}
if (LightworldMenu.Instance.MenuOpen)
{
LightworldMenu.Instance.ForceCloseMenu();
PreviousPlayerState = PlayerManager.PlayerState.Game;
}
if (DarkworldMenu.Instance.MenuOpen)
{
DarkworldMenu.Instance.CloseMenu();
PreviousPlayerState = PlayerManager.PlayerState.Game;
}
StartCoroutine("PlayText");
}
public void EndText()
{
Image[] chatboxImages = ChatboxImages;
for (int i = 0; i < chatboxImages.Length; i++)
{
chatboxImages[i].enabled = false;
}
previouschatboxtext = storedchatboxtext;
if (storedreciever != null)
{
storedreciever.FinishedText = true;
storedreciever.CurrentlyBeingUsed = false;
}
TextUI.enabled = false;
if (PreviousPlayerState == PlayerManager.PlayerState.Game)
{
P_Manager._PlayerState = PlayerManager.PlayerState.Game;
}
PreviousPlayerState = PlayerManager.PlayerState.Game;
AllowPreviousStateTamper = true;
TextIsCurrentlyTyping = false;
StoredAfterIndex = 0;
storedchatboxtext = null;
CurrentText = "";
TextBulletpointUI.text = "";
PauseCounter = 0;
cursorpos = 0;
ChoiceNumber = 0;
Text_SubtractedRichText = 0;
StartCoroutine(DebounceDelay());
ClearReactions();
CleanupOptions();
HeartCursor.gameObject.SetActive(value: false);
SetHeartCursorPOS();
CurrentTextIndex = 0;
CurrentlyInChoice = false;
CurrentAdditionalTextIndex = 0;
if (storedreciever != null)
{
StartCoroutine(storedreciever.DebounceInteract());
storedreciever.CurrentlyBeingUsed = false;
}
storedreciever = null;
StopCoroutine("PlayText");
ChatIsCurrentlyRunning = false;
}
private IEnumerator DebounceDelay()
{
yield return new WaitForSeconds(0.01f);
ChatboxInteractDebounce = false;
}
public IEnumerator InputDebounceDelay()
{
bool previousInputState = AllowInput;
AllowInput = false;
yield return new WaitForSeconds(0.1f);
AllowInput = previousInputState;
}
private IEnumerator PlayText()
{
string StoredText = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Text[CurrentTextIndex];
StoredText = StoredText.Replace("£", "*");
StoredText = Regex.Replace(StoredText, "([『』「」\\u201A-\\u201F\\u4E00-\\u9FFF\\u3000-\\u303F\\uFF00-\\uFFEF])", "$1 ");
StoredText = Regex.Replace(StoredText, "([a-zA-Z0-9\\.\\-@#])([『』「」\\u201A-\\u201F\\u4E00-\\u9FFF\\u3000-\\u303F\\uFF00-\\uFFEF])", "$1 $2");
Debug.LogWarning(StoredText);
TextUI.text = StoredText;
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null)
{
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].GiveCharacterBulletpoint)
{
TextBulletpointUI.text = "*";
}
else
{
TextBulletpointUI.text = "";
}
}
else
{
TextBulletpointUI.text = "*";
}
CurrentText = StoredText;
TextUI.maxVisibleCharacters = 0;
int MaxVisibleCharacters = 0;
Text_SubtractedRichText = 0;
bool ForcedFinishText = false;
TextIsCurrentlyTyping = true;
int messageCharLength = StoredText.Length;
char[] messageCharacters = StoredText.ToCharArray();
if (storedchatboxtext != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex] != null && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Action.Length != 0 && storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Action[CurrentTextIndex] != null && !storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Action[CurrentTextIndex].RunActionOnChatEnd)
{
CHATBOXACTION cHATBOXACTION = storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Action[CurrentTextIndex];
if (cHATBOXACTION.PlaySound && cHATBOXACTION.PossibleSounds.Length != 0)
{
AudioClip clip = cHATBOXACTION.PossibleSounds[UnityEngine.Random.Range(0, cHATBOXACTION.PossibleSounds.Length)];
TextVoiceEmitter.PlayOneShot(clip);
}
GameObject gameObject = GameObject.Find(cHATBOXACTION.TargetComponentGameObjectName);
if (cHATBOXACTION.RunComponentFunction && gameObject != null && cHATBOXACTION.FunctionName != null)
{
string targetComponentClassname = cHATBOXACTION.TargetComponentClassname;
Component component = gameObject.GetComponent(targetComponentClassname);
if (component != null)
{
if (component.GetType().GetMethod(cHATBOXACTION.FunctionName) != null)
{
component.GetType().GetMethod(cHATBOXACTION.FunctionName).Invoke(component, null);
}
else
{
MonoBehaviour.print("did you forget to make the method public?");
}
}
else
{
MonoBehaviour.print("Couldn't find Component named: " + targetComponentClassname);
}
}
}
AttemptRunSubActions();
AttemptRunMultipleActions();
if (AllowInput && SettingsManager.Instance.GetBoolSettingValue("InstantText"))
{
StartCoroutine(InstantText_PlayTalkSound(TextVoiceEmitter.clip));
if (storedreciever != null)
{
storedreciever.CurrentlyBeingUsed = true;
}
TextIsCurrentlyTyping = false;
FinishCurrentText(TellRecieverIsFinished: false);
yield break;
}
while (MaxVisibleCharacters < messageCharLength)
{
if (messageCharacters[MaxVisibleCharacters].ToString() == " ")
{
MaxVisibleCharacters++;
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
else if (StoredText[MaxVisibleCharacters] == '<')
{
int num = MaxVisibleCharacters;
int num2 = StoredText.IndexOf('>', num);
if (num2 != -1)
{
int num3 = num2 - num + 1;
MaxVisibleCharacters += num3;
Text_SubtractedRichText += num3;
}
}
else if (messageCharacters[MaxVisibleCharacters].ToString() == "(")
{
MaxVisibleCharacters++;
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
else if (messageCharacters[MaxVisibleCharacters].ToString() == ")")
{
MaxVisibleCharacters++;
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
else if (StoredText[MaxVisibleCharacters].ToString() == "@")
{
StoredText = StoredText.Remove(MaxVisibleCharacters, 1);
TextUI.text = StoredText;
CurrentText = StoredText;
messageCharacters = StoredText.ToCharArray();
messageCharLength = StoredText.Length;
yield return new WaitForSeconds(0.125f * CurrentTextSpeedMultiplier);
}
else if (StoredText[MaxVisibleCharacters].ToString() == "#")
{
StoredText = StoredText.Remove(MaxVisibleCharacters, 1);
TextUI.text = StoredText;
CurrentText = StoredText;
messageCharacters = StoredText.ToCharArray();
messageCharLength = StoredText.Length;
yield return new WaitForSeconds(0.5f * CurrentTextSpeedMultiplier);
}
else if (StoredText[MaxVisibleCharacters].ToString() == ";")
{
yield return new WaitForSeconds(0.2f * CurrentTextSpeedMultiplier);
StoredText = RemoveSelectedCharacter(StoredText, MaxVisibleCharacters);
StoredText = AddSelectedCharacter(StoredText, MaxVisibleCharacters, "\n");
TextUI.text = StoredText;
CurrentText = StoredText;
messageCharLength = StoredText.Length;
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null)
{
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].GiveCharacterBulletpoint)
{
TextBulletpointUI.text += "\n*";
}
else
{
TextBulletpointUI.text += "\n";
}
}
else
{
TextBulletpointUI.text += "\n*";
}
MaxVisibleCharacters++;
}
else if (StoredText[MaxVisibleCharacters] == '|')
{
int startIndex = MaxVisibleCharacters + 1;
int endIndex;
for (endIndex = startIndex; endIndex < StoredText.Length && char.IsDigit(StoredText[endIndex]); endIndex++)
{
yield return null;
}
if (int.TryParse(StoredText.Substring(startIndex, endIndex - startIndex), out var result) && result >= 0 && result < StoredAdditiveValues.Count)
{
string value = StoredAdditiveValues[result];
StoredText = StoredText.Remove(MaxVisibleCharacters, endIndex - MaxVisibleCharacters);
StoredText = StoredText.Insert(MaxVisibleCharacters, value);
TextUI.text = StoredText;
CurrentText = StoredText;
messageCharLength = StoredText.Length;
messageCharacters = StoredText.ToCharArray();
MaxVisibleCharacters++;
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
else
{
Debug.LogError("Invalid index after '|' or index out of range.");
MaxVisibleCharacters++;
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
}
else if (StoredText[MaxVisibleCharacters].ToString() == "~")
{
yield return new WaitForSeconds(0.2f * CurrentTextSpeedMultiplier);
StoredText = RemoveSelectedCharacter(StoredText, MaxVisibleCharacters);
StoredText = AddSelectedCharacter(StoredText, MaxVisibleCharacters, "\n");
TextUI.text = StoredText;
CurrentText = StoredText;
messageCharLength = StoredText.Length;
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex] != null)
{
if (storedchatboxtext.Textboxes[CurrentAdditionalTextIndex].Character[CurrentTextIndex].GiveCharacterBulletpoint)
{
TextBulletpointUI.text += "\n\n*";
}
else
{
TextBulletpointUI.text += "\n";
}
}
else
{
TextBulletpointUI.text += "\n\n*";
}
MaxVisibleCharacters++;
}
else if (StoredText[MaxVisibleCharacters].ToString() == ",")
{
MaxVisibleCharacters++;
TextUI.maxVisibleCharacters = MaxVisibleCharacters - Text_SubtractedRichText;
yield return new WaitForSeconds(0.165f * CurrentTextSpeedMultiplier);
}
else if (StoredText[MaxVisibleCharacters].ToString() == ".")
{
MaxVisibleCharacters++;
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
else if (StoredText[MaxVisibleCharacters].ToString() == "&")
{
StoredText = RemoveSelectedCharacter(StoredText, MaxVisibleCharacters);
string input = Environment.UserName.ToUpper();
input = Regex.Replace(input, " ", string.Empty);
input = input.Substring(0, 6);
StoredText = AddSelectedCharacter(StoredText, MaxVisibleCharacters, input);
TextUI.text = StoredText;
CurrentText = StoredText;
messageCharLength = StoredText.Length;
messageCharacters = StoredText.ToCharArray();
yield return new WaitForSeconds(0f);
}
else if (StoredText[MaxVisibleCharacters].ToString() == "£")
{
CurrentText = "";
TextUI.text = "";
MaxVisibleCharacters = 0;
TextUI.maxVisibleCharacters = 0;
CurrentTextIndex++;
StopCoroutine("PlayText");
if (CurrentTextIndex + 1 < storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
if (storedreciever != null)
{
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
RunText(storedchatboxtext, StoredAfterIndex, null, ResetCurrentTextIndex: false);
}
}
else
{
EndText();
}
}
else if (StoredText[MaxVisibleCharacters].ToString() == "*")
{
CurrentText = "";
TextUI.text = "";
MaxVisibleCharacters = 0;
TextUI.maxVisibleCharacters = 0;
CurrentTextIndex++;
StopCoroutine("PlayText");
if (CurrentTextIndex + 1 < storedchatboxtext.Textboxes[StoredAfterIndex].Text.Length)
{
if (storedreciever != null)
{
RunText(storedchatboxtext, StoredAfterIndex, storedreciever, ResetCurrentTextIndex: false);
}
else
{
RunText(storedchatboxtext, StoredAfterIndex, null, ResetCurrentTextIndex: false);
}
}
else
{
EndText();
}
}
else if (!ForcedFinishText)
{
MaxVisibleCharacters++;
TextVoiceEmitter.PlayOneShot(TextVoiceEmitter.clip);
CallEvent_OnLetterTyped();
yield return new WaitForSeconds(0.0265f * CurrentTextSpeedMultiplier);
}
else
{
MaxVisibleCharacters++;
}
TextUI.maxVisibleCharacters = MaxVisibleCharacters - Text_SubtractedRichText;
}
if (storedreciever != null)
{
storedreciever.CurrentlyBeingUsed = false;
}
TextIsCurrentlyTyping = false;
StartShowingReactions();
if (ChoiceNumber > 0)
{
ShowChoices();
}
}
public void CallEvent_OnLetterTyped()
{
if (Event_OnLetterTyped != null)
{
Event_OnLetterTyped?.Invoke();
}
}
private string RemoveSelectedCharacter(string text, int Index)
{
return text.Remove(Index, 1);
}
private string AddSelectedCharacter(string text, int Index, string Insert)
{
return text.Insert(Index, Insert);
}
public int CountOfStringInText(string TargetText, char Counter)
{
int num = 0;
bool flag = false;
char[] array = TargetText.ToCharArray();
for (int i = 0; i < array.Length; i++)
{
if (array[i] == Counter)
{
flag = true;
}
else if (false)
{
num++;
}
}
return num;
}
public void EnableTextInput()
{
AllowInput = true;
}
public void DisableTextInput()
{
AllowInput = false;
}
public static string RemoveRichTextTags(string input)
{
string pattern = "<.*?>";
return Regex.Replace(input, pattern, "");
}
public int CountRichTextTagCharacters(string input)
{
string pattern = "<.*?>";
MatchCollection matchCollection = Regex.Matches(input, pattern);
int num = 0;
foreach (Match item in matchCollection)
{
num += item.Length;
}
return num;
}
private IEnumerator InstantText_PlayTalkSound(AudioClip talkSound)
{
if (talkSound != null && !Input.GetKey(PlayerInput.Instance.Key_Menu))
{
TextVoiceEmitter.clip = talkSound;
for (int i = 0; i < 4; i++)
{
TextVoiceEmitter.PlayOneShot(TextVoiceEmitter.clip);
CallEvent_OnLetterTyped();
yield return new WaitForSeconds(0.03975f * CurrentTextSpeedMultiplier);
}
}
}
}