Browse Source

Added encyclopedia article interface to placeable objects

James Peret 2 years ago
parent
commit
f2c0af9a3f

+ 39 - 0
Runtime/PlacedObjectEncyclopediaCategory.cs

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

+ 11 - 0
Runtime/PlacedObjectEncyclopediaCategory.cs.meta

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

+ 25 - 1
Runtime/PlacedObjectType.cs

@@ -7,12 +7,13 @@ using KairoEngine.Stockpiles;
 using Sirenix.OdinInspector;
 using KairoEngine.GameTools.Selectables;
 using KairoEngine.SFX;
+using KairoEngine.UI.Encyclopedia;
 
 namespace KairoEngine.Grids
 {
     [CreateAssetMenu(fileName = "PlaceObjectType", menuName = "KairoEngine/BuildingSystem/PlaceObjectType")]
     [HideMonoScript]
-    public class PlacedObjectType : ScriptableObject
+    public class PlacedObjectType : ScriptableObject, IEncyclopediaArticle
     {
         public static Dir GetNextDir(Dir dir) 
         {
@@ -295,5 +296,28 @@ namespace KairoEngine.Grids
                 case Dir.Right: return new Vector2Int(offset.y * -1, offset.x);
             }
         }
+
+        public EncyclopediaArticle GetArticle()
+        {
+            EncyclopediaArticle article = new EncyclopediaArticle();
+            article.id = title;
+            article.title = title;
+            article.icon = icon;
+            article.description = description;
+            article.content.Add("title", title);
+            article.content.Add("category", category);
+            article.content.Add("description", description);
+            article.integers.Add("width", width);
+            article.integers.Add("height", height);
+            article.images.Add("icon", icon);
+            article.images.Add("image", image);
+            article.integers.Add("cost-slots", cost.Count);
+            for (int i = 0; i < cost.Count; i++)
+            {
+                article.content.Add($"cost-{i}-type", cost[i].stockpileType.title);
+                article.integers.Add($"cost-{i}-value", cost[i].ammount);
+            }
+            return article;
+        }
     }
 }