summaryrefslogtreecommitdiff
path: root/src/craftdef.h
diff options
context:
space:
mode:
authorHybridDog <ovvv@web.de>2019-04-03 13:46:11 +0200
committerSmallJoker <mk939@ymail.com>2019-05-20 20:59:51 +0200
commit12e3d3d12f919a141f5032645d03bda2ad4489f5 (patch)
treeb17010f3e5093cb46bda78810ca0d623ff5ab75c /src/craftdef.h
parent1604b949fde0fcb075709f5b451dde5ba06a27d0 (diff)
downloadminetest-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.h23
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;