using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using Assets.HeroEditor4D.InventorySystem.Scripts.Data; using Assets.HeroEditor4D.InventorySystem.Scripts.Elements; using UnityEngine; public class InventoryManager : MonoBehaviour { public playerNetwork pnet; public InventorySlot[] inventorySlots; public InventoryItemsCollection lootsData; public GameObject ItemInventoryPrefab; public List startingItems; public bool resetInventory = false; private void OnValidate() { if (resetInventory) { resetInventory= false; foreach(InventorySlot slot in inventorySlots) { slot.Clear(); } } } public item GetItemByType(string type) { foreach(item i in lootsData.items) { if(i.type == type) { return i; } } Debug.Log("Could not find anything for " + type); return null; } void Start(){ foreach(item i in startingItems){ AddInvItem(i); } } public Dictionary GetEntries(){ Dictionary entries = new Dictionary(); for(int i=0; i < inventorySlots.Length; i++){ ItemInventory itemInSlot = inventorySlots[i].GetComponentInChildren(); if(itemInSlot!= null && itemInSlot.item != null){ entries.Add(i, itemInSlot.item.type); } } return entries; } public void SetInventory(Dictionary data) { Clear(); foreach(KeyValuePair entry in data) { SpawnNewItem(GetItemByType(entry.Value), inventorySlots[entry.Key]); } } public bool UseItem(item i) { if(pnet.health >= 100) { return false; } pnet.SetHealth(pnet.health+i.healthIncrease); pnet.SavePlayerData(); return true; } public item selectedItem; public void SelectItem(item itemI){ selectedItem = itemI; } public void DropItem(item i) { pnet.DropPickup(i.type); pnet.SavePlayerData(); } public void AddInvItem(string type) { AddInvItem(GetItemByType(type)); } public void AddInvItem (item item){ //find an empty slot for(int i = inventorySlots.Length-1; i >=0 ; i--){ InventorySlot slot = inventorySlots[i]; ItemInventory itemInSlot = slot.GetComponentInChildren(); if(itemInSlot == null){ SpawnNewItem(item , slot); return; } //implement check for slot full } Debug.Log("Slots are full"); } public void Clear(){ for(int i=0; i < inventorySlots.Length; i++){ if(inventorySlots[i].transform.childCount > 0){ Destroy(inventorySlots[i].transform.GetChild(0).gameObject); } } } void SpawnNewItem(item item , InventorySlot slot ){ GameObject newItemAdd = Instantiate(ItemInventoryPrefab , slot.transform); ItemInventory inventoryItemm = newItemAdd.GetComponent(); inventoryItemm.Set(item,this); pnet.SavePlayerData(); } } [System.Serializable] public class InventoryEntry{ public int slot; public string item; }