game_engine.h 2.5 KB

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