game_engine.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <gui/canvas.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. typedef enum {
  8. GameKeyUp = 1 << 0,
  9. GameKeyDown = 1 << 1,
  10. GameKeyRight = 1 << 2,
  11. GameKeyLeft = 1 << 3,
  12. GameKeyOk = 1 << 4,
  13. GameKeyBack = 1 << 5,
  14. } GameKey;
  15. typedef struct {
  16. uint32_t held; // mask of GameKey held in current frame
  17. uint32_t pressed; // mask of GameKey pressed in current frame
  18. uint32_t released; // mask of GameKey released in current frame
  19. } InputState;
  20. typedef struct GameEngine GameEngine;
  21. typedef struct RunningGameEngine RunningGameEngine;
  22. typedef void (*GameEngineStartCallback)(GameEngine* engine, void* context);
  23. typedef void (*GameEngineStopCallback)(GameEngine* engine, void* context);
  24. typedef void (*GameEngineFrameCallback)(
  25. RunningGameEngine* engine,
  26. Canvas* canvas,
  27. InputState input,
  28. void* context);
  29. typedef struct {
  30. float fps; // target fps
  31. bool show_fps; // show fps counter
  32. bool always_backlight; // keep backlight on
  33. GameEngineStartCallback start_callback; // called when engine starts
  34. GameEngineFrameCallback frame_callback; // frame callback, called at target fps
  35. GameEngineStopCallback stop_callback; // called when engine stops
  36. void* context; // user context passed to callback
  37. } GameEngineSettings;
  38. /** Default settings initializer */
  39. GameEngineSettings game_engine_settings_init(void);
  40. /** Game Engine allocator
  41. * @param settings engine settings
  42. * @return GameEngine* GameEngine instance
  43. */
  44. GameEngine* game_engine_alloc(GameEngineSettings settings);
  45. /** Run the Game Engine. Blocks until game_engine_stop() is called.
  46. * @param engine GameEngine instance
  47. */
  48. void game_engine_run(GameEngine* engine);
  49. /** Free the Game Engine
  50. * @param engine GameEngine instance
  51. */
  52. void game_engine_free(GameEngine* engine);
  53. /** Stop the running Game Engine, will not block execution
  54. * @param engine RunningGameEngine instance
  55. */
  56. void running_game_engine_stop(RunningGameEngine* engine);
  57. /** Get delta time between current and previous frame
  58. * @param engine RunningGameEngine instance
  59. * @return float delta time in seconds
  60. */
  61. float running_game_engine_get_delta_time(RunningGameEngine* engine);
  62. /** Get delta frames between current and previous frame
  63. * @param engine RunningGameEngine instance
  64. * @return float delta frames
  65. */
  66. float running_game_engine_get_delta_frames(RunningGameEngine* engine);
  67. #ifdef __cplusplus
  68. }
  69. #endif