using System.Collections.Generic; using System.Linq; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { [CreateAssetMenu(fileName = "DropItemTable", menuName = "ScriptableObjects/Item/DropItemTable")] public class DropItemTable : ScriptableObject { public List itemInstanceList = new(); private ItemInstance PickItem() { var count = itemInstanceList.Count; if (count == 0) return null; var sumRatio = itemInstanceList.Sum(element => element.Ratio); var randomRatio = Random.Range(0, sumRatio); for (var i = 0; i < count; i++) { randomRatio -= itemInstanceList[i].Ratio; if (randomRatio < 0) { return itemInstanceList[i]; } } return null; } public void ItemDrop(Vector3 dropPosition) { var dropItem = PickItem(); if (dropItem == null) return; var dropCount = Random.Range((int)dropItem.Count.x, (int)dropItem.Count.y + 1); var instantiateItem = dropItem.Item.InstantiateItem(dropItem.prefab, dropPosition); instantiateItem.GetComponentInChildren().Init(dropItem, dropCount); } } }