I slacked off for quite a while and didn't do much devving for a long time. Today I did a ton of both reworking engine components to make room for editor features, and start adding some of those features.
For purposes of helping avoid cache misses, to keep the size of sim tiles down, a new kind of tile was added, the meta tile. The meta tile is where editor / generation data will go: things that aren't used in the normal game simulation, but are tied to tiles. The meta tile unordered map lives on the simulation controller, and mirrors the sim tile unordered map that lives on each of the world simulation objects (A and B). The first piece of editor / generation data added is the development level, which is used for the generation of basic rural or urban (if applicable) population types. Next is to add tags for urban areas, so that the user can specify prevalence of, say, manufacturing sector, and the generator process can look at the generated populations, slice off an appropriately sized segment (typically gated by what percentage of the tile has been designated as urban), and convert them to specialist populations. That will be a lot of work to code the logic for, of course. But it was important to make room for these systems somewhere without bloating the simulation tiles.
Additionally, tile colour processing has been somewhat improved, including the way tile colours are updated, which leads to painting in the editor causing less framerate drops (but a bit of a delay before a batch of tiles updates).
I would also like to add an "eyedropper" function for editing, so whatever mode the user is in, they can hold alt, click, and whatever relevant data that tile contains will be sampled and used as the active setting for that mode.
EDIT: eyedropper added. Though I'm only partway through adding it for all editor functions, it does work fine for the ones added so far. More cleanup and conversion to using the std:: optional<std::uint32_t> for ids system.
I am pleased to note that SDL2, when a window loses focus, treats that as a "key up" event for any pressed keys, so for modifier keys that were held when the window was tabbed out (for example, the "alt" key used to alt-tab), those modifiers are released even though physically held, and you don't end up with them being latched on despite not actually being pressed when you bring the window back in focus. There are some game engines which have that bug / undesirable behaviour (needing to have a key released while in focus to recognize that it was released), Unreal for example (happens a lot with Satisfactory).