using Godot; using Godot.Collections; using System.Threading.Tasks; namespace DialogueManagerRuntime { public partial class DialogueManager : Node { public static async Task GetNextDialogueLine(Resource dialogueResource, string key = "0", Array extraGameStates = null) { var dialogueManager = Engine.GetSingleton("DialogueManager"); dialogueManager.Call("_bridge_get_next_dialogue_line", dialogueResource, key, extraGameStates ?? new Array()); var result = await dialogueManager.ToSignal(dialogueManager, "bridge_get_next_dialogue_line_completed"); if ((RefCounted)result[0] == null) return null; return new DialogueLine((RefCounted)result[0]); } public static void ShowExampleDialogueBalloon(Resource dialogueResource, string key = "0", Array extraGameStates = null) { Engine.GetSingleton("DialogueManager").Call("show_example_dialogue_balloon", dialogueResource, key, extraGameStates ?? new Array()); } } public partial class DialogueLine : RefCounted { private string type = "dialogue"; public string Type { get => type; set => type = value; } private string next_id = ""; public string NextId { get => next_id; set => next_id = value; } private string character = ""; public string Character { get => character; set => character = value; } private string text = ""; public string Text { get => text; set => text = value; } private string translation_key = ""; public string TranslationKey { get => translation_key; set => translation_key = value; } private Array responses = new Array(); public Array Responses { get => responses; } private string time = null; public string Time { get => time; } private Dictionary pauses = new Dictionary(); private Dictionary speeds = new Dictionary(); private Array inline_mutations = new Array(); private Array extra_game_states = new Array(); public DialogueLine(RefCounted data) { type = (string)data.Get("type"); next_id = (string)data.Get("next_id"); character = (string)data.Get("character"); text = (string)data.Get("text"); translation_key = (string)data.Get("translation_key"); pauses = (Dictionary)data.Get("pauses"); speeds = (Dictionary)data.Get("speeds"); inline_mutations = (Array)data.Get("inline_mutations"); foreach (var response in (Array)data.Get("responses")) { responses.Add(new DialogueResponse(response)); } } } public partial class DialogueResponse : RefCounted { private string next_id = ""; public string NextId { get => next_id; set => next_id = value; } private bool is_allowed = true; public bool IsAllowed { get => is_allowed; set => is_allowed = value; } private string text = ""; public string Text { get => text; set => text = value; } private string translation_key = ""; public string TranslationKey { get => translation_key; set => translation_key = value; } public DialogueResponse(RefCounted data) { next_id = (string)data.Get("next_id"); is_allowed = (bool)data.Get("is_allowed"); text = (string)data.Get("text"); translation_key = (string)data.Get("translation_key"); } } }