#pragma once #include #include "Area.h" class Inventory; class ItemStack; class ItemSlotIDSetter { protected: virtual void setId(int id) = 0; friend Inventory; }; class ItemSlot : public virtual Framework::ReferenceCounter, public ItemSlotIDSetter { private: ItemStack* items; int maxSize; Directions allowedPullSide; Directions allowedPushSides; int pullPriority; int pushPriority; bool allowHigherStackSize; Framework::Text name; int id; void setId(int id) override; public: ItemSlot(Framework::Text name, int maxSize, int pullPriority, int pushPriority, int allowedPullSide, int allowedPushSides, bool allowHigherStackSize); ~ItemSlot(); ItemStack* takeItemsOut(int count, Direction dir); void addItems(ItemStack* zStack, Direction dir); void update(); int numberOfAddableItems(const ItemStack* zStack, Direction dir) const; const ItemStack* zStack() const; int getPullPriority() const; int getPushPriority() const; bool isFull() const; int getFreeSpace() const; bool isEmpty() const; int getNumberOfItems() const; const Framework::Text& getName() const; int getId() const; };