using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using static TaskCharakterAnimation; public class CharacterDialog : MonoBehaviour { public TextMeshPro textDisplay; public TextMeshPro textHint; public string[] sentences; private int sentenceIndex; private int letterIndex = 0; private bool typingActive = false; //speed for typing the Text public float typingSpeed; private float timer = 0; //Only reset once after Player is out of range of the TaskCharacter private bool textReseted = true; //If gameSucceeded -> Disable Talking with TaskCharacter private bool gameSucceeded = false; // Start is called before the first frame update void Start() { CommunicationEvents.gameSucceededEvent.AddListener(StartGameSucceededSentence); CommunicationEvents.gameNotSucceededEvent.AddListener(StopGameSucceededSentence); //Type first sentence typingActive = true; TypeFkt(); } private void Update() { TypeFkt(); if(!gameSucceeded && Input.GetKeyDown(KeyCode.Return) && TaskCharakterAnimation.getPlayerInTalkingZone()) { //Type Next sentence if player is in the talkinZone around the TaskCharacter AND the player typed the return-Key NextSentence(); } else if (!gameSucceeded && !TaskCharakterAnimation.getPlayerInTalkingZone() && !textReseted) { //Reset Sentence if Player is out of range of the TaskCharacter and it's not already reseted ResetSentence(); } } public void TypeFkt() { if (typingActive) { if (this.timer >= this.typingSpeed) { if (letterIndex < sentences[sentenceIndex].Length) { textDisplay.text += sentences[sentenceIndex].ToCharArray()[letterIndex]; letterIndex++; } else { this.typingActive = false; letterIndex = 0; } this.timer = 0; } else { this.timer += Time.deltaTime; } } } public void NextSentence() { //-2 because the last sentence is only for SucceededPushout-Purposes if (sentenceIndex < sentences.Length - 2) { TaskCharakterAnimation.setTaskCharacterAddressed(true); sentenceIndex++; letterIndex = 0; typingActive = true; timer = 0; textDisplay.text = ""; TypeFkt(); textReseted = false; } else { letterIndex = 0; typingActive = false; timer = 0; textReseted = false; textDisplay.text = ""; } } public void ResetSentence() { TaskCharakterAnimation.setTaskCharacterAddressed(false); sentenceIndex = 0; letterIndex = 0; typingActive = true; timer = 0; textDisplay.text = ""; //Type first sentence again TypeFkt(); textReseted = true; } public void StartGameSucceededSentence() { if (!gameSucceeded) { textDisplay.text = ""; //Last Sentence is the Pushout-Sentence sentenceIndex = sentences.Length - 1; letterIndex = 0; typingActive = true; timer = 0; gameSucceeded = true; //Disable Hint With Enter-Key for Talking textHint.GetComponent<MeshRenderer>().enabled = false; //Type final message TypeFkt(); } } public void StopGameSucceededSentence() { if (gameSucceeded) { gameSucceeded = false; //Enable Hint With Enter-Key for Talking textHint.GetComponent<MeshRenderer>().enabled = true; ResetSentence(); } } }