using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { public class ItemManager : Singleton { [SerializeField, Required] private GameObject oceanItemDropPrefab; [SerializeField, Required] private GameObject fieldItemDropPrefab; [SerializeField] private List itemList; public Dictionary ItemDictionary { get; private set; } [SerializeField] private List itemDropTableList; public Dictionary ItemDropTableDictionary { get; private set; } protected override void OnAwake() { base.OnAwake(); Init(); } private void Init() { ItemDictionary = new Dictionary(itemList.Count); foreach (var element in itemList) { ItemDictionary.TryAdd(element.idx, element); } ItemDropTableDictionary = new Dictionary(itemDropTableList.Count); foreach (var element in itemDropTableList) { ItemDropTableDictionary.TryAdd(element.idx, element); } } [Button("FromJson")] private void LoadItemsFromJson() { var jsonFile = Resources.Load("JSON/item_table"); var items = JsonHelper.FromJson(jsonFile.text); foreach (var element in items) { itemList.Add(element); } jsonFile = Resources.Load("JSON/item_drop_table"); var itemDropTables = JsonHelper.FromJson(jsonFile.text); foreach (var element in itemDropTables) { itemDropTableList.Add(element); } } public void ItemDrop(int idx, Vector3 dropPosition) { var itemDropTable = ItemDropTableDictionary[idx]; var droppedItemList = itemDropTable.GetDroppedItemList(); foreach (var element in droppedItemList) { GameObject prefab = null; if (itemDropTable.item_drop_type == ItemDropTable.ItemDropType.OCEAN) { prefab = oceanItemDropPrefab; } else if (itemDropTable.item_drop_type == ItemDropTable.ItemDropType.FIELD) { prefab = fieldItemDropPrefab; } var instantiateItem = Instantiate(prefab, dropPosition, Quaternion.identity); instantiateItem.GetComponentInChildren().Init(element); } } public void ItemDropRandomPosition(int idx, Vector3 dropPosition) { var itemDropTable = ItemDropTableDictionary[idx]; var droppedItemList = itemDropTable.GetDroppedItemList(); foreach (var element in droppedItemList) { GameObject prefab = null; if (itemDropTable.item_drop_type == ItemDropTable.ItemDropType.OCEAN) { prefab = oceanItemDropPrefab; } else if (itemDropTable.item_drop_type == ItemDropTable.ItemDropType.FIELD) { prefab = fieldItemDropPrefab; } var newDropPositionX = Random.Range(dropPosition.x - 1f, dropPosition.x + 1f); var newDropPositionZ = Random.Range(dropPosition.z - 1f, dropPosition.z + 1f); var newDropPosition = new Vector3(newDropPositionX, dropPosition.y, newDropPositionZ); var instantiateItem = Instantiate(prefab, newDropPosition, Quaternion.identity); instantiateItem.GetComponentInChildren().Init(element); instantiateItem.GetComponent().AddForce(Vector3.up * 20f, ForceMode.Impulse); } } public void Acquire(ItemSlot itemSlot) { DataManager.Inst.CurrentInventory.AddItem(itemSlot); } } }