OldBlueWater/BlueWater/Assets/02.Scripts/Item/DropItemTable.cs

45 lines
1.3 KiB
C#
Raw Normal View History

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);
}
}
}