Update notes and feature ideas

This commit is contained in:
Noah 2018-08-10 19:37:01 -07:00
parent e1cbff8c3f
commit 248fa10a5f
2 changed files with 64 additions and 14 deletions

View File

@ -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

View File

@ -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)