using System.Collections; using System.Collections.Generic; using UnityEngine; namespace SimpleInventorySystem { public class LootContainer : MonoBehaviour { // Start is called before the first frame update public bool hasBeenLooted = false; public bool itemsHaveBeenInstantiated = false; public bool itemsHaveBeenHidden = false; [HideInInspector] public List itemUIs; /// /// Instantiates the item prefab first and calls necessary stuff. /// public void Loot() { if (!hasBeenLooted) { itemUIs = new List(); Size size = GenerateContainerSize(); PopulateContainer(size); hasBeenLooted = true; } else { hasBeenLooted = true; } } void HideGameObjects() { if (hasBeenLooted && itemsHaveBeenInstantiated && !itemsHaveBeenHidden) { foreach (ItemUI item in itemUIs) { //Debug.Log(item.gameObject.name); //Debug.Log(item.pickUp.gameObject.name); item.pickUp.ItemGameObject.SetActive(false); } itemsHaveBeenHidden = true; } } public ScriptableLootContainer data; // Start is called before the first frame update void Start() { if (data == null) { Debug.LogError("Loot Container should have a Scriptable Loot Container referenced."); return; } } public Size GenerateContainerSize() { int width = Random.Range(data.minimumContainerSize.Width, data.maximumContainerSize.Width + 1); int height = Random.Range(data.minimumContainerSize.Height, data.maximumContainerSize.Height + 1); return new Size(width, height); } public void PopulateContainer(Size size) { int cells = size.Width * size.Height; int limit = 50; while(limit > 0 && cells > 0) { GameObject item = Spawn(); ItemUI itemUI = item.GetComponentInChildren(); PickUp pickUp = item.GetComponentInChildren(); item.SetActive(true); item.transform.position = Vector3.zero; item.transform.SetParent(InventorySystem.instance.DefaultItemSpawn, false); if (item.GetComponent() != null) item.GetComponent().useGravity = false; if (itemUI != null) { itemUIs.Add(itemUI); itemUI.gameObject.SetActive(true); pickUp.gameObject.SetActive(true); //AddOwnership(item, this); //item.transform.SetParent(transform, true); itemUI.InitializeImageSize(); itemUI.ResetTransform(); //gObj.transform.SetParent(item.transform, true); //gObj.SetActive(false); //item.pickUp = gObj.GetComponentInChildren(); } cells -= itemUI.width * itemUI.height; limit--; } Invoke(nameof(HideGameObjects), .1f); itemsHaveBeenInstantiated = true; } private GameObject Spawn() { // RNG rarity float rate = Random.Range(0f, 1f); RarityType rarity = data.GetRandomRarity(rate); // RNG item GameObject prefab = data.GetRandomItem(rarity); GameObject newItem = Instantiate(prefab); Debug.Log($"Loot Container: {newItem.name}"); return newItem; } // Update is called once per frame void Update() { if (data == null) { return; } } /*public void RemoveOwnership(ItemUI item, Inventory newOwnerInventory) { item.Inventory = newOwnerInventory; //items.Remove(item.pickUp.ItemGameObject); itemUIs.Remove(item); newOwnerInventory.AddOwnership(item, this); } public void AddOwnership(ItemUI item, Inventory oldOwnerInventory) { //items.Add(item.pickUp.ItemGameObject); itemUIs.Add(item); //item.Inventory = this; }*/ } }