On the code side of things, I've been busy busy. I was sucked up into curling fever during the tourney of hearts, the brier, and the worlds, and have resigned myself to making a curling game to push myself along this journey. It's coming along, but without a laptop at arms reach and 4 spare hours a day, progress is comparable to the flow of molasses in February.
I've got the sheet and rocks modeled, and with a few tweaks they will be good to go. My current focus now is pairing down the code from the demo, moving what I can into the engine proper. Since I've never really talked about how it is all structured I'll lay down a brief synopsis:
The engine core is divided amongst several libs so that parts maybe interchanged, or used in other projects without a large string of dependencies.
- Capacitance: One of the most stable projects I have right now is my Math library, consisting of vectors, matrices, and some computational geometry functions. All of it is based off of a Real number class, which allows a float, or a double version of the lib to be built. I remember EvilSteve telling me that this was a terrible idea, though I've never really had an issue with it yet. At some point I'd like to use templates for this but am still a bit shy of templated code.
- Luminance: I've spent more time playing with lighting and shading then I care to admit, and I've ended up with an OK graphics library out of it. It's lacking in MANY areas, such as animation, but has so far allowed me to put stuff to screen as I like so I'm ok with it.
- Resonance: My first attempt at any audio resulted in a likely naive attempt at recreating the equipment that I'd use in my studio. A mixer class, which handles a pool of tracks, buses, and mastering, can be setup for 5.1/stereo/mono. Currently no effects, or 3d audio but it's will be easy to add IMO. Along with the mixer a sampler class, which allows .wavs to be loaded and stored in banks. In reality I think I've recreated a shitty version of Xact from XAudio2, but I was another great learning opportunity.
- Naturance: This has got the most benefit so far from the curling tangent I'm on. Classes for point masses, rigid bodies, soft bodies, and fluids for 2 and 3d, as well as euler, verlet, rk2 and rk4 integrators. I've only implemented the rigid3 class and a simple euler so far, but the architecture is clean and it will be easy to add the rest as it's needed. Though easy is perhaps not a good adjective.These are used by the Origin engine which acts as the nerve center of the system. It currently has a very immediate mode feel to it, which means every demo i've produced has a ton of code repeated through it to handle communication from the project to the engine and subsystems. My current focus is to move to an entity system, hopefully allowing the sub systems to do a little more of their own work and free up some white space in the demo projects.
So I'm still kicking, any comments are appreciated, especially ideas on who actually owns position/transform data, or the physics of curl on a curling stone.