125 lines
3.0 KiB
C#
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);
|
|
}
|
|
}
|