AddItem

함수 개요

인벤토리에 아이템을 추가합니다. 빈 슬롯을 찾아 배치하며, 스택 가능한 아이템의 경우 기존 스택에 합산합니다.

시그니처

cpp
EAddItemResult CInventorySystem::AddItem(const SItemData& itemData, int nCount = 1);

파라미터

파라미터 타입 설명
itemData const SItemData& 추가할 아이템 데이터
nCount int 추가할 수량 (기본값: 1)

반환값

cpp
enum class EAddItemResult
{
    Success,        // 추가 성공
    InventoryFull,  // 인벤토리 가득 참
    InvalidItem,    // 유효하지 않은 아이템
    StackOverflow,  // 최대 스택 초과
};

구현 예시

cpp
EAddItemResult CInventorySystem::AddItem(const SItemData& itemData, int nCount)
{
    if (!itemData.IsValid())
        return EAddItemResult::InvalidItem;

    // 스택 가능 여부 확인
    if (itemData.bStackable)
    {
        CItem* pExisting = FindStackableSlot(itemData.nItemID);
        if (pExisting)
        {
            int nNewCount = pExisting->GetCount() + nCount;
            if (nNewCount > itemData.nMaxStack)
                return EAddItemResult::StackOverflow;

            pExisting->SetCount(nNewCount);
            OnItemUpdated(pExisting);
            return EAddItemResult::Success;
        }
    }

    // 빈 슬롯 탐색
    int nSlot = FindEmptySlot();
    if (nSlot < 0)
        return EAddItemResult::InventoryFull;

    m_aSlots[nSlot] = CItem(itemData, nCount);
    OnItemAdded(&m_aSlots[nSlot], nSlot);
    return EAddItemResult::Success;
}