From 03d94f3762ab576ba0675abcaefde888a9da2c3d Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Fri, 27 Jun 2025 10:13:51 -0700 Subject: Initial commit --- src/plugins/plugin.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/plugins/plugin.h (limited to 'src/plugins/plugin.h') diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h new file mode 100644 index 0000000..f7219c6 --- /dev/null +++ b/src/plugins/plugin.h @@ -0,0 +1,52 @@ +/* + * Game plugin. + */ +#pragma once + +#include "../game.h" + +#include +#include + +#include + +typedef struct State State; + +/// Initialize the plugin, which may optionally return a state object. +/// +/// This function is called every time the plugin is (re)loaded. +/// +/// It is assumed that the plugin's state is fully encapsulated in the returned +/// state object. The plugin should not store any (mutable) state outside of the +/// returned state object (e.g., no mutable global variables.) +bool init(Game*, State**); + +/// Shut down the plugin. +/// +/// This function is called before the plugin is unloaded. +/// +/// The plugin should perform any destruction needed, but not free the state +/// object; freeing the state object's memory is handled by the caller. +void shutdown(Game*, State*); + +/// Function called the first time the plugin is loaded throughout the +/// application's lifetime. This allows the plugin to do one-time initialization +/// of the game state. +bool boot(Game*, State*); + +/// Update the plugin's and the game's state. +void update(Game*, State*, double t, double dt); + +/// Render hook. +void render(const Game*, const State*); + +/// Called when the game's window is resized. +void resize(Game*, State*, int width, int height); + +// Signatures for the plugin's exposed functions. +typedef bool (*plugin_init)(Game*, State**); +typedef bool (*plugin_shutdown)(Game*, State*); +typedef bool (*plugin_boot)(Game*, State*); +typedef void (*plugin_update)(Game*, State*, double t, double dt); +typedef void (*plugin_render)(const Game*, const State*); +typedef void (*plugin_resize)(Game* game, State* state, int width, int height); -- cgit v1.2.3