Browse Source

Refactored ui.encyclopedia namespace

James Peret 2 years ago
parent
commit
76b61e5707

+ 28 - 25
Runtime/Encyclopedia/DefaultEncyclopediaArticle.cs

@@ -3,31 +3,34 @@ using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
 
-[CreateAssetMenu(fileName = "Encyclopedia Article", menuName = "KairoEngine/Encyclopedia Article"), HideMonoScript]
-public class DefaultEncyclopediaArticle : ScriptableObject, IEncyclopediaArticle
+namespace KairoEngine.UI.Encyclopedia
 {
-    public string title = "Example Article Title";
-    public Sprite icon;
-    public Sprite image;
-    public string author;
-    public string date;
-    public string description;
-    [HideLabel, TextArea()] public string text;
-
-    public EncyclopediaArticle GetArticle()
+    [CreateAssetMenu(fileName = "Encyclopedia Article", menuName = "KairoEngine/Encyclopedia Article"), HideMonoScript]
+    public class DefaultEncyclopediaArticle : ScriptableObject, IEncyclopediaArticle
     {
-        var article = new EncyclopediaArticle();
-        article.id = title;
-        article.title = title;
-        article.description = description;
-        article.icon = icon;
-        article.content.Add("title", title);
-        article.content.Add("author", author);
-        article.content.Add("date", date);
-        article.content.Add("text", text);
-        article.images.Add("icon", icon);
-        article.images.Add("image", image);
-        //Debug.Log($"Created article with {article.content.Keys.Count} content keys");
-        return article;
+        public string title = "Example Article Title";
+        public Sprite icon;
+        public Sprite image;
+        public string author;
+        public string date;
+        public string description;
+        [HideLabel, TextArea()] public string text;
+
+        public EncyclopediaArticle GetArticle()
+        {
+            var article = new EncyclopediaArticle();
+            article.id = title;
+            article.title = title;
+            article.description = description;
+            article.icon = icon;
+            article.content.Add("title", title);
+            article.content.Add("author", author);
+            article.content.Add("date", date);
+            article.content.Add("text", text);
+            article.images.Add("icon", icon);
+            article.images.Add("image", image);
+            //Debug.Log($"Created article with {article.content.Keys.Count} content keys");
+            return article;
+        }
     }
-}
+}

+ 26 - 22
Runtime/Encyclopedia/DefaultEncyclopediaCategory.cs

@@ -2,33 +2,37 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
-public class DefaultEncyclopediaCategory : EncyclopediaCategory
+
+namespace KairoEngine.UI.Encyclopedia
 {
-    public List<DefaultEncyclopediaCategoryArticle> articles = new List<DefaultEncyclopediaCategoryArticle>();
+    public class DefaultEncyclopediaCategory : EncyclopediaCategory
+    {
+        public List<DefaultEncyclopediaCategoryArticle> articles = new List<DefaultEncyclopediaCategoryArticle>();
 
-    private List<EncyclopediaArticle> data = new List<EncyclopediaArticle>();
+        private List<EncyclopediaArticle> data = new List<EncyclopediaArticle>();
 
-    [System.Serializable]
-    public class DefaultEncyclopediaCategoryArticle
-    {
-        [HorizontalGroup("Line", 0.015f), HideLabel] public bool unlocked = true;
-        [HorizontalGroup("Line", 0.985f), HideLabel] public DefaultEncyclopediaArticle article;    
-    }
+        [System.Serializable]
+        public class DefaultEncyclopediaCategoryArticle
+        {
+            [HorizontalGroup("Line", 0.015f), HideLabel] public bool unlocked = true;
+            [HorizontalGroup("Line", 0.985f), HideLabel] public DefaultEncyclopediaArticle article;    
+        }
 
-    public override List<EncyclopediaArticle> GetArticles()
-    {
-        if(data.Count == 0) UpdateArticles();
-        return data;
-    }
+        public override List<EncyclopediaArticle> GetArticles()
+        {
+            if(data.Count == 0) UpdateArticles();
+            return data;
+        }
 
-    public override void UpdateArticles()
-    {
-        data = new List<EncyclopediaArticle>();
-        foreach (DefaultEncyclopediaCategoryArticle item in articles) 
+        public override void UpdateArticles()
         {
-            var article = item.article.GetArticle();
-            article.id = id + "_" + article.id;
-            data.Add(article);
+            data = new List<EncyclopediaArticle>();
+            foreach (DefaultEncyclopediaCategoryArticle item in articles) 
+            {
+                var article = item.article.GetArticle();
+                article.id = id + "_" + article.id;
+                data.Add(article);
+            }
         }
     }
-}
+}

+ 16 - 13
Runtime/Encyclopedia/EncyclopediaArticle.cs

@@ -4,18 +4,21 @@ using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
 
-[System.Serializable]
-public class EncyclopediaArticle
+namespace KairoEngine.UI.Encyclopedia
 {
-    public string id;
-    public string title;
-    public string description;
-    public Sprite icon;
-    public Dictionary<string,string> content = new Dictionary<string, string>();
-    public Dictionary<string,Sprite> images = new Dictionary<string, Sprite>();
-    public Dictionary<string,int> integers = new Dictionary<string, int>();
-    public Dictionary<string, float> floats = new Dictionary<string, float>();
-    public Dictionary<string, bool> booleans = new Dictionary<string, bool>();
-    public Dictionary<string, Func<EncyclopediaArticle>> functions = new Dictionary<string, Func<EncyclopediaArticle>>();
+    [System.Serializable]
+    public class EncyclopediaArticle
+    {
+        public string id;
+        public string title;
+        public string description;
+        public Sprite icon;
+        public Dictionary<string,string> content = new Dictionary<string, string>();
+        public Dictionary<string,Sprite> images = new Dictionary<string, Sprite>();
+        public Dictionary<string,int> integers = new Dictionary<string, int>();
+        public Dictionary<string, float> floats = new Dictionary<string, float>();
+        public Dictionary<string, bool> booleans = new Dictionary<string, bool>();
+        public Dictionary<string, Func<EncyclopediaArticle>> functions = new Dictionary<string, Func<EncyclopediaArticle>>();
 
-}
+    }
+}

+ 54 - 51
Runtime/Encyclopedia/EncyclopediaArticleUi.cs

@@ -5,63 +5,66 @@ using UnityEngine.UI;
 using TMPro;
 using Sirenix.OdinInspector;
 
-[HideMonoScript]
-public class EncyclopediaArticleUi : MonoBehaviour, IEncyclopediaArticleDataView
+namespace KairoEngine.UI.Encyclopedia
 {
-    public enum UiType
+    [HideMonoScript]
+    public class EncyclopediaArticleUi : MonoBehaviour, IEncyclopediaArticleDataView
     {
-        String,
-        Integer,
-        Float,
-        Image,
-    }
-    
-    public string articleDataKey = "title";
-    public UiType uiType = UiType.String;
-    [ShowIf("@uiType != UiType.Image")] public TextMeshProUGUI textMeshPro;
-    [ShowIf("@uiType == UiType.Image")] public Image imageComponent;
-    public bool showDebug = false;
-
-    public void Setup(EncyclopediaArticle article)
-    {
-        string result = "";
-        Sprite spriteImage = null;
-        switch (uiType)
+        public enum UiType
         {
-            case UiType.String:
-                article.content.TryGetValue(articleDataKey, out result);
-                break;
-            case UiType.Integer:
-                article.integers.TryGetValue(articleDataKey, out int intValue);
-                result += intValue;
-                break;
-            case UiType.Float:
-                article.floats.TryGetValue(articleDataKey, out float floatValue);
-                result += floatValue;
-                break;
-            case UiType.Image:
-                article.images.TryGetValue(articleDataKey, out spriteImage);
-                break;
-            default:
-                break;
+            String,
+            Integer,
+            Float,
+            Image,
         }
-        if(uiType != UiType.Image && textMeshPro != null) 
-        {
-            textMeshPro.text = result;
-            if(imageComponent != null) imageComponent.gameObject.SetActive(false);
-        }
-        else if(uiType == UiType.Image && imageComponent != null) 
+        
+        public string articleDataKey = "title";
+        public UiType uiType = UiType.String;
+        [ShowIf("@uiType != UiType.Image")] public TextMeshProUGUI textMeshPro;
+        [ShowIf("@uiType == UiType.Image")] public Image imageComponent;
+        public bool showDebug = false;
+
+        public void Setup(EncyclopediaArticle article)
         {
-            if(spriteImage != null)
+            string result = "";
+            Sprite spriteImage = null;
+            switch (uiType)
             {
-                imageComponent.sprite = spriteImage;
-                imageComponent.gameObject.SetActive(true);
+                case UiType.String:
+                    article.content.TryGetValue(articleDataKey, out result);
+                    break;
+                case UiType.Integer:
+                    article.integers.TryGetValue(articleDataKey, out int intValue);
+                    result += intValue;
+                    break;
+                case UiType.Float:
+                    article.floats.TryGetValue(articleDataKey, out float floatValue);
+                    result += floatValue;
+                    break;
+                case UiType.Image:
+                    article.images.TryGetValue(articleDataKey, out spriteImage);
+                    break;
+                default:
+                    break;
             }
-            else imageComponent.gameObject.SetActive(false);
-            
+            if(uiType != UiType.Image && textMeshPro != null) 
+            {
+                textMeshPro.text = result;
+                if(imageComponent != null) imageComponent.gameObject.SetActive(false);
+            }
+            else if(uiType == UiType.Image && imageComponent != null) 
+            {
+                if(spriteImage != null)
+                {
+                    imageComponent.sprite = spriteImage;
+                    imageComponent.gameObject.SetActive(true);
+                }
+                else imageComponent.gameObject.SetActive(false);
+                
+            }
+            if(showDebug && (result == null || result == "")) 
+                Debug.Log($"Article did not contain content key {articleDataKey}. Content key count: {article.content.Keys.Count}", this.gameObject);
         }
-        if(showDebug && (result == null || result == "")) 
-            Debug.Log($"Article did not contain content key {articleDataKey}. Content key count: {article.content.Keys.Count}", this.gameObject);
-    }
 
-}
+    }
+}

+ 23 - 17
Runtime/Encyclopedia/EncyclopediaCategory.cs

@@ -3,24 +3,30 @@ using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
 
-[System.Serializable]
-public class EncyclopediaCategory : MonoBehaviour
+namespace KairoEngine.UI.Encyclopedia
 {
-    public string title = "Encyclopedia Category";
-    public string id = "Unique ID #123";
-    public Sprite icon;
-    public GameObject buttonPrefab;
-    public string layoutName = "default-view";
-    public bool showSubMenu = true;
-
-    public virtual List<EncyclopediaArticle> GetArticles()
+    [System.Serializable]
+    public class EncyclopediaCategory : MonoBehaviour
     {
-        return new List<EncyclopediaArticle>();
-    }
+        public string title = "Encyclopedia Category";
+        public string titleSingle = "article";
+        public string titlePlural = "articles";
+        public string id = "Unique ID #123";
+        public Sprite icon;
+        public Sprite image;
+        public GameObject buttonPrefab;
+        public string layoutName = "default-view";
+        public bool showSubMenu = true;
 
-    public virtual void UpdateArticles()
-    {
-        Debug.Log("Wrong class, no article here.");
-    }
+        public virtual List<EncyclopediaArticle> GetArticles()
+        {
+            return new List<EncyclopediaArticle>();
+        }
+
+        public virtual void UpdateArticles()
+        {
+            Debug.Log("Wrong class, no article here.");
+        }
 
-}
+    }
+}

+ 36 - 32
Runtime/Encyclopedia/EncyclopediaController.cs

@@ -4,50 +4,54 @@ using UnityEngine;
 using Sirenix.OdinInspector;
 using KairoEngine.UI.InteractionHandler;
 
-[HideMonoScript]
-public class EncyclopediaController : MonoBehaviour, IClickHandler
+namespace KairoEngine.UI.Encyclopedia
 {
-    [ShowInInspector, HorizontalGroup("IndexLine", 0.7f), LabelText("Index")] public int menuIndex;
-    [ShowInInspector, HorizontalGroup("IndexLine", 0.3f), HideLabel] public int subMenuIndex;
+    [HideMonoScript]
+    public class EncyclopediaController : MonoBehaviour, IClickHandler
+    {
+        [ShowInInspector, HorizontalGroup("IndexLine", 0.7f), LabelText("Index")] public int menuIndex;
+        [ShowInInspector, HorizontalGroup("IndexLine", 0.3f), HideLabel] public int subMenuIndex;
 
-    public EncyclopediaUi encyclopediaUi;
-    public GameObject categoryButtomPrefab;
-    public List<EncyclopediaCategory> categories = new List<EncyclopediaCategory>();
+        public EncyclopediaUi encyclopediaUi;
+        public GameObject categoryButtomPrefab;
+        public List<EncyclopediaCategory> categories = new List<EncyclopediaCategory>();
 
-    [Button("Build Menu"), ButtonGroup("Buttons")]
-    public void BuildMenu()
-    {
-        if(encyclopediaUi != null) encyclopediaUi.Populate();
-        else Debug.LogError("Missing Encyclopedia UI in Encyclopedia Controller", this.gameObject);
-    }
+        [Button("Build Menu"), ButtonGroup("Buttons")]
+        public void BuildMenu()
+        {
+            if(encyclopediaUi != null) encyclopediaUi.Populate();
+            else Debug.LogError("Missing Encyclopedia UI in Encyclopedia Controller", this.gameObject);
+        }
 
-    public void OnClick(string id)
-    {
-        for (int i = 0; i < categories.Count; i++)
+        public void OnClick(string id)
         {
-            if(id == categories[i].id) 
-            {
-                menuIndex = i;
-                Navigate();
-                return;
-            }
-            var articles = categories[i].GetArticles();
-            for (int a = 0; a < articles.Count; a++)
+            for (int i = 0; i < categories.Count; i++)
             {
-                if(id == articles[a].id)
+                if(id == categories[i].id) 
                 {
                     menuIndex = i;
-                    subMenuIndex = a;
                     Navigate();
                     return;
                 }
+                var articles = categories[i].GetArticles();
+                for (int a = 0; a < articles.Count; a++)
+                {
+                    if(id == articles[a].id)
+                    {
+                        menuIndex = i;
+                        subMenuIndex = a;
+                        Navigate();
+                        return;
+                    }
+                }
             }
         }
-    }
 
-    [Button("Navigate"), ButtonGroup("Buttons")]
-    public void Navigate()
-    {
-        if(encyclopediaUi != null) encyclopediaUi.Navigate();
+        [Button("Navigate"), ButtonGroup("Buttons")]
+        public void Navigate()
+        {
+            if(encyclopediaUi != null) encyclopediaUi.Navigate();
+        }
     }
-}
+
+}

+ 150 - 147
Runtime/Encyclopedia/EncyclopediaUi.cs

@@ -5,179 +5,182 @@ using UnityEngine.UI;
 using Sirenix.OdinInspector;
 using KairoEngine.UI.InteractionHandler;
 
-[HideMonoScript]
-public class EncyclopediaUi : MonoBehaviour
+namespace KairoEngine.UI.Encyclopedia
 {
-    public EncyclopediaController controller;
-    public GameObject menuGameObject;
-    public GameObject subMenuGameObject;
-    public GameObject viewsGameObject;
-    public Transform menuContainer;
-    public Transform subMenuContainer;
-    public bool createOnStart = true;
-    public bool showDebug = false;
-    public List<EncyclopediaUiView> views;
-    private List<SelectedButton> menuButtonSelection;
-    private List<SelectedButton> subMenuButtonSelection;
-    private int menuIndex = -1;
-    private int subMenuIndex = -1;
-    private int currentMenuIndex = -1;
-    private int currentSubMenuIndex = -1;
-
-    private void Start()
+    [HideMonoScript]
+    public class EncyclopediaUi : MonoBehaviour
     {
-        if(menuGameObject == null) Debug.LogError("Missing Menu GameObject in EncyclopediaUi", this.gameObject);
-        if(subMenuGameObject == null) Debug.LogError("Missing submenu GameObject in EncyclopediaUi", this.gameObject);
-        if(viewsGameObject == null) Debug.LogError("Missing views GameObject in EncyclopediaUi", this.gameObject);
-        if(createOnStart) Populate();
-    }
+        public EncyclopediaController controller;
+        public GameObject menuGameObject;
+        public GameObject subMenuGameObject;
+        public GameObject viewsGameObject;
+        public Transform menuContainer;
+        public Transform subMenuContainer;
+        public bool createOnStart = true;
+        public bool showDebug = false;
+        public List<EncyclopediaUiView> views;
+        private List<SelectedButton> menuButtonSelection;
+        private List<SelectedButton> subMenuButtonSelection;
+        private int menuIndex = -1;
+        private int subMenuIndex = -1;
+        private int currentMenuIndex = -1;
+        private int currentSubMenuIndex = -1;
 
-    private void Update()
-    {
-        
-    }
+        private void Start()
+        {
+            if(menuGameObject == null) Debug.LogError("Missing Menu GameObject in EncyclopediaUi", this.gameObject);
+            if(subMenuGameObject == null) Debug.LogError("Missing submenu GameObject in EncyclopediaUi", this.gameObject);
+            if(viewsGameObject == null) Debug.LogError("Missing views GameObject in EncyclopediaUi", this.gameObject);
+            if(createOnStart) Populate();
+        }
 
-    [Button("Show Submenu"), ButtonGroup("EditorActions")]
-    public void ShowSubmenu() => subMenuGameObject.SetActive(true);
+        private void Update()
+        {
+            
+        }
 
-    [Button("Hide Submenu"), ButtonGroup("EditorActions")]
-    public void HideSubmenu() => subMenuGameObject.SetActive(false);
+        [Button("Show Submenu"), ButtonGroup("EditorActions")]
+        public void ShowSubmenu() => subMenuGameObject.SetActive(true);
 
-    public void Populate()
-    {
-        if(showDebug) Debug.Log("Creating Encyclopedia UI Element");
-        menuIndex = controller.menuIndex;
-        subMenuIndex = controller.subMenuIndex;
-        currentMenuIndex = controller.menuIndex;
-        currentSubMenuIndex = controller.subMenuIndex;
-        CreateMenu();
-        CreateSubMenu();
-        ShowArticle();
-    }
+        [Button("Hide Submenu"), ButtonGroup("EditorActions")]
+        public void HideSubmenu() => subMenuGameObject.SetActive(false);
 
-    public void CreateMenu()
-    {
-        if(controller == null || menuContainer == null) return;
-        menuButtonSelection = new List<SelectedButton>();
-        Button[] oldButtons = menuContainer.GetComponentsInChildren<Button>();
-        int counter = 0;
-        //if(showDebug) Debug.Log($"Destroying {oldButtons.Length} menu buttons");
-        foreach (Button item in oldButtons) DestroyImmediate(item.gameObject);
-        foreach (EncyclopediaCategory category in controller.categories)
+        public void Populate()
         {
-            var obj = Instantiate(controller.categoryButtomPrefab, new Vector3(), Quaternion.identity, menuContainer.transform);
-            var btnData = obj.GetComponent<ButtonData>();
-            if(btnData != null) btnData.Setup(category.title, category.icon);
-            var handler = obj.GetComponent<ClickHandler>();
-            if(handler != null) handler.Setup(category.id, (IClickHandler)controller);
-            var selectedButton = obj.GetComponent<SelectedButton>();
-            if(selectedButton != null) menuButtonSelection.Add(selectedButton);
-            counter += 1;
+            if(showDebug) Debug.Log("Creating Encyclopedia UI Element");
+            menuIndex = controller.menuIndex;
+            subMenuIndex = controller.subMenuIndex;
+            currentMenuIndex = controller.menuIndex;
+            currentSubMenuIndex = controller.subMenuIndex;
+            CreateMenu();
+            CreateSubMenu();
+            ShowArticle();
         }
-        if(menuIndex < menuButtonSelection.Count) 
+
+        public void CreateMenu()
         {
-            //menuIndex = controller.menuIndex;
-            menuButtonSelection[menuIndex].Select();
+            if(controller == null || menuContainer == null) return;
+            menuButtonSelection = new List<SelectedButton>();
+            Button[] oldButtons = menuContainer.GetComponentsInChildren<Button>();
+            int counter = 0;
+            //if(showDebug) Debug.Log($"Destroying {oldButtons.Length} menu buttons");
+            foreach (Button item in oldButtons) DestroyImmediate(item.gameObject);
+            foreach (EncyclopediaCategory category in controller.categories)
+            {
+                var obj = Instantiate(controller.categoryButtomPrefab, new Vector3(), Quaternion.identity, menuContainer.transform);
+                var btnData = obj.GetComponent<ButtonData>();
+                if(btnData != null) btnData.Setup(category.title, category.icon);
+                var handler = obj.GetComponent<ClickHandler>();
+                if(handler != null) handler.Setup(category.id, (IClickHandler)controller);
+                var selectedButton = obj.GetComponent<SelectedButton>();
+                if(selectedButton != null) menuButtonSelection.Add(selectedButton);
+                var categoryDataViews = obj.GetComponentsInChildren<IEncyclopediaCategoryDataView>(true);
+                if(categoryDataViews != null) foreach (var view in categoryDataViews) view.Setup(category);
+                counter += 1;
+            }
+            if(menuIndex < menuButtonSelection.Count) 
+            {
+                //menuIndex = controller.menuIndex;
+                menuButtonSelection[menuIndex].Select();
+            }
+            //if(showDebug) Debug.Log($"Created {counter} menu buttons");
         }
-        //if(showDebug) Debug.Log($"Created {counter} menu buttons");
-    }
 
-    public void CreateSubMenu()
-    {
-        if(controller == null || subMenuContainer == null) return;
-        subMenuButtonSelection = new List<SelectedButton>();
-        Button[] oldButtons = subMenuContainer.GetComponentsInChildren<Button>();
-        int counter = 0;
-        var category = controller.categories[controller.menuIndex];
-        category.UpdateArticles();
-        //if(showDebug) Debug.Log($"Destroying {oldButtons.Length} sub menu buttons");
-        foreach (Button item in oldButtons) DestroyImmediate(item.gameObject);
-        foreach (EncyclopediaArticle article in category.GetArticles())
+        public void CreateSubMenu()
         {
-            var obj = Instantiate(category.buttonPrefab, new Vector3(), Quaternion.identity, subMenuContainer.transform);
-            var btnData = obj.GetComponent<ButtonData>();
-            Sprite icon = null;
-            if(article.icon != null) icon = article.icon;
-            else icon = category.icon;
-            if(btnData != null) btnData.Setup(article.title, icon);
-            var handler = obj.GetComponent<ClickHandler>();
-            if(handler != null) handler.Setup(article.id, (IClickHandler)controller);
-            var selectedButton = obj.GetComponent<SelectedButton>();
-            if(selectedButton != null) subMenuButtonSelection.Add(selectedButton);
-            counter += 1;
+            if(controller == null || subMenuContainer == null) return;
+            subMenuButtonSelection = new List<SelectedButton>();
+            Button[] oldButtons = subMenuContainer.GetComponentsInChildren<Button>();
+            int counter = 0;
+            var category = controller.categories[controller.menuIndex];
+            category.UpdateArticles();
+            //if(showDebug) Debug.Log($"Destroying {oldButtons.Length} sub menu buttons");
+            foreach (Button item in oldButtons) DestroyImmediate(item.gameObject);
+            foreach (EncyclopediaArticle article in category.GetArticles())
+            {
+                var obj = Instantiate(category.buttonPrefab, new Vector3(), Quaternion.identity, subMenuContainer.transform);
+                var btnData = obj.GetComponent<ButtonData>();
+                Sprite icon = null;
+                if(article.icon != null) icon = article.icon;
+                else icon = category.icon;
+                if(btnData != null) btnData.Setup(article.title, icon);
+                var handler = obj.GetComponent<ClickHandler>();
+                if(handler != null) handler.Setup(article.id, (IClickHandler)controller);
+                var selectedButton = obj.GetComponent<SelectedButton>();
+                if(selectedButton != null) subMenuButtonSelection.Add(selectedButton);
+                var contentDataViews = obj.GetComponentsInChildren<IEncyclopediaArticleDataView>(true);
+                foreach (var item in contentDataViews) item.Setup(article);
+                counter += 1;
+            }
+            if(controller.subMenuIndex < subMenuButtonSelection.Count && menuIndex == currentMenuIndex)
+            {
+                //subMenuIndex = controller.subMenuIndex;
+                subMenuButtonSelection[subMenuIndex].Select();
+            }
+            //if(showDebug) Debug.Log($"Created {counter} sub menu buttons");
         }
-        if(controller.subMenuIndex < subMenuButtonSelection.Count && menuIndex == currentMenuIndex)
+
+        public void ShowArticle()
         {
-            //subMenuIndex = controller.subMenuIndex;
+            if(controller == null) return;
+            var category = controller.categories[menuIndex];
+            var articles = category.GetArticles();
+            var article = articles[subMenuIndex];
+            var layout = GetView(category.layoutName);
+            if(layout == null) return;
+            HideViews();
+            layout.view.SetActive(true);
+            var contentDataViews = layout.view.GetComponentsInChildren<IEncyclopediaArticleDataView>(true);
+            foreach (var item in contentDataViews) item.Setup(article);
+            foreach (var btn in subMenuButtonSelection) btn.Deselect();
             subMenuButtonSelection[subMenuIndex].Select();
+            currentMenuIndex = menuIndex;
+            currentSubMenuIndex = subMenuIndex;
         }
-        //if(showDebug) Debug.Log($"Created {counter} sub menu buttons");
-    }
 
-    public void ShowArticle()
-    {
-        if(controller == null) return;
-        var category = controller.categories[menuIndex];
-        var articles = category.GetArticles();
-        var article = articles[subMenuIndex];
-        var layout = GetView(category.layoutName);
-        if(layout == null) return;
-        HideViews();
-        layout.view.SetActive(true);
-        var contentDataViews = layout.view.GetComponentsInChildren<IEncyclopediaArticleDataView>(true);
-        if(showDebug) Debug.Log($"Showing article content in layout {category.layoutName} and found {contentDataViews.Length} dataViewComponents");
-        foreach (var item in contentDataViews)
+        public void Navigate()
         {
-            item.Setup(article);
+            if(controller == null) return;
+            // Navigated to different category
+            if(menuIndex != controller.menuIndex)
+            {
+                menuIndex = controller.menuIndex;
+                CreateMenu();
+                CreateSubMenu();
+            }
+            else if (currentMenuIndex != menuIndex && currentSubMenuIndex == subMenuIndex)
+            {
+                if(controller.subMenuIndex > controller.categories[menuIndex].GetArticles().Count) return;
+                else subMenuIndex = controller.subMenuIndex;
+                ShowArticle();
+            }
+            if(subMenuIndex != controller.subMenuIndex)
+            {
+                if(controller.subMenuIndex > controller.categories[menuIndex].GetArticles().Count) return;
+                else subMenuIndex = controller.subMenuIndex;
+                ShowArticle();
+            }
         }
-        foreach (var btn in subMenuButtonSelection) btn.Deselect();
-        subMenuButtonSelection[subMenuIndex].Select();
-        currentMenuIndex = menuIndex;
-        currentSubMenuIndex = subMenuIndex;
-    }
 
-    public void Navigate()
-    {
-        if(controller == null) return;
-        // Navigated to different category
-        if(menuIndex != controller.menuIndex)
+        public EncyclopediaUiView GetView(string title)
         {
-            menuIndex = controller.menuIndex;
-            CreateMenu();
-            CreateSubMenu();
+            for (int i = 0; i < views.Count; i++)
+            {
+                if(views[i].title == title) return views[i];
+            }
+            return null;
         }
-        else if (currentMenuIndex != menuIndex && currentSubMenuIndex == subMenuIndex)
+
+        public void HideViews()
         {
-            if(controller.subMenuIndex > controller.categories[menuIndex].GetArticles().Count) return;
-            else subMenuIndex = controller.subMenuIndex;
-            ShowArticle();
+            foreach (var layout in views) layout.view.SetActive(false);
         }
-        if(subMenuIndex != controller.subMenuIndex)
-        {
-            if(controller.subMenuIndex > controller.categories[menuIndex].GetArticles().Count) return;
-            else subMenuIndex = controller.subMenuIndex;
-            ShowArticle();
-        }
-    }
 
-    public EncyclopediaUiView GetView(string title)
-    {
-        for (int i = 0; i < views.Count; i++)
+        [System.Serializable]
+        public class EncyclopediaUiView
         {
-            if(views[i].title == title) return views[i];
+            [HorizontalGroup("Line", 0.4f), HideLabel] public string title;
+            [HorizontalGroup("Line", 0.6f), HideLabel] public GameObject view;
         }
-        return null;
-    }
-
-    public void HideViews()
-    {
-        foreach (var layout in views) layout.view.SetActive(false);
-    }
-
-    [System.Serializable]
-    public class EncyclopediaUiView
-    {
-        [HorizontalGroup("Line", 0.4f), HideLabel] public string title;
-        [HorizontalGroup("Line", 0.6f), HideLabel] public GameObject view;
     }
-}
+}

+ 6 - 2
Runtime/Encyclopedia/IEncyclopediaArticle.cs

@@ -2,7 +2,11 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
-public interface IEncyclopediaArticle
+namespace KairoEngine.UI.Encyclopedia
 {
-    EncyclopediaArticle GetArticle();
+    public interface IEncyclopediaArticle
+    {
+        EncyclopediaArticle GetArticle();
+    }
 }
+

+ 6 - 3
Runtime/Encyclopedia/IEncyclopediaArticleDataView.cs

@@ -2,7 +2,10 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
-public interface IEncyclopediaArticleDataView
+namespace KairoEngine.UI.Encyclopedia
 {
-    void Setup(EncyclopediaArticle article);
-}
+    public interface IEncyclopediaArticleDataView
+    {
+        void Setup(EncyclopediaArticle article);
+    }
+}