From 1bcea6f3cd686ba785abb2ee94b4fff628478ec1 Mon Sep 17 00:00:00 2001
From: Samuel Truman <samuel.truman@uni-wuerzburg.de>
Date: Mon, 24 Apr 2023 14:44:55 +0200
Subject: [PATCH] Refactoring

---
 Assets/UI/DialogueBox/DialogueBox.cs          | 86 ++++++-------------
 Assets/UI/DialogueBox/DialogueBox.uxml        | 18 ++--
 Assets/UI/DialogueBox/StateMachine.cs         | 51 -----------
 Assets/UI/DialogueBox/Storyline.cs            | 45 ++++++++++
 ...StateMachine.cs.meta => Storyline.cs.meta} |  0
 5 files changed, 77 insertions(+), 123 deletions(-)
 delete mode 100644 Assets/UI/DialogueBox/StateMachine.cs
 create mode 100644 Assets/UI/DialogueBox/Storyline.cs
 rename Assets/UI/DialogueBox/{StateMachine.cs.meta => Storyline.cs.meta} (100%)

diff --git a/Assets/UI/DialogueBox/DialogueBox.cs b/Assets/UI/DialogueBox/DialogueBox.cs
index 01e775c..913c592 100644
--- a/Assets/UI/DialogueBox/DialogueBox.cs
+++ b/Assets/UI/DialogueBox/DialogueBox.cs
@@ -2,88 +2,54 @@
 using UnityEngine;
 using UnityEngine.UIElements;
 
+[RequireComponent(typeof(UIDocument))]
 public class DialogueBox : MonoBehaviour {
+    private UIDocument uiDocument;
+    private VisualElement root;
+    private Button[] buttons;
 
-    string ActorName = "ActorName";
-    string DialogueText = "DialogueText";
 
-    TextElement[] Buttons = new TextElement[5];
-    
+    public void Awake() {
+        uiDocument = GetComponent<UIDocument>();
+    }
+
     public void OnEnable() {
-        var uiDocument = GetComponent<UIDocument>();
-        VisualElement root = uiDocument.rootVisualElement;
+        root = uiDocument.rootVisualElement;
         var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/UI/DialogueBox/DialogueBox.uxml");
         var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/UI/DialogueBox/DialogueBox.uss");
         VisualElement tree = visualTree.CloneTree();
         tree.styleSheets.Add(styleSheet);
         root.Add(tree);
+        buttons = root.Query<Button>().ToList().ToArray();
 
-        Buttons[0] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button1");
-        Buttons[1] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button2");
-        Buttons[2] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button3");
-        Buttons[3] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button4");
-        Buttons[4] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button5");
-
-        setActor(ActorName);
-        setText(DialogueText);
-
-        Buttons[0].RegisterCallback<MouseUpEvent>((e) => {
-        GetComponent<StateMachine>().nextNote(0);     
-        });
-
-        Buttons[1].RegisterCallback<MouseUpEvent>((e) => {
-        GetComponent<StateMachine>().nextNote(1);       
-        });
-
-        Buttons[2].RegisterCallback<MouseUpEvent>((e) => {
-            GetComponent<StateMachine>().nextNote(2);
-        });
-
-        Buttons[3].RegisterCallback<MouseUpEvent>((e) => {
-            GetComponent<StateMachine>().nextNote(3);
-        });
-
-        Buttons[4].RegisterCallback<MouseUpEvent>((e) => {
-            GetComponent<StateMachine>().nextNote(4);
-        });
+        SetActor("ActorName");
+        SetText("DialogueText");
 
+        for(var i = 0; i < buttons.Length; i++) {
+            var index = i;
+            buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<Storyline>().ApplyTransition(index));
+        }
     }
 
-    public void setActor(string actor) {
-        GetComponent<UIDocument>().rootVisualElement.Q<Label>("Actor").text = actor;
+    public void SetActor(string actor) {
+        root.Q<Label>("Actor").text = actor;
     }
 
-    public void setText(string text) {
-        GetComponent<UIDocument>().rootVisualElement.Q<TextElement>("Dialogue").text = text;
+    public void SetText(string text) {
+        root.Q<TextElement>("Dialogue").text = text;
     }
 
-    public void setTransitions(StateMachine.Transition[] transitions) {
-        for (int i = 0; i < 5; i++) {
-            if (i < transitions.Length) {
-                Buttons[i].visible = true;
-                Buttons[i].text = transitions[i].TransitionName;
+    public void SetTransitions(Storyline.Transition[] transitions) {
+        for(var i = 0; i < buttons.Length; i++) {
+            if(i < transitions.Length) {
+                buttons[i].visible = true;
+                buttons[i].text = transitions[i].transitionText;
             }
             else {
-                Buttons[i].visible = false;
+                buttons[i].visible = false;
             }
         }
     }
-
-    public void setNote(string Actor, string Dialogue) {
-        setActor(Actor);
-        setText(Dialogue);
-    }
-
-    public void hideButton(int count)
-    {
-        Buttons[count].visible = false;  
-    }
-
-    public void showButton(int count)
-    {
-        Buttons[count].visible = true;
-    }
-
 }
 
 
diff --git a/Assets/UI/DialogueBox/DialogueBox.uxml b/Assets/UI/DialogueBox/DialogueBox.uxml
index ee6912c..d85ef07 100644
--- a/Assets/UI/DialogueBox/DialogueBox.uxml
+++ b/Assets/UI/DialogueBox/DialogueBox.uxml
@@ -1,17 +1,11 @@
 <UXML xmlns="UnityEngine.UIElements">
-
-        <Label name="Actor"/>
-
+    <Label name="Actor"/>
     <VisualElement class="row">
         <TextElement name="Dialogue"/>
     </VisualElement>
-
-
-  <Button name="Button1" />
-  <Button name="Button2" />
-  <Button name="Button3" />
-  <Button name="Button4" />
-  <Button name="Button5" />
-  
-  
+    <Button name="Button1"/>
+    <Button name="Button2"/>
+    <Button name="Button3"/>
+    <Button name="Button4"/>
+    <Button name="Button5"/>
 </UXML>
\ No newline at end of file
diff --git a/Assets/UI/DialogueBox/StateMachine.cs b/Assets/UI/DialogueBox/StateMachine.cs
deleted file mode 100644
index 032e792..0000000
--- a/Assets/UI/DialogueBox/StateMachine.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEditor;
-
-public class StateMachine : MonoBehaviour
-{
-    public Note currentNote;
-
-    public void nextNote(int count) {
-        currentNote = currentNote.Transitions[count].Target;
-        setNote();
-    }    
-
-    public void setNote() {
-        var dialogueBox = GetComponent<DialogueBox>();
-        dialogueBox.setActor(currentNote.ActorName);
-        dialogueBox.setText(currentNote.DialogueText);
-        dialogueBox.setTransitions(currentNote.Transitions);
-    }
-
-
-    public class Note {
-        public string ActorName;
-        public string DialogueText;
-        public Transition[] Transitions;
-
-        public Note(string actor,string dialogue) {
-            ActorName = actor;
-            DialogueText = dialogue;
-        }
-
-        public Note(string actor,string dialogue,Transition[] noteTransitions) {
-            ActorName = actor;
-            DialogueText = dialogue;
-            Transitions = noteTransitions;
-        }
-    }
-
-
-    public class Transition {
-        public string TransitionName;
-        public Note Target;
-
-        public Transition(string name,Note target){
-            TransitionName = name;
-            Target = target;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/Assets/UI/DialogueBox/Storyline.cs b/Assets/UI/DialogueBox/Storyline.cs
new file mode 100644
index 0000000..ff034e1
--- /dev/null
+++ b/Assets/UI/DialogueBox/Storyline.cs
@@ -0,0 +1,45 @@
+using UnityEngine;
+
+public class Storyline : MonoBehaviour {
+    public Node currentNode;
+
+    
+    public void ApplyTransition(int count) {
+        currentNode = currentNode.transitions[count].target;
+        UpdateUi();
+    }
+
+    public void UpdateUi() {
+        var dialogueBox = GetComponent<DialogueBox>();
+        dialogueBox.SetActor(currentNode.actorName);
+        dialogueBox.SetText(currentNode.dialogueText);
+        dialogueBox.SetTransitions(currentNode.transitions);
+    }
+
+
+    public class Node {
+        public readonly string actorName;
+        public readonly string dialogueText;
+        public readonly Transition[] transitions;
+
+        public Node(string actor, string dialogue) {
+            actorName = actor;
+            dialogueText = dialogue;
+        }
+
+        public Node(string actor, string dialogue, Transition[] transitions) : this(actor, dialogue) {
+            this.transitions = transitions;
+        }
+    }
+
+    
+    public class Transition {
+        public readonly string transitionText;
+        public readonly Node target;
+
+        public Transition(string text, Node target) {
+            transitionText = text;
+            this.target = target;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/UI/DialogueBox/StateMachine.cs.meta b/Assets/UI/DialogueBox/Storyline.cs.meta
similarity index 100%
rename from Assets/UI/DialogueBox/StateMachine.cs.meta
rename to Assets/UI/DialogueBox/Storyline.cs.meta
-- 
GitLab