using System; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif [CreateAssetMenu(menuName = "KernelPanic/Dialogue/Dialogue System")] public partial class DialogueSystem : ScriptableObject { [SerializeField] private DialogueSettings _settings; // https://stackoverflow.com/questions/2282476/actiont-vs-delegate-event public event EventHandler onDialogueLine; public void PlayLine(string key) { DialogueLine dl; dl.text = DialogueDatabase.ReadDialogue(key); // TODO: get dialogue line duration from FMOD dl.duration = _settings.HideAfter; onDialogueLine?.Invoke(this, dl); // TODO: tell FMOD to play the key } } public struct DialogueLine { public string text; public float duration; } #region Editor #if UNITY_EDITOR [CustomEditor(typeof(DialogueSystem))] public class DialogueSystemEditor : Editor { private DialogueSystem _dialogue; private string _key; private void OnEnable() { _dialogue = target as DialogueSystem; } public override void OnInspectorGUI() { base.OnInspectorGUI(); _key = EditorGUILayout.TextField("key", _key); if (GUILayout.Button("Play Line")) { _dialogue.PlayLine(_key); } } } #endif #endregion