diff options
author | HybridDog <ovvv@web.de> | 2019-04-03 13:46:11 +0200 |
---|---|---|
committer | SmallJoker <mk939@ymail.com> | 2019-05-20 20:59:51 +0200 |
commit | 12e3d3d12f919a141f5032645d03bda2ad4489f5 (patch) | |
tree | b17010f3e5093cb46bda78810ca0d623ff5ab75c /src/craftdef.h | |
parent | 1604b949fde0fcb075709f5b451dde5ba06a27d0 (diff) | |
download | minetest-12e3d3d12f919a141f5032645d03bda2ad4489f5.tar.gz minetest-12e3d3d12f919a141f5032645d03bda2ad4489f5.tar.bz2 minetest-12e3d3d12f919a141f5032645d03bda2ad4489f5.zip |
Prioritise craft recipes
When multiple recipes are applicable, the recipes are prioritised in this order:
toolrepair < shapeless with groups < shapeless < shaped with groups < shaped
For cooking and fuel, items are prioritised over item groups
Diffstat (limited to 'src/craftdef.h')
-rw-r--r-- | src/craftdef.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/craftdef.h b/src/craftdef.h index 140321f0f..d8ad2eb22 100644 --- a/src/craftdef.h +++ b/src/craftdef.h @@ -132,6 +132,23 @@ struct CraftReplacements class CraftDefinition { public: + /* + Craft recipe priorities, from low to high + + Recipes are searched from latest to first. + If a recipe with higher priority than a previous found one is + encountered, it is selected instead. + */ + enum RecipePriority + { + NO_RECIPE, + TOOLREPAIR, + SHAPELESS_AND_GROUPS, + SHAPELESS, + SHAPED_AND_GROUPS, + SHAPED, + }; + CraftDefinition() = default; virtual ~CraftDefinition() = default; @@ -140,6 +157,10 @@ public: // Checks whether the recipe is applicable virtual bool check(const CraftInput &input, IGameDef *gamedef) const=0; + RecipePriority getPriority() const + { + return priority; + } // 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; @@ -162,6 +183,7 @@ public: protected: CraftHashType hash_type; + RecipePriority priority; }; /* @@ -283,6 +305,7 @@ public: virtual void initHash(IGameDef *gamedef) { hash_type = CRAFT_HASH_TYPE_COUNT; + priority = TOOLREPAIR; } virtual std::string dump() const; |