Describe every value kind in one table instead of spreading it over the code
A kind like colour or texture used to be spelled out in five parallel lists, its port type, its empty value, its glyph, its label and its list tag - 22 literal places for texture alone. core/properties/kinds.ts now holds one row per kind and the rest is derived from it, so adding a kind is one row. The five literal nodes collapse into literals.ts, the six kind menus into one helper. Number, Text, Boolean is now the one order everywhere; the variable and port menus used to list Boolean before Text. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8a7185948d
commit
3ed8b68ecf
39 files changed
+699
-565
No files matched your search
@@ -0,0 +1,37 @@
|
||||
import { KIND, kindLabel, type VariableKind } from '../../../properties/kinds';
|
||||
import { coerceValue, flatDef, type PropertyDef } from '../../../properties/PropertySchema';
|
||||
import type { NodeDef } from '../../NodeRegistry';
|
||||
|
||||
/** A node handing out one constant of a kind: its one setting, edited as that kind, is its output. */
|
||||
function literal(type: string, kind: Exclude<VariableKind, 'struct'>, description: string): NodeDef {
|
||||
const value: PropertyDef =
|
||||
kind === 'list'
|
||||
? { key: 'value', label: 'Value', kind, default: [] }
|
||||
: kind === 'number'
|
||||
? { ...flatDef('value', kind, { label: 'Value' }), step: 1 }
|
||||
: flatDef('value', kind, { label: 'Value' });
|
||||
return {
|
||||
type,
|
||||
label: kindLabel(kind),
|
||||
category: 'data',
|
||||
description,
|
||||
inputs: [],
|
||||
outputs: [{ key: 'value', label: 'value', type: KIND[kind].travels }],
|
||||
params: [value],
|
||||
run: (_ctx, _inputs, params) => ({ outputs: { value: coerceValue(value, params.value ?? value.default) } }),
|
||||
};
|
||||
}
|
||||
|
||||
export const NumberLiteral = literal('Number', 'number', 'A constant number.');
|
||||
export const BooleanLiteral = literal('Boolean', 'boolean', 'A constant true/false.');
|
||||
export const StringLiteral = literal('String', 'text', 'A constant text.');
|
||||
export const TextureLiteral = literal(
|
||||
'Texture',
|
||||
'texture',
|
||||
'A constant picture: a texture, one of its frames or an animation, as a sprite wears it.',
|
||||
);
|
||||
export const ListLiteral = literal(
|
||||
'List',
|
||||
'list',
|
||||
'A constant list, edited item by item in the List tab – each item with its own kind.',
|
||||
);
|
||||
Reference in new issue
Block a user