Happy New Year!
Another quarter has gone, and that means it's time for another tagged release of SImulant! A lot has happened over the last 3 months, mainly driven by the development of the Driving Strikers Holiday Edition Dreamcast game demo that has been developed by the main Simulant contributors.
So onto what's new in this release!!
The way the core of Simulant has been structured until now has been quite messy due to the way the engine unexpectedly developed over time. Specifically, objects and properties that would logically be at the Application
level, belonged to the Window
- the Window
class had multiple unrelated responsibilities and it was a big code smell.
In 21.12 this has all changed!
time_keeper
, shared_assets
, vfs
, idle
, sound_driver
, stats
, and frame started/finished signals are now found under the Application
new_stage()
) is now handled by the Scene
class templateThis is a much cleaner structure and the Window
class is now only responsible for things like event handling and functionality related to the window itself.
Alongside a huge cleanup with how widgets are rendered and sized, we've introduced two MVP widgets that make the UI system much more powerful:
Frame
- this widget is a container widget that you can pack child widgets into, either in a left-to-right, or top-to-bottom orientation. Keyboard
- this widget is an onscreen keyboard that you can create to gather input from a player when a physical keyboard isn't available.Both widgets are a first-pass iteration, and have some rough edges that will be ironed out before the next release.
We've introduced a new default UI theme in this release. The bold blue has been toned down and widgets by default have a dark theme. We've also cleaned up the UI theming so that you can create a new look just by providing new background, foreground, text, and highlight colours.
We've updated our copy of Bounce to the latest upstream version, and there have been a number of performance improvements in our wrapper code. Also we've introduced new functions to RigidBody
as well as a new KinematicBody
class!
TTF fonts are now used by default over .FNT fonts. You can specify a default font and size in the AppConfig
for your application and Simulant will use that for UI widgets, and panels. You can now override fonts easily per-widget by calling Widget::set_font()
and this will use an internal font cache to make sure that fonts are only loaded when necessary.
ALdc, our Dreamcast OpenAL implementation, has been upgraded. This provides working, low-CPU positional audio when running on the Dreamcast platform!
There have been a vast number of big fixes and improvements over the last 3 months - too many to list! The focus on the next quarter will be to continue to improve the widget framework and we'll start tentatively looking towards adding networking support to the engine!