Add a node that names the render layer of an object (#305)
game-maker / gate (push) Successful in 3m14s
game-maker / suite (push) Failing after 14m18s

The issue asked for Set render layer, Set sees and Render layer of. As
with #211, a probe showed that writing already works. A Properties
node of the object's type writes Render layer during a run, Inherit
included, and one of type Camera writes Sees. The next picture follows
both. As agreed, only Render layer of is built, and writing stays with
Properties.

- Render layer of is a data node with the input object and the outputs
  name and number. It answers the layer that holds, so an object
  without a choice of its own names its parent's.
- NodeContext.renderLayerOf answers the number with the same rule the
  drawing uses (renderLayerAlong). The new field renderLayers on
  GraphLookup brings the names to the node.
- hasRenderLayer in PropertySchema says which types are drawn.
- Decided here: for an object that is not drawn (a camera, a
  behavior, a collider) the name is empty and the number -1, as Layer
  of does without a collider.

Changing the render layer or Sees during a run had no test so far.
Three unit tests now hold the proof from the issue.

Tests:
- Gate: 231 files, 3534 tests (3526 + 8), exit 0
- e2e 6: 149 checks passed, e2e 63: 13 checks passed (+1)
- Unit: the coin moves into the overlay with Set and back with
  Inherit, a HUD container takes its sprite along, the main camera sees
  a second layer once its Sees is set, and Render layer of names the
  inherited layer, and none for a behavior
- Node catalog: four cases for Render layer of
- 63c3 moves a sprite onto UI in a Play run: the main camera no longer
  draws it, and the log reads "UI" and "1"
- Three counter-probes fail 1, 1 and 2 tests: without inheriting in
  the node, without the check for a drawn type, and without
  inheriting in the drawing
- "layer of" in the palette still finds Layer of first (6z-x)
- The e2e sum is 1731 (1730 plus 1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-03 19:25:47 +02:00
1 parent 70f3608733
commit d9c6bbfa4d
12 files changed
+250 -8

No files matched your search

@@ -0,0 +1,22 @@
import { layerName } from '../../../model/collisionLayers';
import type { NodeDef } from '../../NodeRegistry';
import { asEntity } from '../../values';
import { num, obj, str } from '../shared';
export const RenderLayerOf: NodeDef = {
type: 'RenderLayerOf',
label: 'Render layer of',
category: 'data',
description:
'The render layer an object is drawn on, by name and by number: its own, else the one it ' +
'inherits from its parent. For an object that is not drawn the name is empty and the number -1.',
inputs: [obj('object')],
outputs: [str('name'), num('number')],
params: [],
read: (ctx, _params, input, _def, lookup) => {
const target = asEntity(input('object'));
const layer = target ? ctx.renderLayerOf(target) : null;
if (layer === null) return { name: '', number: -1 };
return { name: layerName(lookup.renderLayers(), layer), number: layer };
},
};
+2
View File
@@ -88,6 +88,7 @@ import { PackStruct } from './data/PackStruct';
import { Properties } from './data/Properties';
import { Parent } from './data/Parent';
import { Random } from './data/Random';
import { RenderLayerOf } from './data/RenderLayerOf';
import { Round } from './data/Round';
import { Select } from './data/Select';
import { Self } from './data/Self';
@@ -261,6 +262,7 @@ export const BUILT_IN_NODES: readonly NodeDef[] = [
IsHovered,
IsTouching,
LayerOf,
RenderLayerOf,
Move,
MoveToward,
SetPosition,