#pragma once #include #include #include "ItemFilter.h" #include "ItemModifier.h" #include "TypeRegistry.h" class CraftingStorage; class ShapedCraftingStorage; struct ItemInfo { int type; int count; float hp; float maxHp; float durability; float maxDurability; }; class RecipieInput : public Framework::ReferenceCounter { private: ItemFilter* filter; ItemModifier* modifier; int amount; public: RecipieInput(ItemFilter* filter, ItemModifier* modifier, int amount); ~RecipieInput(); ItemFilter* zFilter() const; ItemModifier* zModifier() const; int getAmount() const; }; class RecipieInputFactory : public TypeFactory { public: RecipieInputFactory(); RecipieInput* fromJson(Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson(RecipieInput* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class RecipieOutput : public Framework::ReferenceCounter { private: int itemTypeId; int amount; ItemModifier* modifier; public: RecipieOutput(int itemTypeId, int amount, ItemModifier* modifier); ~RecipieOutput(); int getItemTypeId() const; int getAmount() const; ItemModifier* zModifier() const; Item* createItem() const; }; class RecipieOutputFactory : public TypeFactory { public: RecipieOutputFactory(); RecipieOutput* fromJson(Framework::JSON::JSONValue* zJson) const override; Framework::JSON::JSONValue* toJson(RecipieOutput* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator() const override; }; class Recipie : public virtual Framework::ReferenceCounter { protected: Framework::Text groupName; Framework::RCArray outputs; public: Recipie( Framework::RCArray outputs, Framework::Text groupName); virtual bool testApplicability(CraftingStorage* zStorage) = 0; virtual void apply(CraftingStorage* zStorage) = 0; virtual Framework::Text getRecipieUIML() = 0; virtual Framework::Array getOutput() const; bool createsOutput(int itemTypeId); const Framework::RCArray& getOutputs() const; Framework::Text getGroupName() const; }; class UnshapedRecipie : public Recipie { private: Framework::RCArray inputs; public: UnshapedRecipie(Framework::RCArray inputs, Framework::RCArray outputs, Framework::Text groupName); bool testApplicability(CraftingStorage* zStorage) override; void apply(CraftingStorage* zStorage) override; Framework::Text getRecipieUIML() override; const Framework::RCArray& getInputs() const; }; class UnshapedRecipieFactory : public SubTypeFactory { public: UnshapedRecipieFactory(); UnshapedRecipie* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( UnshapedRecipie* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class ShapedRecipie : public Recipie { private: Framework::RCArray inputs; int width; int height; public: ShapedRecipie(int width, int height, Framework::RCArray inputs, Framework::RCArray outputs, Framework::Text groupName); bool testApplicability(CraftingStorage* zStorage) override; void apply(CraftingStorage* zStorage) override; Framework::Text getRecipieUIML() override; int getWidth() const; int getHeight() const; const Framework::RCArray& getInputs() const; }; class ShapedRecipieFactory : public SubTypeFactory { public: ShapedRecipieFactory(); ShapedRecipie* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson(ShapedRecipie* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; };