From f5e15fa93d84acbae6a26b86fddf20add38bb485 Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Tue, 01 Apr 2025 13:21:41 +0000
Subject: [PATCH] #31 added inventory to savefile, added itemDatabase

---
 /dev/null                                     |   11 ---
 Assets/Scripts/Inventory/ItemDatabase.cs      |   75 +++++++++++++++++++++++++
 Assets/Scripts/Inventory/Inventory.cs         |   25 ++++++++
 Assets/Scripts/Saving.meta                    |    8 ++
 Assets/Scripts/Saving/SaveSystem.cs           |    0 
 Assets/Scripts/Saving/SaveSystem.cs.meta      |    2 
 Assets/Scripts/Saving/SaveData.cs.meta        |    2 
 Assets/Scripts/Inventory/ItemDatabase.cs.meta |    2 
 Assets/Scripts/PauseMenu.cs                   |    3 
 Assets/Scripts/Saving/SaveData.cs             |   29 +++++++++
 Assets/Scripts/Inventory/Item.cs              |    1 
 11 files changed, 142 insertions(+), 16 deletions(-)

diff --git a/Assets/Scripts/Inventory/Inventory.cs b/Assets/Scripts/Inventory/Inventory.cs
index edb224e..f622519 100644
--- a/Assets/Scripts/Inventory/Inventory.cs
+++ b/Assets/Scripts/Inventory/Inventory.cs
@@ -1,3 +1,4 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -18,6 +19,30 @@
         {
             Destroy(gameObject);
         }
+        if (SaveSystem.isGameLoaded)
+        {
+            LoadInventory();
+        }
+    }
+
+    private void LoadInventory()
+    {
+        SaveDataPlayer save = SaveSystem.LoadPlayer();
+        if (save != null)
+        {
+            foreach (SaveDataInventorySlot item in save.inventoryItems)
+            {
+                Item loadedItem = ItemDatabase.Instance.GetItem(item.itemId);
+                if (loadedItem != null)
+                {
+                    items.Add(new InventorySlot(loadedItem, item.quantity));
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load item with ID: {item.itemId}");
+                }
+            }
+        }
     }
 
     public bool AddItem(Item item, int quantity = 1)
diff --git a/Assets/Scripts/Inventory/Item.cs b/Assets/Scripts/Inventory/Item.cs
index 59f44d7..6d0871d 100644
--- a/Assets/Scripts/Inventory/Item.cs
+++ b/Assets/Scripts/Inventory/Item.cs
@@ -5,6 +5,7 @@
 [System.Serializable]
 public class Item : MonoBehaviour
 {
+    public int itemId;
     public string itemName;
     public Sprite itemIcon;
     public string itemDescription;
diff --git a/Assets/Scripts/Inventory/ItemDatabase.cs b/Assets/Scripts/Inventory/ItemDatabase.cs
new file mode 100644
index 0000000..c0a0067
--- /dev/null
+++ b/Assets/Scripts/Inventory/ItemDatabase.cs
@@ -0,0 +1,75 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ItemDatabase : MonoBehaviour
+{
+    public static ItemDatabase Instance { get; private set; }
+
+    [SerializeField]
+    private List<Item> items = new List<Item>();
+
+    private Dictionary<string, Item> itemDictionary = new Dictionary<string, Item>();
+    private Dictionary<int, Item> itemIdDictionary = new Dictionary<int, Item>();
+
+    private void Awake()
+    {
+        if (Instance == null)
+        {
+            Instance = this;
+            InitializeItemDictionary();
+        }
+        else
+        {
+            Destroy(gameObject);
+        }
+    }
+
+    private void InitializeItemDictionary()
+    {
+        itemDictionary.Clear();
+        itemIdDictionary.Clear();
+
+        foreach (Item item in items)
+        {
+            if (!itemDictionary.ContainsKey(item.itemName))
+            {
+                itemDictionary.Add(item.itemName, item);
+            }
+            else
+            {
+                Debug.LogError($"Duplicate item name found in ItemDatabase: {item.itemName}");
+            }
+
+            if (!itemIdDictionary.ContainsKey(item.itemId))
+            {
+                itemIdDictionary.Add(item.itemId, item);
+            }
+            else
+            {
+                Debug.LogError($"Duplicate item ID found in ItemDatabase: {item.itemId}");
+            }
+        }
+    }
+
+    public Item GetItem(string itemName)
+    {
+        if (itemDictionary.TryGetValue(itemName, out Item item))
+        {
+            return item;
+        }
+
+        Debug.LogWarning($"Item not found in database: {itemName}");
+        return null;
+    }
+
+    public Item GetItem(int itemId)
+    {
+        if (itemIdDictionary.TryGetValue(itemId, out Item item))
+        {
+            return item;
+        }
+
+        Debug.LogWarning($"Item not found in database: ID {itemId}");
+        return null;
+    }
+}
diff --git a/Assets/Scripts/SaveSystem.cs.meta b/Assets/Scripts/Inventory/ItemDatabase.cs.meta
similarity index 83%
rename from Assets/Scripts/SaveSystem.cs.meta
rename to Assets/Scripts/Inventory/ItemDatabase.cs.meta
index dd3f492..705d7cf 100644
--- a/Assets/Scripts/SaveSystem.cs.meta
+++ b/Assets/Scripts/Inventory/ItemDatabase.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 48b32dceea7ccc1499e20f72c9af2d85
+guid: e4d1fabb0e4577b4d987741f664e3d68
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/PauseMenu.cs b/Assets/Scripts/PauseMenu.cs
index 7227f6f..c995f60 100644
--- a/Assets/Scripts/PauseMenu.cs
+++ b/Assets/Scripts/PauseMenu.cs
@@ -62,7 +62,8 @@
     public void OnGameSaveClicked()
     {
         PlayerController playerController = GameObject.Find("Player").GetComponent<PlayerController>();
-        SaveSystem.SavePlayer(new SaveDataPlayer(playerController));
+        Inventory playerInventory = GameObject.Find("Player").GetComponent<Inventory>();
+        SaveSystem.SavePlayer(new SaveDataPlayer(playerController, playerInventory));
         GameManager gameManager= GameObject.Find("GameManager").GetComponent<GameManager>();
         SaveSystem.SaveMapState(new SaveDataMap(gameManager.destroyedTiles, gameManager.generateTileMap.seed.Value));
         animator.SetTrigger("GameSaved");
diff --git a/Assets/Scripts/SaveData.cs.meta b/Assets/Scripts/SaveData.cs.meta
deleted file mode 100644
index c14f02e..0000000
--- a/Assets/Scripts/SaveData.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 4053217b507f2c34991a5d799a8ceeb6
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/Saving.meta b/Assets/Scripts/Saving.meta
new file mode 100644
index 0000000..e9a0c8c
--- /dev/null
+++ b/Assets/Scripts/Saving.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6a565c28b8754cf498ef449b3ae393bd
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/SaveData.cs b/Assets/Scripts/Saving/SaveData.cs
similarity index 60%
rename from Assets/Scripts/SaveData.cs
rename to Assets/Scripts/Saving/SaveData.cs
index 5ee1f34..0bf35d0 100644
--- a/Assets/Scripts/SaveData.cs
+++ b/Assets/Scripts/Saving/SaveData.cs
@@ -4,6 +4,21 @@
 using System.Collections.Generic;
 using UnityEngine;
 
+#region player data
+[Serializable]
+public class SaveDataInventorySlot
+{
+    public int itemId;
+    public string itemName;
+    public int quantity;
+
+    public SaveDataInventorySlot(InventorySlot slot)
+    {
+        itemId = slot.item.itemId;
+        itemName = slot.item.itemName;
+        quantity = slot.quantity;
+    }
+}
 [Serializable]
 public class SaveDataPlayer
 {
@@ -11,15 +26,26 @@
     public int health;
     public float[] position;
     public float[] velocity;
-    public SaveDataPlayer(PlayerController player)
+    public List<SaveDataInventorySlot> inventoryItems;
+
+    public SaveDataPlayer(PlayerController player, Inventory inventory)
     {
         maxHealth = player.health.MaxHealth;
         health = player.health.Health;
         position = player.transform.position.ConvertToFloatArray();
         velocity = player.rb.velocity.ConvertToFloatArray();
+
+        // Save inventory items
+        inventoryItems = new List<SaveDataInventorySlot>();
+        foreach (var slot in inventory.items)
+        {
+            inventoryItems.Add(new SaveDataInventorySlot(slot));
+        }
     }
 }
+#endregion
 
+#region map data
 [Serializable]
 public class SaveDataMap
 {
@@ -45,3 +71,4 @@
     }
     public int[] tileCoord;
 }
+#endregion
diff --git a/Assets/Scripts/SaveSystem.cs.meta b/Assets/Scripts/Saving/SaveData.cs.meta
similarity index 83%
copy from Assets/Scripts/SaveSystem.cs.meta
copy to Assets/Scripts/Saving/SaveData.cs.meta
index dd3f492..ba75aac 100644
--- a/Assets/Scripts/SaveSystem.cs.meta
+++ b/Assets/Scripts/Saving/SaveData.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 48b32dceea7ccc1499e20f72c9af2d85
+guid: 7564cb159a31f9348963c99d3b099315
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/SaveSystem.cs b/Assets/Scripts/Saving/SaveSystem.cs
similarity index 100%
rename from Assets/Scripts/SaveSystem.cs
rename to Assets/Scripts/Saving/SaveSystem.cs
diff --git a/Assets/Scripts/SaveSystem.cs.meta b/Assets/Scripts/Saving/SaveSystem.cs.meta
similarity index 83%
copy from Assets/Scripts/SaveSystem.cs.meta
copy to Assets/Scripts/Saving/SaveSystem.cs.meta
index dd3f492..b8fe8e7 100644
--- a/Assets/Scripts/SaveSystem.cs.meta
+++ b/Assets/Scripts/Saving/SaveSystem.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 48b32dceea7ccc1499e20f72c9af2d85
+guid: cd24cd46198c6894eb18e9953978cb7e
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

--
Gitblit v1.9.3