Posted May 27, 2021 by kranzky
Finally implemented a basic UI with persistent game options. This took longer than expected as I went down a rabbit-hole of starting to wire up Nuklear before realising that I could simply create a new Selectable
component to complement the existing Text
component.
typedef struct Selectable
{
bool focused;
bool toggle;
bool value;
Rectangle region;
void (*callback)(GameOptions *options, bool value);
} Selectable;
The system that renders the Text
component updates the region
of the Selectable
component (if it exists), and this is used to detect whether the cursor is hovering over the text. A new UI
system simply iterates over Selectable
components to decide which is active, and the relevant callback
is triggered when a selection is made.
I also created a simple Options
component, which is a singleton (similar to Input
), and which is passed to relevant systems (for example, updating the player requires Options
to determine whether the y-axis should be inverted or not). This component is serialised to allow it to persist between game sessions.
Altogether not much fun, but it is functional, and didn’t take too much time (thanks to Flecs). Now on to polishing the controls and fixing a few niggly bugs before moving on to greater things!