152 lines
5.2 KiB
Markdown
152 lines
5.2 KiB
Markdown
---
|
|
id: PLN-0052
|
|
ticket: studio-scene-workspace
|
|
title: Implement Scene Workspace wave-1 tilemap editor
|
|
status: abandoned
|
|
created: 2026-04-14
|
|
completed:
|
|
tags:
|
|
- studio
|
|
- scene
|
|
- workspace
|
|
- tilemap
|
|
- ui
|
|
---
|
|
|
|
## Objective
|
|
|
|
Implement the wave-1 `Tilemap` experience for `Scene Workspace` according to `DEC-0026`.
|
|
|
|
## Background
|
|
|
|
The accepted decision limits wave 1 to one visible tab, `Tilemap`, with four layers, independent layer dimensions, explicit tile presence semantics, scene-first navigation, and basic editing tools only.
|
|
|
|
## Scope
|
|
|
|
### Included
|
|
- Left scene navigator.
|
|
- Top tab strip with only `Tilemap` visible.
|
|
- Central tilemap editing canvas.
|
|
- Right-side tilemap details and tile palette regions.
|
|
- Four-layer editing model with visibility and focus.
|
|
- Basic painting, erasing, and tile selection.
|
|
|
|
### Excluded
|
|
- Camera boundaries.
|
|
- Lights.
|
|
- AABB authoring.
|
|
- Placeholder tabs for unsupported aspects.
|
|
- Advanced editing tools such as bucket fill, marquee, flood fill, or lock semantics.
|
|
|
|
## Execution Steps
|
|
|
|
### Step 1 - Build the workspace projection model
|
|
|
|
**What:**
|
|
Create projection/view-state types for the scene navigator, active scene, active layer, tile palette, and tilemap details.
|
|
|
|
**How:**
|
|
Follow the event-driven workspace framework already used by other Studio workspaces. Keep projection boundaries local so navigator, details, and palette can update without whole-workspace redraw.
|
|
|
|
**File(s):**
|
|
- new projection and message classes under `prometeu-studio/src/main/java/p/studio/workspaces/scene/`
|
|
|
|
### Step 2 - Build the left navigator and scene selection flow
|
|
|
|
**What:**
|
|
Render a scene-first navigator that lists authoring scenes, not assets.
|
|
|
|
**How:**
|
|
Introduce a custom navigator control inspired by `Assets` patterns but scoped to scene identity, with linked asset context rendered only as secondary status.
|
|
|
|
**File(s):**
|
|
- new controls under `prometeu-studio/src/main/java/p/studio/workspaces/scene/list/`
|
|
- `prometeu-studio/src/main/java/p/studio/workspaces/scene/SceneWorkspace.java`
|
|
|
|
### Step 3 - Build the wave-1 Tilemap layout
|
|
|
|
**What:**
|
|
Implement the single visible tab and its three-region body.
|
|
|
|
**How:**
|
|
Compose:
|
|
- central tilemap canvas;
|
|
- right upper details panel;
|
|
- right lower tile palette;
|
|
- layer controls for visibility and focus.
|
|
|
|
Do not expose unsupported tabs.
|
|
|
|
**File(s):**
|
|
- `prometeu-studio/src/main/java/p/studio/workspaces/scene/SceneWorkspace.java`
|
|
- new controls under `prometeu-studio/src/main/java/p/studio/workspaces/scene/tilemap/`
|
|
|
|
### Step 4 - Implement tile selection and painting
|
|
|
|
**What:**
|
|
Support the basic editing interactions required by the decision.
|
|
|
|
**How:**
|
|
Implement tile selection from the palette, paint on the active layer, erase by clearing explicit tile presence, and preserve valid `glyph_id = 0` semantics.
|
|
|
|
**File(s):**
|
|
- tilemap interaction classes under `prometeu-studio/src/main/java/p/studio/workspaces/scene/tilemap/`
|
|
- scene model classes under `prometeu-studio/src/main/java/p/studio/workspaces/scene/model/`
|
|
|
|
### Step 5 - Implement tileset resolution and layer detail rendering
|
|
|
|
**What:**
|
|
Resolve glyph-bank-backed tileset data for the active scene/layer and show dimensions/details in the side panel.
|
|
|
|
**How:**
|
|
Consume the scene-owned tileset choice, render available tiles and palette choices, and expose active layer dimensions and relevant properties without handing ownership to `Assets`.
|
|
|
|
**File(s):**
|
|
- scene workspace service/projection classes
|
|
- tile palette and detail controls under `prometeu-studio/src/main/java/p/studio/workspaces/scene/tilemap/`
|
|
|
|
## Test Requirements
|
|
|
|
### Unit Tests
|
|
|
|
- Projection-state tests for active scene, layer visibility, and focus.
|
|
- Tile painting tests that preserve explicit presence semantics.
|
|
- Palette-selection tests that keep `glyph_id = 0` valid.
|
|
|
|
### Integration Tests
|
|
|
|
- UI-oriented tests for scene selection, tile selection, paint, erase, and save-triggered refresh.
|
|
|
|
### Manual Verification
|
|
|
|
- Open `Scene Workspace`, create/open a scene, and confirm the navigator is scene-first.
|
|
- Paint and erase on different layers with independent dimensions.
|
|
- Verify layer visibility/focus changes do not corrupt scene data.
|
|
- Verify only the `Tilemap` tab is visible in wave 1.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- [ ] `Scene Workspace` renders a scene-first navigator.
|
|
- [ ] Wave 1 exposes only the `Tilemap` tab.
|
|
- [ ] The editor supports four layers with independent dimensions.
|
|
- [ ] Painting and erasing respect explicit tile presence semantics.
|
|
- [ ] Layer visibility and focus work in the tilemap editor.
|
|
- [ ] Tile palette and details panels reflect the active scene/layer context.
|
|
|
|
## Dependencies
|
|
|
|
- `DEC-0026-studio-scene-workspace.md`
|
|
- `PLN-0049-scene-workspace-spec-and-boundary-propagation.md`
|
|
- `PLN-0050-scene-workspace-shell-and-project-state-foundations.md`
|
|
- `PLN-0051-scene-artifact-and-assets-handoff-contract.md`
|
|
|
|
## Risks
|
|
|
|
- Overbuilding the first UI pass could quietly introduce unsupported aspect tabs or tools.
|
|
- Canvas interaction code can become monolithic if projection boundaries are not enforced early.
|
|
- Tileset rendering may drift toward asset-first ownership if scene-owned selection is not kept explicit.
|
|
|
|
## Abandonment
|
|
|
|
Abandoned on 2026-04-15 because the parent decision `DEC-0026` was explicitly abandoned by the user.
|