Tileset Builder:
[ ] Finish consolidating tilesets into AtlasBuilder
------->[ ] While tilesets have their own "Builder", Anims, Fonts and Maps should be saved directly in the Renderer to ensure a single entry for each corresponding Enum variant.
[x] Save and Load Group data
Save all group enum variants with their respective data, or...
Save only the groups explicitly inserted into tileset?
[x] Save and Load Anim data
[x] Save and Load Tilemap data
[x] Anim consts should be unique (per Renderer), but groups shouldn't (no tileset stored, works in any tileset/tilemap).
- Anims are about looks, which tiles to use
- Groups are about functionality, no need to restrict to a tile
- That means a "Font" should be its own thing: a range of tiles within a tileset, neither Anim or Group
[/] Use keychains instead of Enums?
Pros:
- Direct access to/from u8
- Group count is defined in build script
Cons:
- Naming mechanism? Runtime init now has difficulty assigning index to a variable. I.e. which index is "IdleAnim"?
Ideas:
[/] Instead of KeyChains, simply use named constants in globals.rs, like this:
pub const SPY_IDLE:u8 = 0;
pub const SPY_RUN:u8 = 1;
[/] Still use Enums, but only as a way to obtain the u8 indices, NOT as generic params!
- All members/arguments would be u8, never an enum type.
- That way "try_from" casts are unnecessary, and so are excessive generic enums in structs.
- implementing "Into<u8>" may be useful to allow functions to take an unknown type (i.e. our enums) as long as it converts to u8.
- Dropped. Too much friction/unnecessary complexity for little benefit.
[x] Using u8 numbers as group info for now.
[x] Palettes!
[x] Remove hard coded palette size (search for "TODO" items to find all)
[ ] Per asset (Sprite, Tilemap) palette? Maybe per Tile palette?