Dicey Table

The Inspector

The Inspector is Edit Mode's right-hand panel. It renders exactly one thing at a time: the authored state behind whatever is selected in the Hierarchy, the asset explorer, or the viewport. Select nothing and it shows the scene name and a prompt; select a row and it draws that row's fields, grouped into collapsible sections.

This page is the map. It does not repeat the field-by-field detail — that lives on the pages linked below.

What decides which fields you see: the selection's kind#

Selection carries a kind (SceneNode.kind in the Hierarchy, or a texture/material id from the asset explorer). The Inspector is one large kind-dispatch: for the current selection it renders exactly one branch, and every branch is a different set of fields. There is no generic "entity" renderer — an Entity and a Folder draw completely different UIs.

Verified count: 16 node kinds, each a distinct branch in the Inspector's dispatch (TableEditModeShell.tsx, the selectedNode.kind === "…" chain in the Inspector's render). The 03-editor-guide.md plan estimated 18 and hedged with "+ nested"; walking the actual dispatch chain top to bottom finds 16 named branches and no unnamed ones — the two extra were most likely double-counting the dynamic light/camera component sections or the SELECTION (N) multi-select overlay, neither of which is a kind branch (see below).

kind What it is Documented on
object A table Scene Entity — a card, die, token, board, bag, custom piece or card-holder entity, piece, render, rigidbody, collision, light, camera, script; a bag also gets CONTAINER, a button gets BUTTON
seat-zone One placed zone box owned by a seat platform-panels
seat-label The one name label owned by a seat platform-panels
room The Room folder: environment, scripts, debug/game settings platform-panels
table The table surface's color/texture platform-panels
surface The room's floor or ceiling platform-panels
wall One of the 4 room walls platform-panels
poster An image mounted on a wall platform-panels
walls-group The Walls folder (info only) platform-panels
lights-group The Lights folder (Add Light) platform-panels
light One Room Light — a Platform concept, distinct from the object LIGHT engine component platform-panels
player-zones-group The Player Zones folder (add a seat color) platform-panels
seat-group One seat's color + label text platform-panels
entities-folder The Entities (N) folder (Add Token / Upload Model) platform-panels
texture A project texture asset materials-and-textures
material A project or built-in material materials-and-textures

Two things layer on top of the kind dispatch rather than being kinds of their own:

  • Multi-select. Whenever more than one object row is selected, a SELECTION (N) panel is appended below whatever the primary selection renders — regardless of that selection's kind. Documented on working/multi-select.md (not this task).
  • ENTITY (ADVANCED). The last section on every object selection: a read-only view of the Live Entity the runtime actually built. Documented on inspector/entity-advanced.md (not this task) — see Document vs engine for why it exists and why it is read-only.

Engine components vs Platform panels — the accent color is the point#

An object selection's sections are not all the same kind of thing, and the Inspector says so visually: every section header carries a tone"engine", "platform", or unmarked for the ENTITY header itself — and engine and platform sections render with a different header accent. This is the terminology work (The scene model, Provenance and lifecycle) made visible: if you can point at a section and say whether its accent is engine or platform, you have understood the split even before reading a single field.

Tone Meaning Sections
(unmarked) Not a component at all — the entity header ENTITY
Engine A real PlayCanvas component RENDER, RIGIDBODY, COLLISION, SCRIPT, LIGHT, CAMERA
Platform A DiceyTable classification or feature, never an engine component PIECE, SOUND SETS (BUILT-IN), DIE SETTINGS, SOUND OVERRIDES

The object selection's fixed section order (from the rail's own section list) is:

ENTITY → PIECE → RENDER → [SOUND SETS (BUILT-IN)] → [DIE SETTINGS] → RIGIDBODY → COLLISION
  → [SOUND OVERRIDES] → SCRIPT → [one section per added component: LIGHT, CAMERA]
  → ENTITY (ADVANCED)

Sections in [brackets] are conditional — SOUND SETS (BUILT-IN) only for admin accounts on non-custom pieces, DIE SETTINGS only for a basic (standard-preset) die, SOUND OVERRIDES only for a kind that has sound-emitting events at all. Everyone always sees ENTITY, PIECE, RENDER, RIGIDBODY, COLLISION and SCRIPT.

The ENTITY header: ENABLED disables everything#

ENTITY is not a component section — it is the entity itself: enabled state, the two names, parent, tags and transform. Its Enabled checkbox carries PlayCanvas's own semantics: disabling the entity disables every component on itrender, rigidbody, collision, and any added light/camera — not just visibility. The Inspector's own tooltip on that checkbox says exactly this. See entity.md for the full field list.

Intrinsic vs optional, on the Inspector#

RENDER, RIGIDBODY and COLLISION are always present — every table Entity has them, and they can only be configured and disabled, never removed. RIGIDBODY and COLLISION each carry a real per-section enable checkbox in their header (physics.rigidbodyEnabled / physics.collisionEnabled); RENDER has none — the ENTITY header's own Enabled toggle is the only control, because visibility is owned by one writer end-to-end (the system that also encodes card-face and hidden-information rules) and a second enable flag would fight it. metadata.renderEnabled was proposed and never implemented — if you see it mentioned anywhere else, that mention is stale.

LIGHT and CAMERA are the opposite: absent until you add them from + ADD COMPONENT, and removable. See light.md and camera.md for their fields, and inspector/add-component.md (not this task) for the add/remove/rail UI itself.

Verified section and material counts#

The plan estimated 21+ collapsible sections and 15 material sections. Walking the actual code:

  • 15 material sections, exact match — MATERIAL_INSPECTOR_SECTIONS in packages/shared/src/sceneEditor.ts has exactly 15 entries, unit-tested to that count. Documented on materials-and-textures.md.
  • 23 distinctly-titled collapsible sections outside the material inspector: ENTITY, PIECE, RENDER, SOUND SETS (BUILT-IN), DIE SETTINGS, RIGIDBODY, COLLISION, SOUND OVERRIDES, SCRIPT, LIGHT, CAMERA, ENTITY (ADVANCED) (all under object); SEAT, POSITION, SIZE, ROTATION (seat-zone); BOX SIZE, FONT (seat-label, which reuses the SEAT/POSITION/ROTATION titles too); SCENE SCRIPTS, DEBUG VISIBILITY, GAME SETTINGS (room); COLOR, LABEL (seat-group); and the multi-select SELECTION (N) overlay. table, surface, wall, poster, walls-group, lights-group, light, player-zones-group and entities-folder render plain fields with no collapsible wrapper. Add the texture inspector's 4 panels (Texture, Sampling, Compression, WebP Compression — PCUI Panel, not EmCollapsible, but functionally the same) and the total rises to 27. Either count clears the plan's "21+" floor.

The field filter and the component rail#

An object selection also gets a component rail: a sticky strip of chips above the section list with scroll-spy, arrow-key navigation, and a text filter that hides any section whose title or field labels don't match. That UI — and + ADD COMPONENT — is documented in full on inspector/add-component.md (not this task); this page only notes that it exists, because several pages below reference "the rail" in passing.