Browse Source

Added Encyclopedia components

James Peret 2 years ago
parent
commit
0a3d9268f5

+ 8 - 0
Runtime/Encyclopedia.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c9a8bd4c1f73a7348a9149ff53e95357
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 27 - 0
Runtime/Encyclopedia/DefaultEncyclopediaArticle.cs

@@ -0,0 +1,27 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+[CreateAssetMenu(fileName = "Encyclopedia Article", menuName = "KairoEngine/Encyclopedia Article"), HideMonoScript]
+public class DefaultEncyclopediaArticle : ScriptableObject, IEncyclopediaArticle
+{
+    public string title = "Example Article Title";
+    public Sprite icon;
+    public Sprite image;
+    public string author;
+    public string date;
+    [HideLabel, TextArea()] public string text;
+
+    public EncyclopediaArticle GetArticle()
+    {
+        var article = new EncyclopediaArticle();
+        article.content.Add("title", title);
+        article.content.Add("author", title);
+        article.content.Add("date", title);
+        article.content.Add("text", text);
+        article.images.Add("icon", icon);
+        article.images.Add("image", image);
+        return article;
+    }
+}

+ 11 - 0
Runtime/Encyclopedia/DefaultEncyclopediaArticle.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 61c649f494551cc45b51ced509b744a7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 22 - 0
Runtime/Encyclopedia/DefaultEncyclopediaCategory.cs

@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+public class DefaultEncyclopediaCategory : EncyclopediaCategory
+{
+    public List<DefaultEncyclopediaCategoryArticle> articles = new List<DefaultEncyclopediaCategoryArticle>();
+
+    [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()
+    {
+        var data = new List<EncyclopediaArticle>();
+        foreach (var article in articles) data.Add(((IEncyclopediaArticle)article).GetArticle());
+        return data;
+    }
+}

+ 11 - 0
Runtime/Encyclopedia/DefaultEncyclopediaCategory.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e7252db11dbbf0f4fa65e837486eefaa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 17 - 0
Runtime/Encyclopedia/EncyclopediaArticle.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+[System.Serializable]
+public class EncyclopediaArticle
+{
+    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>>();
+
+}

+ 11 - 0
Runtime/Encyclopedia/EncyclopediaArticle.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 51961516f7c28d74ca79813bf9250d3c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 18 - 0
Runtime/Encyclopedia/EncyclopediaArticleUi.cs

@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EncyclopediaArticleUi : MonoBehaviour
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+}

+ 11 - 0
Runtime/Encyclopedia/EncyclopediaArticleUi.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a19b6bc42c55b384aa917a0c6332f23f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 20 - 0
Runtime/Encyclopedia/EncyclopediaCategory.cs

@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+[System.Serializable]
+public class EncyclopediaCategory : MonoBehaviour
+{
+    public string title = "Encyclopedia Category";
+    public Sprite icon;
+    public GameObject buttonPrefab;
+    public string layoutName = "default-view";
+    public bool showSubMenu = true;
+
+    public virtual List<EncyclopediaArticle> GetArticles()
+    {
+        return new List<EncyclopediaArticle>();
+    }
+
+}

+ 11 - 0
Runtime/Encyclopedia/EncyclopediaCategory.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7cd3bb869e0aca944b4b7d2a9aed6f2a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 19 - 0
Runtime/Encyclopedia/EncyclopediaController.cs

@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+[HideMonoScript]
+public class EncyclopediaController : MonoBehaviour
+{
+    public EncyclopediaUi encyclopediaUi;
+    public GameObject categoryButtomPrefab;
+    public List<EncyclopediaCategory> categories = new List<EncyclopediaCategory>();
+
+    [Button("Build Menu")]
+    public void BuildMenu()
+    {
+        if(encyclopediaUi == null) return;
+        encyclopediaUi.Populate();
+    }
+}

+ 11 - 0
Runtime/Encyclopedia/EncyclopediaController.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 910e804fff7315d4c9767a935fce8970
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 68 - 0
Runtime/Encyclopedia/EncyclopediaUi.cs

@@ -0,0 +1,68 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using Sirenix.OdinInspector;
+using KairoEngine.UI.InteractionHandler;
+
+[HideMonoScript]
+public class EncyclopediaUi : MonoBehaviour, IClickHandler
+{
+    public EncyclopediaController controller;
+    public GameObject menuGameObject;
+    public GameObject subMenuGameObject;
+    public GameObject viewsGameObject;
+    public Transform menuContainer;
+    public Transform subMenuContainer;
+    public bool showDebug = false;
+    public List<EncyclopediaUiView> views;
+
+    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);
+    }
+
+    private void Update()
+    {
+        
+    }
+
+    [Button("Show Submenu"), ButtonGroup("EditorActions")]
+    public void ShowSubmenu() => subMenuGameObject.SetActive(true);
+
+    [Button("Hide Submenu"), ButtonGroup("EditorActions")]
+    public void HideSubmenu() => subMenuGameObject.SetActive(false);
+
+    public void Populate()
+    {
+        if(controller == null || menuContainer == null) return;
+        Button[] oldButtons = menuContainer.GetComponentsInChildren<Button>();
+        int counter = 0;
+        if(showDebug) Debug.Log($"Destroying {oldButtons.Length} buttons");
+        foreach (Button item in oldButtons) DestroyImmediate(item.gameObject);
+        foreach (EncyclopediaCategory category in controller.categories)
+        {
+            var obj = Instantiate(category.buttonPrefab, 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.layoutName, this);
+            counter += 1;
+        }
+        if(showDebug) Debug.Log($"Created {counter} buttons");
+    }
+
+    public void OnClick(string title)
+    {
+        throw new System.NotImplementedException();
+    }
+
+    [System.Serializable]
+    public class EncyclopediaUiView
+    {
+        [HorizontalGroup("Line", 0.4f), HideLabel] public string title;
+        [HorizontalGroup("Line", 0.6f), HideLabel] public GameObject view;
+    }
+}

+ 11 - 0
Runtime/Encyclopedia/EncyclopediaUi.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 98b98e13809527c4aaf31158c2208ad3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Runtime/Encyclopedia/IEncyclopediaArticle.cs

@@ -0,0 +1,8 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public interface IEncyclopediaArticle
+{
+    EncyclopediaArticle GetArticle();
+}

+ 11 - 0
Runtime/Encyclopedia/IEncyclopediaArticle.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 383b1097556217b48bc2f03810a7c3ec
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: