This is a big moment. I've finally gotten the game engine to the point that I can render some level geometry, for a suitably simple level map. The render code is largely temporary stuff still -- I'm going to eventually do a scene graph like a reasonable person inside the Render System, but I have to figure out how I need to handle sorting the scene graph to make sure that the level geometry is rendered underneath the entities that are on that level, and above the entites that are below that level. (There's a lot of other considerations, like selective transparency for walls so they don't obscure important entities and stuff, but those considerations can wait.) I'm currently putting the entire z-level of the stage map into one entity (and in fact, into a single renderable component on that entity). I don't like that approach; in part because the stage map will have to eventually have things like that selective transparency that I mentioned earlier. It's pretty likely that I'll end up moving to an approach where the stage map decomposes into special scene nodes that are unrelated to the the usual entity-component architecture, and I may end up storing the stage map with an abstract metadata form like I do in the editor. However, this does serve as a demonstration that the CES setup is working, and my message handling code is working as intended.
At first, I forgot to adjust for the fact that each tile is actually three-times the height of a grid square -- this allows the tile to have "vertical space" in it. Not a big deal for these floor tiles, so they just have a bunch of empty, transparent space there, but when I get some walls in, that area will be very important. The result looks sort of like a Q*bert level to me, as the tiles squash in away from each other:
After I finally figured out what was going on, I was able to get the game to actually display the level that I'd created in the editor. It's really exciting for me, though it's really not very exciting for anybody else.
The next step is to go back into the editor and start adding the ability to set up tile properties. That will enable me to do things like mark tiles as blocking movement -- it lets me make walls, basically. Once I've got a couple walls in a sample stage map, I'll bring it back over to the game side, implement a player character that can move around, and then make it respect the tile properties that block its movement. I'm also going to tweak a few things in the export stage to make importing the completed stage maps a little easier. Of course, I (finally) return to work on Monday, so it might be a bit before I get more work done on this.