game_engine.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 (*GameEngineCallback)(
  22. GameEngine* engine,
  23. Canvas* canvas,
  24. InputState input,
  25. float delta_time,
  26. void* context);
  27. typedef struct {
  28. float fps; // target fps
  29. bool show_fps; // show fps counter
  30. GameEngineCallback callback; // game logic and rendering callback, called at target fps
  31. void* context; // user context passed to callback
  32. } GameEngineSettings;
  33. /** Default settings initializer */
  34. GameEngineSettings game_engine_settings_init(void);
  35. /** Game Engine allocator
  36. * @param settings engine settings
  37. * @return GameEngine* engine instance
  38. */
  39. GameEngine* game_engine_alloc(GameEngineSettings settings);
  40. /** Run the Game Engine. Blocks until game_engine_stop() is called.
  41. * @param engine engine instance
  42. */
  43. void game_engine_run(GameEngine* engine);
  44. /** Stop the Game Engine. Will not block execution.
  45. * @param engine engine instance
  46. */
  47. void game_engine_stop(GameEngine* engine);
  48. /** Free the Game Engine
  49. * @param engine engine instance
  50. */
  51. void game_engine_free(GameEngine* engine);
  52. #ifdef __cplusplus
  53. }
  54. #endif