게임 개발 공부 기록

49일차 - RPGProject 팀 프로젝트 5

00lwt 2025. 4. 2. 22:03

▶▷ 판매, 구매

판매 목록에서 클릭 시 구매가 가능하고 보유 목록에서 클릭 시 판매가 가능하도록 구현했다

private void InitShopSlot()
{
    // 기존 슬롯들 삭제
    foreach (Transform child in slot)
    {
        Destroy(child.gameObject);
    }
    shopSlots.Clear(); // 슬롯 리스트 초기화

    // 새로운 슬롯들을 생성하여 상점에 추가
    for (int i = 0; i < shopItemDatas.Count; i++)
    {
        ShopSlot newSlot = GameObject.Instantiate(slotPrefab, slot);

        if (i < shopItemDatas.Count)
        {
            newSlot.SetShopItem(shopItemDatas[i]); // 아이템 데이터 설정
        }

        shopSlots.Add(newSlot); // 슬롯 리스트에 추가
    }
}

private void InitSellSlot()
{
    // 기존 슬롯들 삭제
    foreach (Transform child in sSlot)
    {
        Destroy(child.gameObject);
    }
    sellSlots.Clear(); // 슬롯 리스트 초기화

    // 새로운 슬롯들을 생성하여 상점에 추가
    for (int i = 0; i < invenItemDatas.Count; i++)
    {
        SellSlot newSlot = GameObject.Instantiate(sellSlotPrefab, sSlot);

        if (i < invenItemDatas.Count)
        {
            newSlot.SetSellItem(invenItemDatas[i]); // 아이템 데이터 설정
        }

        sellSlots.Add(newSlot); // 슬롯 리스트에 추가
    }
}

private void Buy()
{
    // 선택하지 않은 경우
    if (shopSlot == null)
    {
        return;
    }

    ItemData itemData = shopSlot.GetItemData();
    if (itemData != null)
    {
        invenItemDatas.Add(itemData);
    }

    shopSlot.SoldOut(true); // 아이템 구매 시 아이템 품절 처리
    description.text = null; // 아이템 설명 초기화
    shopSlot = null;

    InitSellSlot();
}

private void Sell()
{
    // 선택하지 않은 경우
    if (sellSlot == null)
    {
        return;
    }

    ItemData itemData = sellSlot.GetItemData();
    if (itemData != null)
    {
        invenItemDatas.Remove(itemData);
    }

    description.text = null; // 아이템 설명 초기화
    sellSlot = null;

    InitSellSlot();
}

슬롯이 추가되는 기준이 데이터의 유무이기 때문에 아이템을 구매하면 슬롯에서 데이터를 받아와 인벤토리 아이템 데이터 리스트에 Add를 하고
판매하면 Remove를 한 다음 Init~~ 메소드를 통해 초기화 시켜주면 데이터에 맞춰 슬롯이 생성되는 방식이다.