class_name RecipeSystem extends Node var RECIPE_MAP:Dictionary[Recipe.Type, Recipe] = {} func _recurseChildren(node:Node) -> void: if node is Recipe: var recipe:Recipe = node as Recipe if recipe.type in RECIPE_MAP: assert(false, "Duplicate recipe type found: " + str(recipe.type)) RECIPE_MAP[recipe.type] = recipe else: for child in node.get_children(): _recurseChildren(child) func _updateRecipes() -> void: RECIPE_MAP = {} _recurseChildren(self) func _enter_tree() -> void: _updateRecipes() for recipeType in Recipe.Type.values(): if !RECIPE_MAP.has(recipeType): assert(false, "Missing recipe type: " + Recipe.Type.find_key(recipeType)) func _init() -> void: _updateRecipes() func getRecipe(recipeType:Recipe.Type) -> Recipe: if RECIPE_MAP.has(recipeType): return RECIPE_MAP[recipeType] else: assert(false, "Recipe type not found: " + Recipe.Type.find_key(recipeType)) return null