For an early Christmas present, I've just tagged version 20.12 of the Simulant game engine!
It's been a pretty quiet release cycle - there's been a lot going on in the world recently! However, there are still some really neat changes in this release!
Coroutines landed a while back, but the API for using them was clunky and unfamiliar. In 20.12 we've added familiarly-named functions to manage coroutines:
cr_async also now returns a
CRPromise<T> which has a convenient
then() method for triggering events once the coroutine has completed. This is great for scheduling game logic to run sequentially, and is a bit more elegant than using idle tasks.
MS3D support landed in 20.09, but it wasn't fully compatible with the Dreamcast port and caused unaligned read crashes if you tried to use it there. This has now been fixed and MS3D models can be used on the Dreamcast.
Firstly, scene management function names have been cleaned up. You can now
preload a scene, before activation or, you can
preload_in_background to do so in a coroutine. Utilizing the
.then() pattern can allow you to preload in the background, then activate a scene once done - which is great for loading screens.
On top of that
activate accept arbitrary variadic arguments which are accessible in your scene's load method. This allows you to have one scene class, but pass flags to it on activation to alter its state. For example, you could pass the filename to a level file, or enable an "arcade" mode etc.
There have also been an array of bug fixes, including numerous sound bugs (including fixing garbled stereo sound) and problems with frustum culling!