118 lines
3.0 KiB
C
118 lines
3.0 KiB
C
/**
|
|
* @file addons/app.h
|
|
* @brief App addon.
|
|
*
|
|
* The app addon is a wrapper around the application's main loop. Its main
|
|
* purpose is to provide a hook to modules that need to take control of the
|
|
* main loop, as is for example the case with native applications that use
|
|
* emscripten with webGL.
|
|
*/
|
|
|
|
#ifdef FLECS_APP
|
|
|
|
#ifndef FLECS_PIPELINE
|
|
#define FLECS_PIPELINE
|
|
#endif
|
|
|
|
#ifndef FLECS_APP_H
|
|
#define FLECS_APP_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @defgroup c_addons_app App
|
|
* @brief Optional addon for running the main application loop.
|
|
*
|
|
* \ingroup c_addons
|
|
* @{
|
|
*/
|
|
|
|
/** Callback type for init action. */
|
|
typedef int(*ecs_app_init_action_t)(
|
|
ecs_world_t *world);
|
|
|
|
/** Used with ecs_app_run. */
|
|
typedef struct ecs_app_desc_t {
|
|
ecs_ftime_t target_fps; /**< Target FPS. */
|
|
ecs_ftime_t delta_time; /**< Frame time increment (0 for measured values) */
|
|
int32_t threads; /**< Number of threads. */
|
|
int32_t frames; /**< Number of frames to run (0 for infinite) */
|
|
bool enable_rest; /**< Enables ECS access over HTTP, necessary for explorer */
|
|
bool enable_monitor; /**< Periodically collect statistics */
|
|
uint16_t port; /**< HTTP port used by REST API */
|
|
|
|
ecs_app_init_action_t init; /**< If set, function is ran before starting the
|
|
* main loop. */
|
|
|
|
void *ctx; /**< Reserved for custom run/frame actions */
|
|
} ecs_app_desc_t;
|
|
|
|
/** Callback type for run action. */
|
|
typedef int(*ecs_app_run_action_t)(
|
|
ecs_world_t *world,
|
|
ecs_app_desc_t *desc);
|
|
|
|
/** Callback type for frame action. */
|
|
typedef int(*ecs_app_frame_action_t)(
|
|
ecs_world_t *world,
|
|
const ecs_app_desc_t *desc);
|
|
|
|
/** Run application.
|
|
* This will run the application with the parameters specified in desc. After
|
|
* the application quits (ecs_quit is called) the world will be cleaned up.
|
|
*
|
|
* If a custom run action is set, it will be invoked by this operation. The
|
|
* default run action calls the frame action in a loop until it returns a
|
|
* non-zero value.
|
|
*
|
|
* @param world The world.
|
|
* @param desc Application parameters.
|
|
*/
|
|
FLECS_API
|
|
int ecs_app_run(
|
|
ecs_world_t *world,
|
|
ecs_app_desc_t *desc);
|
|
|
|
/** Default frame callback.
|
|
* This operation will run a single frame. By default this operation will invoke
|
|
* ecs_progress directly, unless a custom frame action is set.
|
|
*
|
|
* @param world The world.
|
|
* @param desc The desc struct passed to ecs_app_run.
|
|
* @return value returned by ecs_progress
|
|
*/
|
|
FLECS_API
|
|
int ecs_app_run_frame(
|
|
ecs_world_t *world,
|
|
const ecs_app_desc_t *desc);
|
|
|
|
/** Set custom run action.
|
|
* See ecs_app_run.
|
|
*
|
|
* @param callback The run action.
|
|
*/
|
|
FLECS_API
|
|
int ecs_app_set_run_action(
|
|
ecs_app_run_action_t callback);
|
|
|
|
/** Set custom frame action.
|
|
* See ecs_app_run_frame.
|
|
*
|
|
* @param callback The frame action.
|
|
*/
|
|
FLECS_API
|
|
int ecs_app_set_frame_action(
|
|
ecs_app_frame_action_t callback);
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif // FLECS_APP
|