Simulant 21.12 Released!

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!!

Core API Restructure

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
  • Stage management (e.g. new_stage()) is now handled by the Scene class template

This 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.

New UI Widgets!

New UI

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.

Better UI Theming

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.

Physics Updates

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!

Improved Font Loading

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.

Upgraded OpenAL for Dreamcast

ALdc, our Dreamcast OpenAL implementation, has been upgraded. This provides working, low-CPU positional audio when running on the Dreamcast platform!

Bug Fixes

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!