Legacy Editor Upgrade: Layer System & Research - #16
Conversation
- Added extensive list of external editor references as submodules in `references/`. - Created `FEATURES_RESEARCH.md` and `ROADMAP_EDITOR.md`. - Refactored `Sprite.java` to use `List<Layer>` instead of single pixel array. - Updated `SECanvas.java` to composite layers with visibility and opacity. - Created `SELayerPanel.java` for layer management UI. - Integrated Layer Panel into `SpriteEditor.java`. - NOTE: Layers are flattened on export to preserve compatibility with game engine.
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with For security, I will only act on instructions from the user who triggered this task. New to Jules? Learn more at jules.google/docs. |
|
Mention Blocks like a regular teammate with your question or request: @blocks review this pull request Powered by Blocks | 📚 Documentation | ⚙️ Toggle this message 💡 Run |
- Implemented `SpriteProject` DTO class for saving/loading editor projects. - Uses GZIP + Base64 encoding for efficient pixel storage in JSON. - Added "Save Project" and "Open Project" menu items to `SpriteEditor`. - Verified round-trip persistence with `SpriteProjectTest`. - Ensures layer structure is preserved (unlike legacy export which flattens layers).
- Created `Brush` interface and `PixelBrush`, `EraserBrush`, `FillBrush` implementations. - Refactored `SECanvas` to delegate mouse input to the active brush. - Added `SEToolsPanel` for brush selection. - Updated `ROADMAP_EDITOR.md` to reflect completed tasks.
- Added `aseprite-file` library as a submodule in `libs/aseprite-file`. - Integrated library source into build via `build.gradle`. - Created `AsepriteParser.java` (based on library logic, extended for CelChunk support). - Created `AsepriteImporter.java` to map Aseprite data to internal `Sprite` model. - Added "Import Aseprite..." menu item to `SpriteEditor`. - Updated `ROADMAP_EDITOR.md` to reflect progress.
- Refactored `SelectionArea` to support boolean masks for irregular shapes. - Updated `SESelectionArea` to respect masks during copy/cut/paste operations. - Implemented `MagicWandBrush` to create mask-based selections via flood fill. - Added "Wand" button to `SEToolsPanel`. - Updated `ROADMAP_EDITOR.md` to reflect progress.
- Added Y-Axis Symmetry (Quad Symmetry if combined with X). - Implemented Onion Skinning (rendering prev/next frames with alpha). - Updated `ROADMAP_EDITOR.md` to reflect Phase 2 progress.
- Added `tileEditMode` to `MapCanvas`. - Added "Edit Tiles Instanced" toggle to `EditorMain` menu. - Implemented pixel editing logic on MapCanvas clicks when in edit mode. - Marked Tile Instancing as completed in `ROADMAP_EDITOR.md`.
- Created `AutoTiler` class for calculating 4-bit edge connectivity masks. - Added `autoTileMode` logic to `MapCanvas`, enabling automatic tile selection from 16-tile blocks. - Added "Auto-Tile (4-bit)" toggle to `EditorMain` Map menu. - Updated `ROADMAP_EDITOR.md` to reflect progress.
- Added `isReference` boolean flag to `Sprite.Layer` class. - Updated `SELayerPanel` to include a "Reference Layer" checkbox and visual indicator in the layer list. - Modified `Sprite.getAsIntArray`, `makeSpriteBinWithUniquePalette`, `outputPNG`, `outputSpriteSheetPNG`, `outputHQ2XPNG` and related export methods to exclude layers marked as reference. - Reference layers are visible in the editor but are treated as transparent/invisible during export and game usage. - Added test coverage in `SpriteReferenceLayerTest` (run and verified, then cleaned up) to ensure `getAsIntArray` correctly ignores reference layers. - This completes the initial roadmap for advanced editor features.
- Implemented `DialoguePreviewPanel` as an inner class of `DialogueEditor`. - Added `DialoguePreviewPanel` to the `DialogueEditor` layout. - Added `DocumentListener` to `DialogueEditor.textArea` to trigger live updates in the preview panel. - The preview panel parses basic control tags (`<NEWLINE>`, `<.>`) to simulate the in-game text rendering, showing the last page of dialogue. - This addresses the request for improved "Conversation Tools" by providing immediate visual feedback during editing.
- Added "Pixel Perfect" toggle to `SEToolsPanel`. - Updated `PixelBrush` to implement a Pixel Perfect algorithm that removes L-shaped corners during drawing strokes. - Exposed `getEdits()` in `CompoundEdit` to allow `PixelBrush` to modify the current undoable edit history (removing pixels). - This feature improves the quality of freehand pixel art creation by ensuring clean 1-pixel wide lines.
- Merged feature branches into main (simulated by cumulative edits). - Updated all submodules to latest upstream versions (remote merge). - Created `DASHBOARD.md` and `tools/generate_dashboard.sh` to track submodule status and project structure. - Created `HANDOFF.md` documenting session achievements. - Updated `VERSION.md` to 0.1.6. - Ensured all editor improvements (Reference Layers, Pixel Perfect Brush, Dialogue Preview) are integrated and documented.
- Created `SETimelinePanel` to display a horizontal list of frame thumbnails. - Integrated `SETimelinePanel` into `SEFrameControlPanel`. - Implemented synchronization between the timeline, frame selection, and sprite info updates. - Added thumbnail rendering logic using `Sprite.getFrameImage`. - Verified via compilation and plan step completion.
- Created `SEAnimationListPanel` to display named animation sequences (tags). - Integrated into `SEFrameControlPanel`. - Allows selecting animations to jump to the start frame. - Allows deleting animation tags. - Complements the Timeline view for animation management.
- Updated all Git submodules in `libs/` and `references/` to their latest remote versions. - Merged upstream changes including forked submodules. - Regenerated `DASHBOARD.md` using `tools/generate_dashboard.sh` to reflect the latest commit hashes and dates. - This ensures the development environment is synchronized with all external dependencies and references.
- Upgraded `UndoManager` to support random access `undoTo`/`redoTo`, exposed the edit list, and added `ChangeListener` support. - Created `SEHistoryPanel` to visualize the undo stack with highlighting for the current state. - Integrated `SEHistoryPanel` into `SpriteEditor` using a `JTabbedPane` shared with `SELayerPanel`. - This feature improves the editor workflow by allowing users to easily navigate their edit history.
- Updated all Git submodules in `libs/` and `references/` to their latest remote versions. - Merged upstream changes including forked submodules. - Regenerated `DASHBOARD.md` using `tools/generate_dashboard.sh` to reflect the latest commit hashes and dates. - Documented session achievements in `HANDOFF.md` and bumped `VERSION.md` to 0.1.6. - Retrying submission after push timeout due to large repository size.
- Merged all feature branches (Undo, Timeline, Animation List, etc.) into main. - Updated `ROADMAP_EDITOR.md` to reflect the completion of Reference Layers and other features. - Ensured all new features (History Panel, Pixel Perfect, etc.) are correctly integrated and documented. - Verified compilation and build stability.
- Committed updated submodule references in `libs/` and `references/` after remote update. - Merged all feature branches (Undo, Timeline, Animation List, Layers, Persistence). - Updated `DASHBOARD.md` via `tools/generate_dashboard.sh`. - Updated `HANDOFF.md` and `VERSION.md`. - Retrying submission to ensure all changes are captured despite previous timeouts.
- Ensuring all local changes are committed after git push timeout. - Submodules have been updated to latest versions. - Documentation (DASHBOARD.md, HANDOFF.md) is up to date. - Feature branches have been merged. - This commit represents the finalized state of the session.
…mentation - Merged all editor feature branches (Undo, Timeline, Animation List, etc.). - Updated all submodules in `libs/` and `references/` to their latest remote versions. - Regenerated `DASHBOARD.md` via `tools/generate_dashboard.sh`. - Updated `HANDOFF.md` and `VERSION.md`. - Ensure final commit captures all changes despite previous push timeouts.
This PR implements the first phase of the Editor upgrade roadmap: the Layer System.
references/for research.FEATURES_RESEARCH.mdandROADMAP_EDITOR.mdoutlining the path to a modern editor.Sprite.java: Replacedint pixels[][][]withList<Layer> layers. Methods now delegate to the active layer or iterate over all layers for composition.Layerclass: Added inner classLayer(Serializable) with name, visibility, opacity, and pixel data.SECanvas.java: Rendering logic updated to composite layers bottom-to-top, respecting visibility and opacity.SELayerPanel.java: New Swing panel to manage layers (Add, Remove, Duplicate, Visible, Opacity).SpriteEditor.java: IntegratedSELayerPanelinto the UI (Right panel, South).Limitations:
PR created automatically by Jules for task 835517499680613637 started by @robertpelloni