TODO: - Tile metadata schemas with arrays that have multiple values in their subitem schema crashes when interacting with TileMetadataEditView, due to value interleaving and not dividing count; need to be rethought. Maybe instead of heterogeneous arrays, automatically turn into sub-array for multiple items. Reformatting gets a bit trickier, but is already incorrect as it is. - Choose numeric type for enumeration metadata rather than always using int32 - When editing tile behaviors, scroll view reconstruction resets scroll position; either save when reconstructing or don't reconstruct so often - Removing a tile adjacency behavior while undo history was owned by ImageCollectionEditorScreen didn't allow removal to be undone (may have to switch screens; undo was available on screen 4, then after switching to 5 and back to 4, was no longer available) - Allow greater zoom than 2000% (at least 3200%) - Want grid overlay option while zoomed - Hexadecimal checkbox for tile overlay draw priority (remember preference) - Draggable handles on last rectangle selection - Selection tool takes and remembers a snapshot of most recent prior selection; if selection hasn't been modified since (does it have a dirty value? (also watch out for image dimension changes)), draw handles similar to resize tool when tool is active, restore snapshot and start new operation at most recently recorded rect - When multiple TileAdjacencyBehaviors are selected, copy button should copy all of them (probably also applies to sprites, tiles, images, etc.) - Want to see name of image in image selector (tooltip or always-onscreen name display for hovered item) - After dragging to copy multiple behaviors (starting drag from not the first selected), some incongruity between which behavior index was selected; properties view edited first one, while control-page-down continued from equivalent of drag start - Undoing/redoing a behavior change should select that behavior in the palette view - Tile/image selector should accept keyboard input - Respect ignoreTiles when drawing with behavior set on tile map editor screen (can do easily with modified query callback) - Delete key just after clicking overlay palette should delete TileAdjacencyOverlay instead of erasing image entry pixels (same applies to sprite frames) - Sprite animation version 2: - Loop point - Multilayered frames - Opacity and color properties (interpolatable for sprite; also applicable to TileAdjacencyBehavior) - Flip and rotate - Play sprite animation in main DrawView in addition to palette view? (some way to initiate playback at a larger size, at least; maybe a separate preview area, possibly with timeline) - Older idea: Sprite preview window, like TileMapViewWindow, with zoom and playback controls (allow audio to be loaded and synchronized) - Some way to go to an image, tile, or sprite by typing its identifier - Randomize tool: Pick a list of cell states, weights, and random seed, and when filling, distribute them in filled area - Gradient tool (dithered, blended; dithered can work with tile map targets) - Tooltips for sprites, tiles, and images in palette view, showing ID and name (elongated hover delay?) - Want to be able to adjust image effect steppers (brightness/contrast) with greater precision (some sort of quaternion-playground-style variable drag widget?) - Some way to bulk edit multiple selected characters on font editor screen (offset advance, set fixed color, maybe offset image) - Add checkbox on screens that have document and local metadata to show document metadata, rather than putting it in the properties window - Show metadata of newly placed tiles immediately - Add a label next to MetadataEditView showing which metadata is targeted (and how many items if multiple) on all applicable screens - Tab from top level of ImageCollectionEditorScreen subclasses to identifier or name field - Snap to grid option in TileZoneMapEditorScreen - Bug: When creating a new sprite, name field keyboard focus overrides modal "take ownership of undo state" dialog - Bug: Metadata edit window refocuses default value field after changing integer type, even if it was out of focus beforehand - Pencil tool mode that ensures single pixel lines when drawing freehand (see Aseprite/Pyxel Edit behavior) --- - Window background color preference (dark mode) - TileMapEditorScreen_new: Minimap for zone navigation (option to show/hide; where onscreen? Replace metadata view?) - Also option to show adjacent rooms in TileMapEditView_new (press semicolon to show at edges just like tile editor) - Zone map editor screen: Menu items to order room higher, lower, to top, to bottom - Quick access tile palette for tile map editor screen - Changing document size when synchronized with layers should change all layer sizes that match, maybe? - Multiple crash points in SpriteEditorScreen and SpritePropertiesView when operating on frames with unresolved images; check all places where sprite frame's imageIndex is used to look up an image in the loaded ImageCollection - Bug: Changing tile zone map identifier from project screen doesn't know what to do with undo state; maybe don't fix and implement RegisteredDocument instead? - Navigating to an adjacent tile map creates additional new ones if not saved to the project; need RegisteredDocument to fix? - Some way for renumbering tiles to also update tile maps - Best way might be after implementing RegisteredDocument, to renumber everything in the project all at once and make it dirty - Poor performance when mousing over 768 x 512 image with fill or swap color tools; investigate and profile - One quad drawn per pixel is the slow part. Replace with shader and texture poking. - PaintPresets - Editing on project screen - Pick from list in tool accessory view - Save to disk - Options for brush generator (radius, hardness, opacity curve) - Redo metaphor of open files; global list referenced by both ProjectScreen and editor screens, with dirty state management allowing data sharing - Tile behavior editor: Tool for adjusting tile and overlay slice insets - World map editor - Option to add a tile map from the project instead of browsing for a file - Draw selection with animation --- - Option to highlight overlaps between rooms - Sublayers - 2 different modes: Fixed room size (room-sized grid), variable room size (free movement with snapping)? - PNG export (all/all selected) - Project editor screen - Stepper to go to next/previous item, and reorder with alt held - Should/could ProjectEditorScreen reach out to all other screens, check their open files, and take references from them when loading ProjectBundle files, instead of loading a separate copy? - Show item preview - Still needed: zone map, paint presets - Edit list of color palettes, brushes, fill patterns, sliced images within PaintPresets - Edit contents of brush, fill pattern, sliced image - Edit contents of color palette (functional but needs work) - ColorPaletteEditorWindow is very bad; redo - Set active color palette - Set active PaintPresets - Establish project default tile map size, with an option to warn if different. Default created tile map size on TileMapEditorScreen_new to project default. - Export automation? (Write flattened image, font and associated data, etc. to some specified path for each item) - Bug: Resizing graphic on sprite editor screen (right side one pixel left) while channel editor was open on image collection screen left stale texture drawing in channel editor afterward - Clean up color palette editor window - Need to be able to easily sample colors from image and add to palette - Button to add entries for all unpaletted colors in image or selection - Reorder colors - Warn about ambiguous palette entries (different name with same RGB value) - Create several more default color palettes --- - Help display that shows key/modifier shortcuts and their effect on active tool in the current state - Can select a different tool while drawing with free shape tool, draw with it, and crash; either cancel current draw or disable different tool selection - Canceling draw may be best, and also should happen when changing screens, interacting with layers, changing colors? - Coalesce certain operations into a single undo node (nudging sprite, changing frame duration) - Removing enumeration values should update metadata editor window with that enumeration in its properties - Show noninteractive TileMapCoordinateEditOverlay on mouseover of a coordinate field in metadata view - Image effect window should remember settings across screens if same target type (save settings in ToolContext?) - Shape guides for TileAdjacencyDrawView - Include diagonal lines where slices can be split into triangles (or rethink triangles entirely) - Better tile adjacency support for self-adjacencies - Larger patterns for TileMapVisual (DROD-style automatic checkerboarding) - Shape size coordinate icon doesn't look good; redo (add size arrows, and maybe same to selection size icon) - Brush/pattern fill(/sliced image?) draw mode that interpolates between foreground and background colors based on lightness of CellImage - Make color picker pop-up appear over channel editor window (may need mechanism for offsetting UIPopUpView and/or UIWindowView priority) - Save and reload ImageEffect presets - Button to auto-assign tileset enumeration values in ascending order - Button to update tile map schema where warning text is - Application icon on Mac OS X and Windows --- - Image composition editor - Arbitrarily placed, non-grid-aligned ImageCollection entries - Parallax - Selective image import (open two image collections(/tilesets/sprite collections?) at the same time and drag from one to the other) --- - Stonefall tile maps show gaps at 75% zoom; requires same fix as for tile map thumbnails? - Adapt brush tool (and sliced image, and pattern fill) to work with depth map editor (need translucency, blending with selected draw depth) - Importing a BitmapFont or BitmapFont2 will overwrite open ImageCollection without saving changes - Separate UndoTree for brush/pattern/image slice windows - Keyboard events to DrawView are buggy; using arrow keys when BitmapChannelEditorWindow is open and has a selection will always move selection, even if window doesn't have focus - Accessory view for shape tools to specify default fill type - Resize image without scaling (Image/layer size menu items separate from scale image) - Use DrawTool_getValidTargetTypes to determine whether a tool can work on a particular DrawSurface (such as resize tool on channel editor) - "Erase transparent" image effect is awkward to use with channel editor open; should automatically target main DrawSurface somehow - Ellipse rasterization repeats some cells. Wide aspect ellipses are perfect; instead of fixing narrow ones, could run algorithm with transposed X and Y - FreeShapeBuffer repeats some cells in its line to the origin - Gradient fill - Linear, radial, square, distance from edge? - User friendliness: - Show text indicating modifier key effects on tools (and backspace/enter/escape for angular shape tools) - Key rebinding - Scaling image should zoom toward center instead of corner - Scaling image deselects all; probably should scale selection alongside image - Scale floating layer - Reselect last selected image/tile/sprite/etc. when undoing adding a new entry - More generally, remember last editor state in a pair of state cookies stored with every undo state delta, and restore when undoing/redoing (including selection) - Restore pencil last draw position on undo - Issue to make sure is solved by the above: Create new codepoint at the beginning of a font, then undo; ImageCollectionUndoStateDelta applies after FontEditDataUndoStateDelta, and selects an image at the end of the font - Instead of taking ownership and resetting undo history, remember which screen was active for each node and switch back to that screen (can be part of above change) - Hold a key (Q) to flash up an alternate image for comparison (how would this work? Moused over image in palette? Maybe need to be able to adjust offset. Right click action on palette with option to set as compare image?) - Different character, same font - Same character, different font, different scale - Use CellImage + scale/offset? - Reverse order of open dialog and save before closing prompt (also applies to modeler) - Show hand cursor when holding spacebar over DrawView - Undoing or redoing an origin change offsets DrawView scroll incorrectly - Also true for moving document on ImageEditorScreen - Maybe this is best addressed with state cookie? - Questionable triangles visible on cliff in prototype2d.tilemap_edit - Some way to define spans/rectangles on tile map (could be metadata that defines height/width from tile, with highlight of area shown) - Some artifacting in upper left corner of DepthMapSlicePreview; lighter than expected and linear filtered. Why? How? --- - Remove all instances of discriminating open file type by extension; instead try to load and try other formats on failure - Open any type of file from any screen, and switch to the appropriate one based on file type - Font editor improvements - Zoom in and out in FontTestWindow - Show BitmapImage in CodepointPromptDialog - Unicode table/character picker for codepoint selector - Live update for numeric codepoint edit field - Some way to drag to edit baseline, base height, cap height, descent - Adapt scale image dialog for font scaling - Don't remove width field; allow aspect ratio change during scale - Option to scale kerns alongside font (or just always do it?) - Kerning preview window (including unkerned characters) - Copy and paste kerns between characters - Drag and drop between kern palette and other characters in character palette? (Need cross-palette drag-and-drop support in UIPaletteGridView if so, but doable) - Smoothly edit both preceding and following character kerns - UIStatusMessageView should keep a log of all messages, with an option to open a window showing message history (timestamps, color, selectable text) - Tile selector display on TileMapEditorScreen_new is a mess for long tile names or tall tiles - Unimplemented add sprite/adjacency menu items - Export all tiles (unimplemented on TileEditorScreen_new) - Layer opacity slider doesn't work on tile map screen with appearance checkbox checked --- - Quick access/recent tile and color palette (automatically save last n used DrawSurface_cellState in a way that can be recalled) - Interpret depth map as bump map and automatically generate normal map in other 3 channels - Paste tile metadata - Accept application-level drag and drop events for opening files --- - Prompt to take ownership of image shouldn't come up at start of a floating selection drag (maybe at end?) - AnimationEditorScreen - Show metadata editor immediately for newly placed tiles with metadata? (Need to highlight in DrawView in some way other than with selection; probably a good idea anyway even when selecting) - Inspector tool for clicking a single tile for metadata editing without changing selection? - Handle closing application while ImagePickerDialog is up (or generally any modal dialog?) (see ApplicationScreen_showQuitConfirmationDialog) - Animated tile adjacencies - Export/import metadata schema - Document/layer resize preview is invisible on a black background; draw some sort of alternating black-and-white pattern border while resizing --- - Dragging out of DrawView bounds with a selection or shape tool should scroll the view - Option to import all entries from an existing ImageCollection file into open one (may need interactive merge for ID/name conflicts) - Some sort of hierarchical group organization for ImageCollection? Group ID for each entry; list of groups in ImageCollection struct, UI for browsing/collapsing groups - Draw into floating selection (including image effects; need to set as DrawSurface target) - Undo actions that affect floating selection - Bug: Select a subrect of document, crop document to selection, undo, selection is offset to top left - Figure out how DrawTool_selectPencil interacts with floating selection - Bug: After canceling modal prompt to save edited schema, schema editor window no longer has focus; UIPopUpMenu interaction may lose focus too - Additional image effects: Threshold, posterize, instant desaturate, levels - Tile map thumbnails look bad; need different sampling (shader? Render to texture?) - Controls for premultiplication: Interpret opened files as premultiplied or not; operation to apply and reverse; analysis and warning when unpremultiplying something that doesn't look premultiplied - Undoing is really weird around floating layers; what happens when undoing immediately after a float is confusing - Undo nodes for selection and floating selection that don't affect document dirty state - Multiple coordinated UndoTrees? One for DrawView, one for image/tileset/tilemap; some undos revert one or the other, some both. Sequence numbers on state deltas that can be matched? - Add editable number fields and steppers to image effect controls --- - Timeline visualizer for sprite animation - Option for tile map PNG export to extend beyond edges - Right click menu for layers (delete, copy, merge) - Selection: - Some equivalent of quick mask mode - Selection editor window, similar to channel editor (could be quick mask equivalent) - Rescale selection when selecting a layer with a different scale factor or changing current layer's scale factor - Different view modes to show selection values (configurable threshold, number overlay for every cell?, multiple thresholds?, ?) - Draw a different rollover highlight for selection tool, with lines only on the sides of the cell where the cursor is --- - Exporting image with layers that have scale factor applied doesn't work correctly; layers are individually exported at pixel size. Need to scale output image up to commonly divisible multiplier? - Option to scale all tile images when changing tileset size - Channel editor - Better channel selector (thumbnails) - Keyboard controls for switching channel - Display mode that shows triangles of RGBA pixels and triangles of alpha value? - Improve UIMenuBar handling of moving mouse to submenus (keep submenu open if moving toward it) - UndoTree visualizer - An UndoTree for DataValueSchemaEditorWindow might be nice; currently fragile, and undoing a schema list change will wipe out unapplied work on schema edits --- - Easy way to choose whether to replace portion under floating selection or composite; hotkey to toggle modes, including preview while floating? - Parallax editor - WebP support - ico support - gif support - Interact with system clipboard? - https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html --- - Blink animation for tile being placed in TileMapEditView? Preference? Also apply to Image/TileDrawView? - Preferences: - Key bindings - Automatically float selection on drag or arrow keys - Select layer when making visible - Zoom TileDrawView to leave room for edge repetitions - Blacklist prefixes for recent documents - Save image as PNG by default if compatible --- - Larger, more spaced-out tool icons - Make tool preview work with eraser - Improve tool preview in TileMapEditorView (should be some visual distinction between already-placed tiles and preview ones) --- - Gradients - Complex shapes - Saved presets for operations like image resize - Image effect like posterize that uses dithering patterns between a very small number of colors - Idea: Sample an area of an image and generate some sort of interactive color gamut map from it (HSV ranges and average?) Old notes: - Edit standalone animations as well as animated tiles (timings, origin point, layers; use for Order of the Moon character sprites) - Font editor (bitmap, SDF, kerning) - Multichannel SDF: https://github.com/Chlumsky/msdfgen - Templated tile collections (multiple tiles put together into a larger shape that can be rearranged or pasted into the scene as-is) - Divide tile map into rooms; show full map with boundaries marked - Parallax background editing - Embed into level editors, with specialization and extension USAGE TASKS: - Edit single image - Edit channels separately (four checkboxes for show, four checkboxes for edit, single channel grayscale edit mode) - Layers - Draw tiles - Choose tile to draw - Edit variations for joins with other tiles - Draw sprite animation - Set animation timings - Preview animation - Lay out tile map - Lay out connections between tile maps - Set auto-tile rules - Draw font - Kern font - Edit arbitrary metadata - Place objects on tile map Data of all graphics: - Bounds - Identifier - Origin Document rules: - Color palette - Layer count - Object alignment - Tile metadata - Connectivity mode (world map, doorways, ...) Auto-tile worksheet (old): 0000 (1) 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 (14) 0012 0021 0102 0112 0120 0121 0122 0201 0210 0211 0212 0221 1002 1012 1020 1021 1022 1102 1120 1201 1202 1210 1220 2001 2010 2011 2012 2021 2100 2101 2102 2110 2120 2201 2210 (35) 0123 0132 0213 0231 0312 0321 1023 1032 1203 1230 1302 1320 2013 2031 2103 2130 2301 2310 3012 3021 3102 3120 3201 3210 (24) How to get from where I am to where I need to be: - Break adjacencies up into individual images per combination - Add image offset to adjacency, allowing overlap out of boundaries - Boundary center depends on which adjacency for odd-numbered tile sizes; bias one way or the other on each axis - Remove triangles from TileMapVisual; quads only - Four categories of adjacency: 1-tile (1), 2-tile (14), 3-tile (35), 4-tile (24) - UI for showing which adjacencies are unassigned for each tile (adjacencies are bidirectional; A->B is the same as B->A, though may need to be flipped or swizzled for equivalent) - Preview of all permutations - Actually, maybe each corner slice is defined as a separate image? Can avoid redundancy and minimize atlas footprint