]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/craftdef.h
Merge pull request #447 from sapier/add_lua_log_parameter_check
[dragonfireclient.git] / src / craftdef.h
index 454d7c2e6e5a02641a3f7d469bbee36878ab49d4..a2258c6e84b9a65d9ef7e6b8516043bc6e72eab0 100644 (file)
@@ -106,6 +106,8 @@ struct CraftReplacements
                pairs(pairs_)
        {}
        std::string dump() const;
+       void serialize(std::ostream &os) const;
+       void deSerialize(std::istream &is);
 };
 
 /*
@@ -128,6 +130,8 @@ class CraftDefinition
        // Returns the output structure, meaning depends on crafting method
        // The implementation can assume that check(input) returns true
        virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const=0;
+       // 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;
 
@@ -162,6 +166,7 @@ class CraftDefinitionShaped: public CraftDefinition
        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 std::string dump() const;
@@ -203,6 +208,7 @@ class CraftDefinitionShapeless: public CraftDefinition
        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 std::string dump() const;
@@ -240,6 +246,7 @@ class CraftDefinitionToolRepair: public CraftDefinition
        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 std::string dump() const;
@@ -270,14 +277,16 @@ class CraftDefinitionCooking: public CraftDefinition
        CraftDefinitionCooking(
                        const std::string &output_,
                        const std::string &recipe_,
-                       float cooktime_):
-               output(output_), recipe(recipe_), cooktime(cooktime_)
+                       float cooktime_,
+                       const CraftReplacements &replacements_):
+               output(output_), recipe(recipe_), cooktime(cooktime_), replacements(replacements_)
        {}
        virtual ~CraftDefinitionCooking(){}
 
        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 std::string dump() const;
@@ -293,6 +302,8 @@ class CraftDefinitionCooking: public CraftDefinition
        std::string recipe;
        // Time in seconds
        float cooktime;
+       // Replacement items for decrementInput()
+       CraftReplacements replacements;
 };
 
 /*
@@ -305,14 +316,17 @@ class CraftDefinitionFuel: public CraftDefinition
        CraftDefinitionFuel():
                recipe(""), burntime()
        {}
-       CraftDefinitionFuel(std::string recipe_, float burntime_):
-               recipe(recipe_), burntime(burntime_)
+       CraftDefinitionFuel(std::string recipe_,
+                       float burntime_,
+                       const CraftReplacements &replacements_):
+               recipe(recipe_), burntime(burntime_), replacements(replacements_)
        {}
        virtual ~CraftDefinitionFuel(){}
 
        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 std::string dump() const;
@@ -326,6 +340,8 @@ class CraftDefinitionFuel: public CraftDefinition
        std::string recipe;
        // Time in seconds
        float burntime;
+       // Replacement items for decrementInput()
+       CraftReplacements replacements;
 };
 
 /*
@@ -340,6 +356,8 @@ class ICraftDefManager
        // The main crafting function
        virtual bool getCraftResult(CraftInput &input, CraftOutput &output,
                        bool decrementInput, IGameDef *gamedef) const=0;
+       virtual bool getCraftRecipe(CraftInput &input, CraftOutput &output,
+                       IGameDef *gamedef) const=0;
        
        // Print crafting recipes for debugging
        virtual std::string dump() const=0;
@@ -356,6 +374,8 @@ class IWritableCraftDefManager : public ICraftDefManager
        // The main crafting function
        virtual bool getCraftResult(CraftInput &input, CraftOutput &output,
                        bool decrementInput, IGameDef *gamedef) const=0;
+       virtual bool getCraftRecipe(CraftInput &input, CraftOutput &output,
+                       IGameDef *gamedef) const=0;
 
        // Print crafting recipes for debugging
        virtual std::string dump() const=0;