224 lines
8.5 KiB
C#
224 lines
8.5 KiB
C#
using System;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class DialogueManager : MonoBehaviour
|
|
{
|
|
#region Statication
|
|
|
|
public static DialogueManager instance;
|
|
|
|
private void Awake()
|
|
{
|
|
if (instance != null && instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
instance = this;
|
|
}
|
|
|
|
#endregion
|
|
[Header("Status")]
|
|
public DialogueScript scriptToShow;
|
|
public int currentText;
|
|
public bool dialogueActive;
|
|
[Header("UI")]
|
|
[SerializeField] private GameObject dialogueUI;
|
|
[SerializeField] private Transform bossSpeechBubble;
|
|
[SerializeField] private Vector3 offset;
|
|
[SerializeField] private TextMeshProUGUI bossText;
|
|
[SerializeField] private GameObject youmuSpeechBubble;
|
|
[SerializeField] private TextMeshProUGUI youmuText;
|
|
[SerializeField] private GameObject reisenSpeechBubble; //have to change the dialogue for this but it's probably fine
|
|
[SerializeField] private TextMeshProUGUI reisenText;
|
|
[SerializeField] private GameObject merlinSpeechBubble; //hell
|
|
[SerializeField] private TextMeshProUGUI merlinText;
|
|
[SerializeField] private GameObject lyricaSpeechBubble;
|
|
[SerializeField] private TextMeshProUGUI lyricaText;
|
|
[SerializeField] private GameObject lunasaSpeechBubble;
|
|
[SerializeField] private TextMeshProUGUI lunasaText;
|
|
[Header("Animation")]
|
|
[SerializeField] private Animator reisenAnimator;
|
|
[SerializeField] private Animator youmuAnimator;
|
|
[SerializeField] private string switchToDialogueTrigger;
|
|
[SerializeField] private string switchToIdleTrigger;
|
|
[SerializeField] private string changeDialogueTrigger;
|
|
[SerializeField] private string talkTrigger;
|
|
public Animator battleUIAnimator;
|
|
[SerializeField] private string dialogueStartTrigger;
|
|
[SerializeField] private string dialogueEndTrigger;
|
|
public string nobossTrigger;
|
|
|
|
public void StartDialogue(DialogueScript newDialogue)
|
|
{
|
|
dialogueUI.SetActive(true);
|
|
WaveManager.instance.bossUI.SetActive(false);
|
|
dialogueActive = true;
|
|
currentText = 0;
|
|
scriptToShow = newDialogue;
|
|
battleUIAnimator.SetTrigger(dialogueStartTrigger);
|
|
DialogueScript.Dialogue currentDialogue = scriptToShow.dialogueList[currentText];
|
|
if (WaveManager.instance.bossInstance)
|
|
{
|
|
bossSpeechBubble.position = WaveManager.instance.bossInstance.transform.position + offset;
|
|
WaveManager.instance.musicSource.clip = WaveManager.instance.bossDialogueLoop;
|
|
WaveManager.instance.musicSource.volume = WaveManager.instance.bossVolume;
|
|
WaveManager.instance.musicSource.Play();
|
|
}
|
|
if (WaveManager.instance.lyricaInstance)
|
|
{
|
|
WaveManager.instance.lyricaInstance.isStalled = true;
|
|
lunasaSpeechBubble.transform.position = WaveManager.instance.lunasaInstance.transform.position + offset;
|
|
merlinSpeechBubble.transform.position = WaveManager.instance.merlinInstance.transform.position + offset;
|
|
lyricaSpeechBubble.transform.position = WaveManager.instance.lyricaInstance.transform.position + offset;
|
|
WaveManager.instance.musicSource.clip = WaveManager.instance.finalDialogueLoop;
|
|
WaveManager.instance.musicSource.volume = WaveManager.instance.finalVolume;
|
|
WaveManager.instance.musicSource.Play();
|
|
}
|
|
SetDialogue(currentDialogue);
|
|
reisenAnimator.SetTrigger(switchToDialogueTrigger);
|
|
youmuAnimator.SetTrigger(switchToDialogueTrigger);
|
|
//GameManager.instance.SetPause(true);
|
|
}
|
|
|
|
public void ContinueDialogue()
|
|
{
|
|
currentText++;
|
|
if (currentText >= scriptToShow.dialogueList.Length)
|
|
{
|
|
EndDialogue();
|
|
return;
|
|
}
|
|
DialogueScript.Dialogue currentDialogue = scriptToShow.dialogueList[currentText];
|
|
SetDialogue(currentDialogue);
|
|
}
|
|
|
|
public void EndDialogue()
|
|
{
|
|
dialogueActive = false;
|
|
dialogueUI.SetActive(false);
|
|
WaveManager.instance.player.isStalled = false;
|
|
WaveManager.instance.player.invulnerable = false;
|
|
battleUIAnimator.SetTrigger(dialogueEndTrigger);
|
|
if (WaveManager.instance.bossInstance)
|
|
{
|
|
WaveManager.instance.bossInstance.isStalled = false;
|
|
WaveManager.instance.bossInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.musicSource.clip = WaveManager.instance.bossMusic;
|
|
WaveManager.instance.musicSource.Play();
|
|
}
|
|
if (WaveManager.instance.lunasaInstance)
|
|
{
|
|
WaveManager.instance.lunasaInstance.isStalled = false;
|
|
WaveManager.instance.merlinInstance.isStalled = false;
|
|
WaveManager.instance.lyricaInstance.isStalled = false;
|
|
WaveManager.instance.lyricaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.merlinInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lunasaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.musicSource.clip = WaveManager.instance.finalMusic;
|
|
WaveManager.instance.musicSource.Play();
|
|
}
|
|
//GameManager.instance.SetPause(false);
|
|
WaveManager.instance.bossUI.SetActive(true);
|
|
WaveManager.instance.musicSource.Play();
|
|
reisenAnimator.SetTrigger(switchToIdleTrigger);
|
|
youmuAnimator.SetTrigger(switchToIdleTrigger);
|
|
|
|
}
|
|
|
|
private void SetDialogue(DialogueScript.Dialogue textToShow)
|
|
{
|
|
reisenSpeechBubble.SetActive(false);
|
|
youmuSpeechBubble.SetActive(false);
|
|
bossSpeechBubble.gameObject.SetActive(false);
|
|
lyricaSpeechBubble.SetActive(false);
|
|
merlinSpeechBubble.SetActive(false);
|
|
lunasaSpeechBubble.SetActive(false);
|
|
switch (textToShow.character.thisCharacter) //everyone will hate this code but that's alright
|
|
{
|
|
case DialogueCharacter.Character.Reisen:
|
|
reisenSpeechBubble.SetActive(true);
|
|
reisenText.text = textToShow.text;
|
|
youmuAnimator.SetTrigger(changeDialogueTrigger);
|
|
reisenAnimator.SetTrigger(talkTrigger);
|
|
if (WaveManager.instance.lyricaInstance)
|
|
{
|
|
WaveManager.instance.lyricaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.merlinInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lunasaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
}
|
|
else
|
|
{
|
|
WaveManager.instance.bossInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
}
|
|
break;
|
|
case DialogueCharacter.Character.Youmu:
|
|
youmuSpeechBubble.SetActive(true);
|
|
youmuText.text = textToShow.text;
|
|
youmuAnimator.SetTrigger(talkTrigger);
|
|
reisenAnimator.SetTrigger(changeDialogueTrigger);
|
|
if (WaveManager.instance.lyricaInstance)
|
|
{
|
|
WaveManager.instance.lyricaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.merlinInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lunasaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
}
|
|
else
|
|
{
|
|
WaveManager.instance.bossInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
}
|
|
break;
|
|
case DialogueCharacter.Character.Enemy:
|
|
bossSpeechBubble.gameObject.SetActive(true);
|
|
bossText.text = textToShow.text;
|
|
reisenAnimator.SetTrigger(changeDialogueTrigger);
|
|
youmuAnimator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.bossInstance.animator.SetTrigger(talkTrigger);
|
|
break;
|
|
case DialogueCharacter.Character.Lunasa:
|
|
lunasaSpeechBubble.gameObject.SetActive(true);
|
|
lunasaText.text = textToShow.text;
|
|
reisenAnimator.SetTrigger(changeDialogueTrigger);
|
|
youmuAnimator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lyricaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.merlinInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lunasaInstance.animator.SetTrigger(talkTrigger);
|
|
break;
|
|
case DialogueCharacter.Character.Merlin:
|
|
merlinSpeechBubble.gameObject.SetActive(true);
|
|
merlinText.text = textToShow.text;
|
|
reisenAnimator.SetTrigger(changeDialogueTrigger);
|
|
youmuAnimator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lyricaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.merlinInstance.animator.SetTrigger(talkTrigger);
|
|
WaveManager.instance.lunasaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
break;
|
|
case DialogueCharacter.Character.Lyrica:
|
|
lyricaSpeechBubble.gameObject.SetActive(true);
|
|
lyricaText.text = textToShow.text;
|
|
reisenAnimator.SetTrigger(changeDialogueTrigger);
|
|
youmuAnimator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lyricaInstance.animator.SetTrigger(talkTrigger);
|
|
WaveManager.instance.merlinInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
WaveManager.instance.lunasaInstance.animator.SetTrigger(changeDialogueTrigger);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (dialogueActive)
|
|
{
|
|
if (Input.GetMouseButtonDown(0))
|
|
{
|
|
ContinueDialogue();
|
|
}
|
|
else if (Input.GetKeyDown(KeyCode.Escape))
|
|
{
|
|
EndDialogue();
|
|
}
|
|
}
|
|
}
|
|
}
|