A variable could only be a number, a text or a yes/no, so every set of values had to be smuggled through a string - which is where Tetris got its unreadable "03066326048763714" colours from. A list is now a value of its own, with an item kind (number, text, yes/no, colour) that decides how the inspector reads the one comma-separated line it is typed as, and eight nodes to work with: List, Fill, Count, Item at, Set item, Sub list, Join lists, Index of. Two traps came with it. An array is typeof 'object', so every place that told a value from an entity had to learn the difference, or a list would have been passed around as a game object. And a value was compared by identity in three places - with lists that marks everything as an overridden property after each reload, so those comparisons now compare contents. There is no list of objects: a list is written to the project file and an object is a live handle that no reload survives. A set of objects stays a list of names. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
15 lines
413 B
TypeScript
15 lines
413 B
TypeScript
import type { NodeDef } from '../../NodeRegistry';
|
|
import { asList } from '../../values';
|
|
import { list, num } from '../shared';
|
|
|
|
export const Count: NodeDef = {
|
|
type: 'Count',
|
|
label: 'Count',
|
|
category: 'data',
|
|
description: 'How many items a list holds.',
|
|
inputs: [list('list')],
|
|
outputs: [num('count')],
|
|
params: [],
|
|
run: (_ctx, inputs) => ({ outputs: { count: asList(inputs.list).length } }),
|
|
};
|