ProjectTextRPG/TextRPG/Source/Game/Inventory/InventorySystem.h

73 lines
1.3 KiB
C++

#pragma once
#include "Core/Item/Item.h"
template <typename T>
class InventorySystem
{
public:
InventorySystem() :
Data(nullptr),
Capacity(10),
Size(0)
{
Data = new T[Capacity];
}
~InventorySystem()
{
delete[] Data;
Data = nullptr;
}
void Resize()
{
T* TempData = new T[Capacity * 2];
for (int i = 0; i < Size;) TempData[i] = std::move(Data[i]);
delete[] Data;
Data = TempData;
Capacity *= 2;
}
void AddItem(const T& New)
{
std::cout << "아이템 추가 시도..." << "(현재 " << Size << "/" << Capacity << ")\n";
system("pause");
if (Size >= Capacity)
{
Resize();
std::cout << "-> 인벤토리 자동 확장!\n";
}
Data[Size++] = New;
std::cout << "-> 아이템 추가 완료" << "(현재 " << Size << "/" << Capacity << ")\n";
system("pause");
PrintAllItems();
}
void RemoveLastItem()
{
if (Size <= 0)
Size = 0;
else
Data[Size--] = nullptr;
}
void PrintAllItems()
{
std::sort(Data, Data + Size, T::ComparePriceDesc);
for (int i = 0; i < Size; ++i)
{
std::cout << i + 1 << ". " << Data[i].GetItemName() << " (" << Data[i].GetItemPrice() << "G) " << "\n";
}
system("pause");
}
int GetSize() { return Size; }
int GetCapacity() { return Capacity; }
private:
T* Data;
int Capacity;
int Size;
};