#pragma once #include #include #include "ItemFilter.h" #include "ItemModifier.h" class CraftingStorage; class ShapedCraftingStorage; struct ItemInfo { int type; int count; float hp; float maxHp; float durability; float maxDurability; }; class Recipie : public virtual Framework::ReferenceCounter { protected: Framework::RCArray outputs; Framework::Array outputAmount; public: Recipie(); virtual void addOutput(Item* item, int amount); virtual bool testApplicability(CraftingStorage* zStorage) = 0; virtual void apply(CraftingStorage* zStorage) = 0; virtual Framework::Text getRecipieUIML() = 0; virtual Framework::Array getOutput( CraftingStorage* zStorage) const; virtual bool createsOutput(ItemType* zType); }; class UnshapedRecipie : public Recipie { private: Framework::RCArray filters; Framework::RCArray modifiers; Framework::Array inputAmount; public: UnshapedRecipie(); void addIngredient(ItemFilter* filter, int amount, ItemModifier* modifier); bool testApplicability(CraftingStorage* zStorage) override; void apply(CraftingStorage* zStorage) override; Framework::Text getRecipieUIML() override; }; class ShapedRecipie : public Recipie { private: Framework::RCArray filters; Framework::RCArray modifiers; Framework::Array inputAmount; int width; int height; public: ShapedRecipie(int width, int height); void setIngredient( int x, int y, ItemFilter* filter, ItemModifier* modifier); bool testApplicability(CraftingStorage* zStorage) override; void apply(CraftingStorage* zStorage) override; Framework::Text getRecipieUIML() override; };