35 lines
925 B
GDScript
35 lines
925 B
GDScript
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
|