From 248fa10a5f54347c62209294b7c61c6ba95a9733 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Fri, 10 Aug 2018 19:37:01 -0700 Subject: [PATCH] Update notes and feature ideas --- Ideas.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- README.md | 31 ++++++++++++++++++------------- 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/Ideas.md b/Ideas.md index 62596e3..b5d51b8 100644 --- a/Ideas.md +++ b/Ideas.md @@ -12,7 +12,7 @@ The major milestones of the game are roughly: * [x] Prototype: make a simple SDL painting program that does nothing special. -* [ ] Simple Platformer: be able to toggle between "edit mode" and "play mode" +* [x] Simple Platformer: be able to toggle between "edit mode" and "play mode" and control a character who can walk around your level and bump into the solid geometry you've drawn (no objects yet, just the basics here). * [ ] Add Doodads (buttons, doors, the player character themself, enemies, ...) @@ -60,6 +60,51 @@ The major milestones of the game are roughly: have some natural limiter where players have to spend time in Play Mode to be able to change the map. +# Edit Mode Features + +* [ ] A menu bar along the top of the screen with normal drop-down menus. + UI toolkit widgets needed: + * [ ] Menu: a pop-up menu, like one summoned by a right-click action. + * [ ] MenuButton: a Button widget that opens a Menu when clicked. + * [ ] MenuBar: a Frame widget that automatically finds the top of your + window and makes it easy to fill it with MenuButtons. +* [x] A status bar that shows your cursor position and other useful details. +* [x] A palette window that shows you your current palette as a series of + radio buttons, and you can toggle between the palette choices. + * Palettes are saved with the level file and the list is dynamic. + * Colors are not tied to behaviors. Each "Swatch" on the palette has its own + color and a set of boolean flags for `solid`, `fire` and `water` behaviors. + * [ ] User interface to edit (add/remove) swatches from the palette. +* [ ] A Toolbox window with radio buttons to select between various drawing tools. + * [x] Pencil (the default) draws single pixels on the level. + * [ ] Rectangle would draw a rectangular outline. + * [ ] Line would draw a line from point to point. +* [ ] A way to adjust brush properties: + * [ ] Brush size, shape (round or square). +* [ ] Tools to toggle "layers" of visibility into your level: + * A drop-down menu with options like "Show all solid", "Show all fire", + "Show all decoration", etc. + * When layers are applied, adjust the way the pixels in the Grid are drawn on + screen. Any pixel that doesn't fit the layers requested should draw in a + muted color like light grey, and the layers requested should show in a + vibrant color. + * Use case: a full-color level can have _many_ solid pixels (grass, dirt, + walls) rendering in all kinds of colors. But you want to see how the collision + burden will be for the level and you can toggle on "Show all solid pixels" + and every solid pixel becomes bright red and all the non-solid pixels turn a + muted grey. This way I can easily see the difference between the colors and + behaviors of the pixels in my level. + +For creating Doodads in particular: + +* [ ] Make a way to enter Edit Mode in either "Level Mode" or "Doodad Mode", + i.e. by a "New Level" or "New Doodad" button. +* [ ] Create a "frame manager" window to see and page between the frames of the + drawing. +* [ ] Ability to work on canvases with constrained size (including smaller than + your window). This will use a Canvas widget in the UI toolkit as an abstraction + layer. Small canvases will be useful for drawing doodads of a fixed size. + # File Formats * The file formats should eventually have a **Protocol Buffers** binary diff --git a/README.md b/README.md index df1a3b4..e7a9c53 100644 --- a/README.md +++ b/README.md @@ -138,34 +138,39 @@ As a rough idea of the milestones needed for this game to work: * [x] Create a user interface toolkit which will be TREMENDOUSLY helpful for the rest of this program. * [x] Labels - * [ ] Buttons (text only is OK) + * [x] Buttons (text only is OK) * [x] Buttons wrap their Label and dynamically compute their size based on how wide the label will render, plus padding and border. * [x] Border colors and widths and paddings are all configurable. - * [ ] Buttons should interact with the cursor and be hoverable and + * [x] Buttons should interact with the cursor and be hoverable and clickable. - * [ ] UI Manager that will keep track of buttons to know when the mouse + * [x] UI Manager that will keep track of buttons to know when the mouse is interacting with them. - * [ ] Frames + * [x] Frames * Like Buttons, can have border (raised, sunken or solid), padding and background color. - * [ ] Should be able to size themselves dynamically based on child widgets. - * [ ] Windows (fixed, non-draggable is OK) - * [ ] Title bar with label - * [ ] Window body implements a Frame that contains child widgets. - * [ ] Window can resize itself dynamically based on the Frame. -* [ ] Create a "Main Menu" scene with buttons to enter a new Edit Mode, + * [x] Should be able to size themselves dynamically based on child widgets. + * [x] Windows (fixed, non-draggable is OK) + * [x] Title bar with label + * [x] Window body implements a Frame that contains child widgets. + * [x] Window can resize itself dynamically based on the Frame. +* [x] Create a "Main Menu" scene with buttons to enter a new Edit Mode, play an existing map from disk, etc. -* [ ] Add user interface Frames or Windows to the Edit Mode. +* [x] Add user interface Frames or Windows to the Edit Mode. * [ ] A toolbar of buttons (New, Save, Open, Play) can be drawn at the top before the UI toolkit gains a proper MenuBar widget. - * [ ] Expand the Palette support in levels for solid vs. transparent, fire, + * [x] Expand the Palette support in levels for solid vs. transparent, fire, etc. with UI toolbar to choose palettes. +* [ ] Add a "Canvas" widget that will hold level drawing data and abstract it + out such that the Canvas can have a constrained width and height, position, + and "scrollable" viewport area that determines rendered pixels. Will be VERY + useful for Doodads and working on levels smaller than your window size (like + doodads). Lesser important UI features that can come at any later time: * [ ] MenuBar widget with drop-down menu support. -* [ ] Checkbox and Radiobox widgets. +* [x] Checkbox and Radiobox widgets. * [ ] Text Entry widgets (in the meantime use the Developer Shell to prompt for text input questions)