45 lines
1.3 KiB
C#
45 lines
1.3 KiB
C#
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<ItemInstance> 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<DropItemController>().Init(dropItem, dropCount);
|
|
}
|
|
}
|
|
} |