using UnityEngine; using UnityEngine.UI; using System.Collections; using TMPro; using UnityEngine.SceneManagement; public class InteractableText : MonoBehaviour { [Header("Interactable Settings")] public string interactableName; [Header("Text Settings")] public string[] day1Text; public string[] day2Text; public string[] day3Text; public string[] day4Text; public string[] day5Text; public string[] notYetText; public string[] doesntMatter; public PlayerStats player; public GameObject interactIcon; public Image textBox; public bool canInteract = false; public movement movement; public ProgressTracker progressTracker; public float characterDisplaySpeed = 0.05f; public GameObject tableSecond; public GameObject bedSecond; public GameObject wallGraphic; public GameObject choice1; public GameObject drownChoice; public FadeScript fadeScript; public dayIntro dayIntro; public bool skipTyping = false; public bool isTyping = false; private void Update() { Inputs(); if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) { if (isTyping) { skipTyping = true; } } } private void Inputs() { if (Input.GetKeyDown(KeyCode.E) && canInteract && !movement.movementDisabled) { CheckTextToUse(interactableName); } } private void CheckTextToUse(string interactableName) { switch (interactableName) { case "Mirror": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "Sink": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 4: if (progressTracker.gotFood) { ShowDialogue(day4Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.drown = true; break; } else { ShowDialogue(notYetText); } break; } break; case "Doors": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "Bed": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; progressTracker.interactedWithBed = true; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; progressTracker.interactedWithBed = true; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; progressTracker.interactedWithBed = true; break; case 4: if (progressTracker.gotFood) { StartCoroutine(SendToPreCreds()); } else { ShowDialogue(notYetText); } break; } break; case "BedSecond": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "BedThird": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "Table": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; progressTracker.interactedWithTable = true; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; progressTracker.interactedWithTable = true; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; // Disable collider to prevent further interaction progressTracker.interactedWithToday++; progressTracker.interactedWithTable = true; break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "Wall": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; break; case 2: ShowDialogue(day2Text); progressTracker.hasInteractedWithDay2Wall = true; wallGraphic.SetActive(true); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "TableSecond": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; break; case 4: if (progressTracker.gotFood) { ShowDialogue(doesntMatter); } else { ShowDialogue(notYetText); } break; } break; case "Food": switch (player.dayNumber) { case 1: ShowDialogue(day1Text); interactIcon.SetActive(false); gameObject.GetComponent().sortingOrder = -10; gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; progressTracker.gotFood = true; break; case 2: ShowDialogue(day2Text); interactIcon.SetActive(false); gameObject.GetComponent().sortingOrder = -10; gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; progressTracker.gotFood = true; break; case 3: ShowDialogue(day3Text); interactIcon.SetActive(false); gameObject.GetComponent().sortingOrder = -10; gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; progressTracker.gotFood = true; break; case 4: ShowDialogue(day4Text); interactIcon.SetActive(false); gameObject.GetComponent().sortingOrder = -10; gameObject.GetComponent().enabled = false; progressTracker.interactedWithToday++; progressTracker.gotFood = true; progressTracker.interactedWithDay4Food = true; break; } break; } } public IEnumerator SendToPreCreds() { fadeScript.FadeIn(); yield return new WaitForSecondsRealtime(1f); SceneManager.LoadScene("BeforeCredits"); } public void ShowDialogue(string[] dialogueLines) { StartCoroutine(DialogueCoroutine(dialogueLines)); } private void DayEnd() { dayIntro.dayText.text = ""; fadeScript.FadeIn(true); } private IEnumerator DialogueCoroutine(string[] dialogueLines) { movement.movementDisabled = true; textBox.gameObject.SetActive(true); TMP_Text uiText = textBox.GetComponentInChildren(); int currentLine = 0; while (currentLine < dialogueLines.Length) { isTyping = true; uiText.text = ""; string line = dialogueLines[currentLine]; foreach (char c in line) { if (skipTyping) { uiText.text = line; break; } uiText.text += c; yield return new WaitForSeconds(characterDisplaySpeed); } isTyping = false; skipTyping = false; bool nextLine = false; while (!nextLine) { if ((Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))) { if (isTyping) skipTyping = true; else nextLine = true; } yield return null; } currentLine++; } textBox.gameObject.SetActive(false); movement.movementDisabled = false; if (progressTracker.dayHasEnded) { DayEnd(); } if (progressTracker.hasInteractedWithDay2Wall && player.dayNumber == 2) { progressTracker.SetName(); progressTracker.hasInteractedWithDay2Wall = false; } if (progressTracker.playerName != "" && player.dayNumber == 2) { wallGraphic.SetActive(false); } if (progressTracker.interactedWithDay4Food && player.dayNumber == 4) { choice1.SetActive(true); movement.movementDisabled = true; } if (progressTracker.drown) { drownChoice.SetActive(true); } } private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { interactIcon.SetActive(true); canInteract = true; } } private void OnTriggerExit2D(Collider2D collision) { if (collision.CompareTag("Player")) { interactIcon.SetActive(false); canInteract = false; } } }