MIF_E31222398/Assets/Script/Dialogue.cs

125 lines
3.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class Dialogue : MonoBehaviour
{
public GameObject dialoguePanel;
public TextMeshProUGUI dialogueText;
public string[] dialogue;
private int index;
// untuk inisiasi kamera
public GameObject camera;
public string sceneName;
public GameObject nextLine;
public float wordSpeed;
public Animator animator;
private bool isTyping = false;
void Start()
{
dialogueText.text = "";
StartDialogue();
}
public void StartDialogue()
{
index = 0;
dialogueText.text = "";
StartCoroutine(Typing());
}
public void NextLine()
{
if (isTyping) return;
nextLine.SetActive(false);
StartCoroutine(MoveCamera(new Vector3(camera.transform.position.x + 20.0f, camera.transform.position.y, camera.transform.position.z), 0.0f));
if (index < dialogue.Length - 1)
{
index++;
StartCoroutine(Typing());
}
else
{
StartCoroutine(TransitionStart(sceneName));
}
//if (index == index)
//{
// // ketika index = 1 kamera bergerak ke arah kanan kekoordinat x yang sudah di tentukan, misal 20.0 untuk melihat ke area lain
// StartCoroutine(MoveCamera(new Vector3(20.0f, camera.transform.position.y, camera.transform.position.z), 0.01f));
//}
}
public void PreviousLine()
{
if (index != 0)
{
if (isTyping) return;
StartCoroutine(MoveCamera(new Vector3(camera.transform.position.x - 20.0f, camera.transform.position.y, camera.transform.position.z), 0.0f));
if (index > 0)
{
index--;
dialogueText.text = "";
StartCoroutine(Typing());
}
}
}
public void ZeroText()
{
dialogueText.text = "";
index = 0;
}
IEnumerator Typing()
{
isTyping = true;
dialogueText.text = "";
foreach (char letter in dialogue[index].ToCharArray())
{
dialogueText.text += letter;
yield return new WaitForSeconds(wordSpeed);
}
isTyping = false;
nextLine.SetActive(true);
}
IEnumerator MoveCamera(Vector3 targetPosition, float duration)
{
Vector3 startPosition = camera.transform.position;
float time = 0;
while (time < duration)
{
camera.transform.position = Vector3.Lerp(startPosition, targetPosition, time / duration);
time += Time.deltaTime;
yield return null;
}
camera.transform.position = targetPosition; // Pastikan posisi akhir tepat
}
IEnumerator TransitionStart(string sceneName)
{
animator.SetTrigger("end");
yield return new WaitForSeconds(1);
SceneManager.LoadScene(sceneName);
}
}