diff options
| author | metamuffin <metamuffin@disroot.org> | 2024-06-20 12:31:27 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:21:49 +0200 | 
| commit | 2520370a10782bd41fccc54589362467b809939f (patch) | |
| tree | 52f876c15087eb5b4b25231cce34ad2b310fa780 | |
| parent | 934913b03957e2c11b269c6ff6f2e9441eceee0a (diff) | |
| download | hurrycurry-2520370a10782bd41fccc54589362467b809939f.tar hurrycurry-2520370a10782bd41fccc54589362467b809939f.tar.bz2 hurrycurry-2520370a10782bd41fccc54589362467b809939f.tar.zst | |
experiment with recipe generation
| -rw-r--r-- | data/recipes.ts | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/data/recipes.ts b/data/recipes.ts new file mode 100644 index 00000000..dcd73d8e --- /dev/null +++ b/data/recipes.ts @@ -0,0 +1,76 @@ + +//? Is is a good idea? Probably not. + +interface Recipe { +    tile?: string, +    inputs: string[], +    outputs: string[], +    action: "instant" | "passive" | "active" +    duration?: number +} + +const all_items = new Set<string>() +function out(r: Recipe) { +    r.inputs.forEach(i => all_items.add(i)) +    r.outputs.forEach(i => all_items.add(i)) +    console.log(`- { tile: ${r.tile ?? null}, inputs: ${JSON.stringify(r.inputs)}, outputs: ${JSON.stringify(r.outputs)}, action: !${r.action + " " + (r.duration ?? "")} }`); +} +type Component = (e: string) => void + +const cut = (new_name?: string): Component => e => { +    out({ action: "active", duration: 2, tile: "cuttingboard", inputs: [e], outputs: [new_name ?? ("sliced-" + e)] }) +} +const cook = (new_name?: string): Component => e => { +    const i = e + "-pot" +    const o = (new_name ?? ("cooked-" + e)) + "-pot" +    out({ action: "instant", inputs: ["pot", e], outputs: [i] }) +    out({ action: "passive", duration: 2, tile: "stove", inputs: [i], outputs: [o] }) +} +const crate: Component = e => out({ action: "instant", tile: e + "-crate", inputs: [], outputs: [e], }) + +function item(name: string, ...components: Component[]) { +    for (const f of components) { +        f(name) +    } +} + + +function combine(container: string, ...inputs: string[]) { +    const open = inputs.map(i => [i]) +    while (1) { +        const e = open.pop() +        if (!e) break; +        const cur = e.join("-") + "-" + container +        for (const i of inputs) { +            if (e.includes(i)) continue +            const parts = [...e, i] +            parts.sort() +            const o = parts.join("-") + "-" + container +            if (all_items.has(o)) continue +            open.push(parts) +            out({ +                action: "instant", +                inputs: [cur, i], +                outputs: [o] +            }) +        } +    } +} + +item("tomato", cut(), crate, cook("tomato-soop")) +combine("plate", "steak", "sliced-tomato", "bread") + +for (const i of all_items) { +    const parts = i.split("-"); +    const container = parts.pop()!; +    if (parts.length >= 1 && ["pot", "plate"].includes(container)) { +        out({ +            action: "instant", +            tile: "trash", +            inputs: [i], +            outputs: [container] +        }) +    } else { +        out({ action: "instant", tile: "trash", inputs: [i], outputs: [] }) +    } +} | 
