Files
feuerwerk/src/core/graph/nodes/data/ObjectByName.ts
T
rootandClaude Opus 5 4f78c7518c Give the graph a loop, and build Tetris with it
A Tetris example project needs to draw 200 board cells and scan rows
for a full line. Neither is expressible without iteration, so the node
system gets a Repeat node plus the missing text side: Substring, Find
text and To number. The interpreter drops its data cache once per
round -- otherwise every round would recompute with the first round's
values.

Object by name takes its name as an input now, not just as a setting;
addressing "c" + index is impossible otherwise. An unconnected input
reads the stored setting, so saved projects are untouched.

The board itself is a 200-character text, "." for empty. That makes
both operations of Tetris a single expression instead of a loop, and
each frame attempts exactly one move -- rotate beats sideways beats
fall -- so the fit check exists once in the whole graph.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 19:10:41 +02:00

17 lines
543 B
TypeScript

import type { NodeDef } from '../../NodeRegistry';
import { asString } from '../../values';
import { obj, str } from '../shared';
export const ObjectByName: NodeDef = {
type: 'ObjectByName',
label: 'Object by name',
category: 'data',
description:
'Finds a scene object by its name. The name is an input, so it can be put together at runtime ' +
'("cell" + index).',
inputs: [str('name')],
outputs: [obj('object')],
params: [],
run: (ctx, inputs) => ({ outputs: { object: ctx.findByName(asString(inputs.name)) } }),
};