#pragma once #include #include "Inventory.h" #include "ItemFilter.h" #include "ItemSlot.h" #include "ItemStack.h" #include "Recipie.h" class CraftingStorage { public: virtual bool isAllAvailable(Framework::RCArray& inputs) = 0; virtual bool hasFreeSpace(const Item* zItem, int amount) = 0; virtual bool consume(Framework::RCArray& inputs) = 0; virtual void addCraftingResult(ItemStack* stack) = 0; }; class ShapedCraftingStorage : public CraftingStorage { public: virtual bool isAllAvailable( Framework::RCArray& inputs, int width, int height) = 0; virtual bool consume( Framework::RCArray& inputs, int width, int height) = 0; }; class BasicShapedCrafter : public ShapedCraftingStorage { private: Framework::Array craftingInput; Inventory* zInventory; Recipie* currentRecipie; Framework::Text recipieList; int width; int height; void getOutputPreview(NetworkMessage* zMsg); public: BasicShapedCrafter(int width, int height, Inventory* zInventory, Framework::Text recipieList); virtual bool isAllAvailable(Framework::RCArray& inputs, int width, int height) override; virtual bool isAllAvailable( Framework::RCArray& inputs) override; virtual bool hasFreeSpace(const Item* zItem, int amount) override; virtual bool consume(Framework::RCArray& inputs, int width, int height) override; virtual bool consume(Framework::RCArray& inputs) override; virtual void addCraftingResult(ItemStack* stack) override; void applyCurrentRecipie(); void calculateOutputPreview(); };