[Serializable]
public class ResourceData
{
public string ResourceName;
public int value;
}
public class Produce : MonoBehaviour
{
// 제작 시 얻을 아이템 데이터
public ItemData data;
public List<ResourceData> resourceData;
// 인벤토리 정보
UIInventory inventory;
// 제작 가능한지 확인
public void CheckProduce()
{
inventory = GameManager.Instance.Player.inventory;
bool Check = true;
for (int i = 0; i < resourceData.Count; i++)
{
// 가지고 있지 않다면
if (!inventory.CheckItem(resourceData[i].ResourceName, resourceData[i].value))
{
// 제작 불가능
Check = false;
}
}
// 아이템
if (!Check) return;
// 제작에 필요한 아이템을 소모
for (int i = 0; i < resourceData.Count; i++)
{
// 아이템 소모하고 아이템 획득
inventory.RemoveItem(resourceData[i].ResourceName, resourceData[i].value);
}
// 아이템 획득
ProduceItem();
}
// 제작 성공 시 인벤토리에 아이템 넣기
public void ProduceItem()
{
// 아이템을 플레이어의 인벤토리에 추가
GameManager.Instance.Player.currentData = data;
GameManager.Instance.Player.AddItem?.Invoke();
}
// UIInventory
public bool CheckItem(string name, int value)
{
for (int i = 0; i < slots.Length; i++)
{
if (slots[i].data == null)
{
continue;
}
// 아이템이 있다면
if (slots[i].data.itemName == name)
{
// 제작 가능한 아이템보다 개수가 많다면
if (slots[i].slotQuantity >= value)
{
return true;
}
}
}
return false;
}
public void RemoveItem(string name, int value)
{
for (int i = 0; i < slots.Length; i++)
{
if (slots[i].data == null)
{
continue;
}
// 아이템과 같은 이름 검색
if (slots[i].data.itemName == name)
{
slots[i].slotQuantity -= value;
break;
}
}
}
설명: 제작UI마다 재료 정보를 추가하고 CheckProduce()메서드를 실행하여 플레이어의 인벤토리에 접근하여 제작 재료가 있는지 확인하고 재료가 있다면 개수를 판단하여 문제가 없으면 재료를 소모하여 아이템을 획득한다.
1. 없음
1. 없음
1. 없음