using System.Collections; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class DialogueSystem : MonoBehaviour { [Header("UI Elements")] public TMP_Text dialogueText; public GameObject dialoguePanel; [Header("Dialogue Settings")] public string[] predefinedDialogue; public float characterDisplaySpeed = 0.05f; private bool isTyping = false; private bool skipTyping = false; private int currentLineIndex = 0; private void Start() { StartPredefinedDialogue(); } private void Update() { if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) { if (isTyping) { skipTyping = true; } else { DisplayNextLine(); } } } public void StartPredefinedDialogue() { if (predefinedDialogue.Length > 0) { dialoguePanel.SetActive(true); currentLineIndex = 0; StartCoroutine(TypeLine(predefinedDialogue[currentLineIndex])); } } public void StartCustomDialogue(string[] customDialogue) { if (customDialogue.Length > 0) { dialoguePanel.SetActive(true); currentLineIndex = 0; predefinedDialogue = customDialogue; StartCoroutine(TypeLine(predefinedDialogue[currentLineIndex])); } } private IEnumerator TypeLine(string line) { isTyping = true; dialogueText.text = ""; foreach (char c in line) { if (skipTyping) { dialogueText.text = line; break; } dialogueText.text += c; yield return new WaitForSeconds(characterDisplaySpeed); } isTyping = false; skipTyping = false; } private void DisplayNextLine() { currentLineIndex++; if (currentLineIndex < predefinedDialogue.Length) { StartCoroutine(TypeLine(predefinedDialogue[currentLineIndex])); } else { EndDialogue(); } } private void EndDialogue() { dialoguePanel.SetActive(false); dialogueText.text = ""; SceneManager.LoadScene("Game"); } }