Show lists in the inspector and variables in their own tab (#252)
The List tab could show one list at a time and was the only place to see its items. A list now shows its items right where it lives, and a new Variables tab shows all variables of an asset or placed object. - InlineList draws the items of a list under its row in the inspector, in struct fields and in the Variables tab. A list inside a list or a struct field is drawn the same way, one step indented. - The index column is the indent. Items sit under their list without an own margin, and the index column is 16 px wide instead of 28 px. - Above 20 items (INLINE_LIMIT) the rest collapses into "... N more - open in tab". During a run the rows show the values from the game. - ListHead puts "N items" and "+ Item" in one row. "N items" opens the list in a tab. A separate Open button squeezed the counter to zero width in the narrow inspector column. - VariablesEditor shows every variable of a behavior asset, a variables asset or a placed behavior. On an asset it edits the declarations. On a placed object an edit only overrides that object, with the usual reset and push buttons. - Opening a list inside a tab adds a new tab and keeps the open one. valuesKey gives each list its own document, so a list that is already open is shown instead of opened twice. - Titles read "Pickup · Variables" or "Listy · nums · [3]". The tab closes when its asset or object is deleted. - Lists on node inputs stay inline only, a node owns no variables. - The List tab, ListEditor and the __gm.list hook are gone. Tests: - ./check.sh: 181 files, 2645 tests, CHECK EXIT 0 - GM_STEPS=1,21,22,32: ALL PASSED, 123 checks - e2e 21 is rewritten for inline lists and the new tab, 22 and 32 are adapted. Sum in README: 1486 (+6 in 21, -1 in 22), counted by hand. - Counter-probes fail as expected: sub-lists not told apart (1 unit test), sub-list replacing the open tab, all items drawn inline (60 rows instead of 20), no live values (0 rows at 24 items in a run). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
92fad6b9e3
commit
4857bb75e6
26 files changed
+1203
-427
No files matched your search
@@ -170,12 +170,12 @@ const DOCUMENT_KINDS = [
|
||||
'curve',
|
||||
'tile',
|
||||
'container',
|
||||
'list',
|
||||
'variables',
|
||||
'management',
|
||||
];
|
||||
|
||||
/**
|
||||
* Clicks the tab of an open document (`asset:<id>` or `list`), through the `»` menu when the row
|
||||
* Clicks the tab of an open document (`asset:<id>` or `values:<key>`), through the `»` menu when the row
|
||||
* hides it. The press lands left of the ×, on the name.
|
||||
*/
|
||||
export async function clickDocumentTab(t, doc) {
|
||||
@@ -188,7 +188,7 @@ export async function clickDocumentTab(t, doc) {
|
||||
if (!row.hidden.includes(doc)) throw new Error(`no tab for ${doc}`);
|
||||
const label = await t.json(`(() => {
|
||||
const id = ${JSON.stringify(doc)};
|
||||
if (id === 'list') return null;
|
||||
if (id.startsWith('values:')) return __gm.tabRow().labels?.[id] ?? null;
|
||||
const asset = __gm.state.project.assets.find((a) => 'asset:' + a.id === id);
|
||||
return asset ? asset.name : null;
|
||||
})()`);
|
||||
|
||||
Reference in new issue
Block a user