prometeu-studio/discussion/workflow/plans/PLN-0052-scene-workspace-wave-1-tilemap-editor.md
2026-04-15 07:21:59 +01:00

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.