X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fcraftdef.h;h=46ee2164e6057f9bc7fffe527ea548ff92fc9156;hb=1105a14bccefb48a0e264fe19190c39629259338;hp=cc7a0619cca7ea723d57153aed1fbc44a0085db5;hpb=334e70455b7f8a4607fe99dc12710d48169113a6;p=minetest.git diff --git a/src/craftdef.h b/src/craftdef.h index cc7a0619c..46ee2164e 100644 --- a/src/craftdef.h +++ b/src/craftdef.h @@ -17,8 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef CRAFTDEF_HEADER -#define CRAFTDEF_HEADER +#pragma once #include #include @@ -70,17 +69,17 @@ const int craft_hash_type_max = (int) CRAFT_HASH_TYPE_UNHASHED; */ struct CraftInput { - CraftMethod method; - unsigned int width; + CraftMethod method = CRAFT_METHOD_NORMAL; + unsigned int width = 0; std::vector items; - CraftInput(): - method(CRAFT_METHOD_NORMAL), width(0), items() - {} + CraftInput() = default; + CraftInput(CraftMethod method_, unsigned int width_, const std::vector &items_): method(method_), width(width_), items(items_) {} + std::string dump() const; }; @@ -90,14 +89,13 @@ struct CraftInput struct CraftOutput { // Used for normal crafting and cooking, itemstring - std::string item; + std::string item = ""; // Used for cooking (cook time) and fuel (burn time), seconds - float time; + float time = 0.0f; - CraftOutput(): - item(""), time(0) - {} - CraftOutput(std::string item_, float time_): + CraftOutput() = default; + + CraftOutput(const std::string &item_, float time_): item(item_), time(time_) {} std::string dump() const; @@ -121,15 +119,11 @@ struct CraftReplacements // List of replacements std::vector > pairs; - CraftReplacements(): - pairs() - {} - CraftReplacements(std::vector > pairs_): + CraftReplacements() = default; + CraftReplacements(const std::vector > &pairs_): pairs(pairs_) {} std::string dump() const; - void serialize(std::ostream &os) const; - void deSerialize(std::istream &is); }; /* @@ -138,11 +132,8 @@ struct CraftReplacements class CraftDefinition { public: - CraftDefinition(){} - virtual ~CraftDefinition(){} - - void serialize(std::ostream &os) const; - static CraftDefinition* deSerialize(std::istream &is); + CraftDefinition() = default; + virtual ~CraftDefinition() = default; // Returns type of crafting definition virtual std::string getName() const=0; @@ -155,7 +146,8 @@ class CraftDefinition // the inverse of the above virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const=0; // Decreases count of every input item - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const=0; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const=0; virtual CraftHashType getHashType() const = 0; virtual u64 getHash(CraftHashType type) const = 0; @@ -164,9 +156,6 @@ class CraftDefinition virtual void initHash(IGameDef *gamedef) = 0; virtual std::string dump() const=0; -protected: - virtual void serializeBody(std::ostream &os) const=0; - virtual void deSerializeBody(std::istream &is, int version)=0; }; /* @@ -178,24 +167,24 @@ class CraftDefinition class CraftDefinitionShaped: public CraftDefinition { public: - CraftDefinitionShaped(): - output(""), width(1), recipe(), hash_inited(false), replacements() - {} + CraftDefinitionShaped() = delete; + CraftDefinitionShaped( const std::string &output_, unsigned int width_, const std::vector &recipe_, const CraftReplacements &replacements_): output(output_), width(width_), recipe(recipe_), - hash_inited(false), replacements(replacements_) + replacements(replacements_) {} - virtual ~CraftDefinitionShaped(){} + virtual ~CraftDefinitionShaped() = default; virtual std::string getName() const; virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -204,21 +193,17 @@ class CraftDefinitionShaped: public CraftDefinition virtual std::string dump() const; -protected: - virtual void serializeBody(std::ostream &os) const; - virtual void deSerializeBody(std::istream &is, int version); - private: // Output itemstring - std::string output; + std::string output = ""; // Width of recipe - unsigned int width; + unsigned int width = 1; // Recipe matrix (itemstrings) std::vector recipe; // Recipe matrix (item names) std::vector recipe_names; // bool indicating if initHash has been called already - bool hash_inited; + bool hash_inited = false; // Replacement items for decrementInput() CraftReplacements replacements; }; @@ -231,23 +216,21 @@ class CraftDefinitionShaped: public CraftDefinition class CraftDefinitionShapeless: public CraftDefinition { public: - CraftDefinitionShapeless(): - output(""), recipe(), hash_inited(false), replacements() - {} + CraftDefinitionShapeless() = delete; CraftDefinitionShapeless( const std::string &output_, const std::vector &recipe_, const CraftReplacements &replacements_): - output(output_), recipe(recipe_), - hash_inited(false), replacements(replacements_) + output(output_), recipe(recipe_), replacements(replacements_) {} - virtual ~CraftDefinitionShapeless(){} + virtual ~CraftDefinitionShapeless() = default; virtual std::string getName() const; virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -256,10 +239,6 @@ class CraftDefinitionShapeless: public CraftDefinition virtual std::string dump() const; -protected: - virtual void serializeBody(std::ostream &os) const; - virtual void deSerializeBody(std::istream &is, int version); - private: // Output itemstring std::string output; @@ -268,7 +247,7 @@ class CraftDefinitionShapeless: public CraftDefinition // Recipe list (item names) std::vector recipe_names; // bool indicating if initHash has been called already - bool hash_inited; + bool hash_inited = false; // Replacement items for decrementInput() CraftReplacements replacements; }; @@ -282,19 +261,18 @@ class CraftDefinitionShapeless: public CraftDefinition class CraftDefinitionToolRepair: public CraftDefinition { public: - CraftDefinitionToolRepair(): - additional_wear(0) - {} + CraftDefinitionToolRepair() = delete; CraftDefinitionToolRepair(float additional_wear_): additional_wear(additional_wear_) {} - virtual ~CraftDefinitionToolRepair(){} + virtual ~CraftDefinitionToolRepair() = default; virtual std::string getName() const; virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const { return CRAFT_HASH_TYPE_COUNT; } virtual u64 getHash(CraftHashType type) const { return 2; } @@ -303,17 +281,13 @@ class CraftDefinitionToolRepair: public CraftDefinition virtual std::string dump() const; -protected: - virtual void serializeBody(std::ostream &os) const; - virtual void deSerializeBody(std::istream &is, int version); - private: // This is a constant that is added to the wear of the result. // May be positive or negative, allowed range [-1,1]. // 1 = new tool is completely broken // 0 = simply add remaining uses of both input tools // -1 = new tool is completely pristine - float additional_wear; + float additional_wear = 0.0f; }; /* @@ -323,24 +297,22 @@ class CraftDefinitionToolRepair: public CraftDefinition class CraftDefinitionCooking: public CraftDefinition { public: - CraftDefinitionCooking(): - output(""), recipe(""), hash_inited(false), cooktime() - {} + CraftDefinitionCooking() = delete; CraftDefinitionCooking( const std::string &output_, const std::string &recipe_, float cooktime_, const CraftReplacements &replacements_): - output(output_), recipe(recipe_), hash_inited(false), - cooktime(cooktime_), replacements(replacements_) + output(output_), recipe(recipe_), cooktime(cooktime_), replacements(replacements_) {} - virtual ~CraftDefinitionCooking(){} + virtual ~CraftDefinitionCooking() = default; virtual std::string getName() const; virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -349,10 +321,6 @@ class CraftDefinitionCooking: public CraftDefinition virtual std::string dump() const; -protected: - virtual void serializeBody(std::ostream &os) const; - virtual void deSerializeBody(std::istream &is, int version); - private: // Output itemstring std::string output; @@ -361,7 +329,7 @@ class CraftDefinitionCooking: public CraftDefinition // Recipe item name std::string recipe_name; // bool indicating if initHash has been called already - bool hash_inited; + bool hash_inited = false; // Time in seconds float cooktime; // Replacement items for decrementInput() @@ -375,21 +343,20 @@ class CraftDefinitionCooking: public CraftDefinition class CraftDefinitionFuel: public CraftDefinition { public: - CraftDefinitionFuel(): - recipe(""), hash_inited(false), burntime() - {} - CraftDefinitionFuel(std::string recipe_, + CraftDefinitionFuel() = delete; + CraftDefinitionFuel(const std::string &recipe_, float burntime_, const CraftReplacements &replacements_): - recipe(recipe_), hash_inited(false), burntime(burntime_), replacements(replacements_) + recipe(recipe_), burntime(burntime_), replacements(replacements_) {} - virtual ~CraftDefinitionFuel(){} + virtual ~CraftDefinitionFuel() = default; virtual std::string getName() const; virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -398,17 +365,13 @@ class CraftDefinitionFuel: public CraftDefinition virtual std::string dump() const; -protected: - virtual void serializeBody(std::ostream &os) const; - virtual void deSerializeBody(std::istream &is, int version); - private: // Recipe itemstring std::string recipe; // Recipe item name std::string recipe_name; // bool indicating if initHash has been called already - bool hash_inited; + bool hash_inited = false; // Time in seconds float burntime; // Replacement items for decrementInput() @@ -421,15 +384,16 @@ class CraftDefinitionFuel: public CraftDefinition class ICraftDefManager { public: - ICraftDefManager(){} - virtual ~ICraftDefManager(){} + ICraftDefManager() = default; + virtual ~ICraftDefManager() = default; // The main crafting function virtual bool getCraftResult(CraftInput &input, CraftOutput &output, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) const=0; virtual std::vector getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const=0; - + // Print crafting recipes for debugging virtual std::string dump() const=0; }; @@ -437,15 +401,20 @@ class ICraftDefManager class IWritableCraftDefManager : public ICraftDefManager { public: - IWritableCraftDefManager(){} - virtual ~IWritableCraftDefManager(){} + IWritableCraftDefManager() = default; + virtual ~IWritableCraftDefManager() = default; // The main crafting function virtual bool getCraftResult(CraftInput &input, CraftOutput &output, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) const=0; - virtual std::vector getCraftRecipes(CraftOutput &output, + virtual std::vector getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const=0; + virtual bool clearCraftRecipesByOutput(const CraftOutput &output, IGameDef *gamedef) = 0; + virtual bool clearCraftRecipesByInput(CraftMethod craft_method, + unsigned int craft_grid_width, const std::vector &recipe, IGameDef *gamedef) = 0; + // Print crafting recipes for debugging virtual std::string dump() const=0; @@ -461,6 +430,3 @@ class IWritableCraftDefManager : public ICraftDefManager }; IWritableCraftDefManager* createCraftDefManager(); - -#endif -