game_engine.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 void (*GameEngineStartCallback)(GameEngine* engine, void* context);
  22. typedef void (*GameEngineStopCallback)(GameEngine* engine, void* context);
  23. typedef void (
  24. *GameEngineFrameCallback)(GameEngine* engine, Canvas* canvas, InputState input, void* context);
  25. typedef struct {
  26. float target_fps; // target fps
  27. bool show_fps; // show fps counter
  28. bool always_backlight; // keep backlight on
  29. GameEngineStartCallback start_callback; // called when engine starts
  30. GameEngineFrameCallback frame_callback; // frame callback, called at target fps
  31. GameEngineStopCallback stop_callback; // called when engine stops
  32. void* context; // user context passed to callback
  33. } GameEngineSettings;
  34. /** Default settings initializer */
  35. GameEngineSettings game_engine_settings_init(void);
  36. /** Game Engine allocator
  37. * @param settings engine settings
  38. * @return GameEngine* GameEngine instance
  39. */
  40. GameEngine* game_engine_alloc(GameEngineSettings settings);
  41. /** Run the Game Engine. Blocks until game_engine_stop() is called.
  42. * @param engine GameEngine instance
  43. */
  44. void game_engine_run(GameEngine* engine);
  45. /** Free the Game Engine
  46. * @param engine GameEngine instance
  47. */
  48. void game_engine_free(GameEngine* engine);
  49. /** Stop the Game Engine, will not block execution
  50. * @param engine GameEngine instance
  51. */
  52. void game_engine_stop(GameEngine* engine);
  53. /** Get delta time between current and previous frame
  54. * @param engine GameEngine instance
  55. * @return float delta time in seconds
  56. */
  57. float game_engine_get_delta_time(GameEngine* engine);
  58. /** Get delta frames between current and previous frame
  59. * @param engine GameEngine instance
  60. * @return float delta frames
  61. */
  62. float game_engine_get_delta_frames(GameEngine* engine);
  63. /** Enable/disable show fps counter
  64. * @param engine GameEngine instance
  65. * @param show_fps show fps counter
  66. */
  67. void game_engine_show_fps_set(GameEngine* engine, bool show_fps);
  68. #ifdef __cplusplus
  69. }
  70. #endif