using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.SceneManagement; using Yarn.Unity; namespace AibisDream { public class DialogController : Singleton { private DialogueRunner dialogueRunner; private Dictionary> commandMap = new Dictionary>(); private void Start() { dialogueRunner = GetComponentInChildren(); } /// /// �����Ի� /// /// public void StartDialog(YarnProject yarnProject) { dialogueRunner.SetProject(yarnProject); dialogueRunner.StartDialogue("Start"); } /// /// ִ��ָ�� /// /// ָ������ public void InvokeOptionCommand(string commandName, YarnOption[] options) { if (commandName == null) { } if (commandMap.TryGetValue(commandName, out var action)) { action(options); } else { Debug.LogWarning($"û���ҵ� {commandName} ����"); } } /// /// ע���ѡ��ָ�� /// /// ָ������ /// ָ��� public void RegisterOptionCommand(string commandName, Action commandAction) { if (commandMap.ContainsKey(commandName)) { Debug.Log($"���� {commandName} ��δע�ᣬ����ע����滻��ָ��"); } commandMap[commandName] = commandAction; } /// /// ж��ָ�� /// /// ָ������ public void RemoveOptionCommand(string commandName) { if (commandMap.ContainsKey(commandName)) { commandMap.Remove(commandName); } else { Debug.Log($"���� {commandName} ��δע�ᣬ����ע����滻��ָ��"); } } #region �������� [YarnCommand("switch_tv")] public static void SwitchTV(string picName) { Debug.Log($"switch_tv {picName}"); } [YarnCommand("indoor")] public static void Indoor() { MainUIController.Instance.HideMainUI(); } [YarnCommand("character_into")] public static void CharacterInto(string picName) { Debug.Log($"character_into {picName}"); } [YarnCommand("character_moveto_fix")] public static void CharacterMoveToFix() { Debug.Log("character_moveto_fix"); } [YarnCommand("cover")] public static void Cover() { Debug.Log("Cover"); } [YarnCommand("load_scene")] public static IEnumerator LoadScene(string sceneName) { yield return SceneLoader.Instance.LoadSceneAsync(sceneName); } [YarnCommand("unload_scene")] public static IEnumerator UnloadScene(string sceneName) { yield return SceneLoader.Instance.UnloadSceneAsync(sceneName); } [YarnCommand("init_fix")] public static void InitFix() { } [YarnCommand("hide_dialog")] public static void HideDialog() { DialogUiViewer.Instance.HideDialog(); } #endregion } }