====== Godot Dialogue Manager 3 med C# ====== Denne guide viser et simpelt eksempel af brug af Dialogue Manager 3 i Godot 4 med C#. * [[https://github.com/nathanhoad/godot_dialogue_manager/tree/main/docs|Dialog Manager 3 - Dokumentation]] (//**its pretty good actually**//) * Video : https://www.youtube.com/watch?v=U3Mimia-904 * [[https://dialogue.nathanhoad.net/|Dialogue Manager 3]] ---- ===== Installer Dialogue Manager 3 ===== (easy peasy, japanesee) - Åbn AssetLib i Godot - Søg efter “Dialogue Manager 3” - Installer plugin - Gå til: Project → Project Settings → Plugins - Aktivér pluginet (se nedenstående) {{ :images:dm3_plugin_enable.png |}} ---- ===== Opret en dialogfil ===== {{ :images:dm3_createnewdialogue.png |}} Indsæt følgende i filen: ~ start NPC: Hej! Velkommen til [HTX|EUC Nord] 👋 - Hvem er du? NPC: Jeg er skolens NPC. => END - Farvel NPC: Vi ses! => END Begreber i ovenstående: * Cues (labels) * Dialogue Line * Option * Comment * Jump END * Random word * Indentation (indryk/tabulering) - //indrykning er vigtigt.. ligesom i Python// Gem filen. (opret en dedikeret folder til dine dialoger) som f.eks.: res://dialogues/htx_dialog.dialogue ---- ==== Test / Debugging af dialog ==== Test din dialog ved at klikke 'test dialogue file ..' i menuen. {{ :images:dm3_test_dialogue.png |}} ---- ==== Dialog Manager Syntax ==== ^ Tegn ^ betydning ^ | Martin : Dingo ate me baby! | Martin says : Dingo ate me baby! | | ''~'' | Cues (Label) | | ''-'' | Option | | ''=>'' | Jump to cue/label | | ''=><'' | Jump to snippet, and return (sub-routine) | | ''**[**sayA**%%|%%**sayB**%%|%%**sayC**]**'' | Skifter tilfældig mellem sayA, sayB og sayC | | ''#'' | Kommentar | ---- ==== Multiline ==== Man kan anvende multilines for at vise flere linjer dialog fra en enkelt NPC. Her bruger du enten '**\n**' til at adskille dem på en enkelt linje eller indryk hver yderligere linje. Nathan: Prepare to duel me, coward! I’ve studied the fine art of… pointing a stick and looking angry. Also, I’m really good at tripping over my own feet. ---- ===== C# Script til at starte dialog ===== Tilføj først DialogManager som en Auto-load klasse. {{ :images:dm3_add_dm_singleton.png |}} Nu kan du henvise til den fra alle dine C# scripts. Tilføj et C# i dit FileSystem: using Godot; using System; using DialogueManagerRuntime; public partial class DialogueTrigger : Area2D { [Export] public Resource DialogueResource; [Export] public string DialogueStartLabel = "start"; //default er altid 'start' public override void _Ready() { base._Ready(); if (this.DialogueResource == null) { GD.Print("Error: You forgot to assign a dialogue resource.."); } } public void StartTheDialog() { DialogueManager.ShowDialogueBalloon(DialogueResource, DialogueStartLabel ); } public void OnBodyEnter(Node2D other) { if (other.Name == "Player") { this.StartTheDialog(); } } } ---- ===== Forbind dialogen i Inspector ===== - Find feltet "Dialogue Resource" - Træk din dialog ressource f.eks ''htx_dialogue.dialogue'' ind i feltet - Angiv evt. StartDialogLabel. (hvis den er forskellig fra ''start'') ---- ===== Typiske fejl ===== ^ Fejl ^ Årsag ^ | DialogueManager.Instance er null | Plugin ikke aktiveret | | Intet sker | DialogueResource ikke sat | | C# build fejl | .NET SDK mangler | ==== Random tekst ==== For at gøre dialogerne mindre ensformige kan vi indføre tilfældigheder i valget af linier & jumps i dialog scriptet. Nathan: I will say this. % Nathan: And then I might say this % Nathan: Or maybe this % Nathan: Or even this? ==== Random ord-valg ==== Nathan: Hi there partner, i hope you have a [wonderful|awesome] day. ==== Random Jumps ==== Combining the randomized line syntax with the jump syntax to randomly jump to a pool of titles. Nathan: I am feeling lucky. I am gonna choose a random jump :) % => first % => second % => third ---- ==== Variable (global) ==== Opret en klasse du vil anvende som en global (Autoload). using Godot; using System; public partial class MyGlobal : Node { public Boolean has_key = false; public int gold = 5; } Tilføj dit script til Autoload, så det kan tilgåes fra alle scripts på tværs af scener. {{ :images:dm3_add_global.png |}} ---- === Brug global variabel === Som en del af en dialog Nathan : I have {{ MyGlobal.gold }} gold nuggets in me pocket.. I en betinget option - Buy sword [if MyGlobal.gold >= 8] - Leave shop * Buy option bliver 'ghosted' indtil guld når 8 eller mere. Du kan også lave inline if/else statements, for fx. at få ental/flertal på plads ift. antal. Nathan: I have {{MyGlobal.coins}} [if MyGlobal.coins == 1]coin[else]coins[/if], which is nice! ---- ==== Interaktion med C# kode ==== ^ Tegn ^ betydning ^ | ''do zelda.LookDown'' | Kalder funktion ''LookDown()'' på 'zelda' objekt | | ''set State.hasAble = true'' | ændrer propertie i State klasse | ----