2024-06-03 18:26:03 +00:00
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
using Random = UnityEngine.Random;
|
|
|
|
|
|
|
|
namespace BlueWater.Items
|
|
|
|
{
|
|
|
|
[Serializable]
|
2024-06-21 22:11:53 +00:00
|
|
|
public class ItemDropTable
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
|
|
|
[field: SerializeField]
|
2024-06-21 22:11:53 +00:00
|
|
|
public CharacterData CharacterData { get; set; }
|
|
|
|
|
|
|
|
// ItemDropTableScriptableObject 클래스에서 생성되기 떄문에 new() 필수
|
2024-06-03 18:26:03 +00:00
|
|
|
[field: SerializeField]
|
2024-06-21 22:11:53 +00:00
|
|
|
public List<DropItem> DropItems { get; set; } = new();
|
|
|
|
|
|
|
|
private List<ItemSlot> _itemSlots;
|
|
|
|
|
|
|
|
public ItemDropTable(CharacterData characterData)
|
|
|
|
{
|
|
|
|
CharacterData = characterData;
|
|
|
|
}
|
2024-06-03 18:26:03 +00:00
|
|
|
|
|
|
|
public List<ItemSlot> GetDroppedItemList()
|
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
_itemSlots = new List<ItemSlot>();
|
2024-06-03 18:26:03 +00:00
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
foreach (var element in DropItems)
|
|
|
|
{
|
|
|
|
CheckAndAddItem(element);
|
|
|
|
}
|
|
|
|
|
|
|
|
return _itemSlots;
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
private void CheckAndAddItem(DropItem dropItem)
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
|
|
|
var dropChance = Random.Range(0, 101);
|
2024-06-21 22:11:53 +00:00
|
|
|
if (dropChance > dropItem.DropRate) return;
|
|
|
|
|
|
|
|
var randomCount = Random.Range(dropItem.QuantityMin, dropItem.QuantityMax + 1);
|
|
|
|
_itemSlots.Add(new ItemSlot(dropItem.ItemIdx, randomCount));
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|