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" 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?