Files
VRyHungry1/RecipeManager.md
T
2026-07-19 10:47:28 +02:00

2.4 KiB

RecipeManager

Overview

RecipeManager is a static Godot class that centralizes recipe data for food item combinations and allows runtime lookup of result scenes.

The manager loads a single YAML file at startup: res://recipes.yaml, using the installed addons/yaml addon.

Responsibilities

  • Load recipe definitions from recipes.yaml.
  • Provide symmetric lookups for two-item combining recipes so A + B and B + A map to the same result.
  • Resolve item IDs to their corresponding scene resources.
  • Print all loaded combining recipes when the application starts.

Data structure in recipes.yaml

The recipe YAML file contains two top-level sections:

  • items: maps item IDs to their scene path and optional metadata.
  • combining: maps result item IDs to one or more recipe pairs.

Example structure:

items:
  hamburger:
    scene: res://Items/hamburger.tscn
    type: meal
  burger_buns:
    scene: res://Items/BurgerBuns.tscn
    type: ingredient

combining:
  hamburger:
    - [cooked_burger, burger_buns]
    - [charcoal, charcoal]
  charcoal:
    - [cube, cube]

items

Each entry under items uses the item ID as the key. The manager reads the scene field for each item and uses it to resolve the packed scene for recipe results.

combining

Each entry under combining represents a result item ID, and its value is a list of recipe pairs. Each recipe pair is a two-item array of ingredient IDs. This allows a single result item to have multiple valid recipes.

The manager normalizes each ingredient pair using a sorted key string internally, so lookups are symmetric.

Runtime behavior

  • FoodItem.id is used when combining items to look up the recipe result.

  • RecipeManager.get_combination(first_id, second_id) computes a canonical key for the pair and returns the resulting item's scene.

  • On startup, main.gd calls RecipeManager.print_all_recipes(), which logs each combining recipe in the form:

    ingredient_a + ingredient_b -> result_id

Notes

  • RecipeManager prefers the installed YAML addon to parse recipes.yaml when it is available.
  • If the addon is unavailable in the current runtime, the manager falls back to a lightweight built-in parser for the simple items/combining file format.
  • Scene paths now live in the YAML data instead of being hardcoded in the manager.
  • Because RecipeManager is static, it can be used from any script without creating an instance.