game_engine.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 (*GameEngineCallback)(
  23. RunningGameEngine* engine,
  24. Canvas* canvas,
  25. InputState input,
  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* GameEngine instance
  38. */
  39. GameEngine* game_engine_alloc(GameEngineSettings settings);
  40. /** Run the Game Engine. Blocks until game_engine_stop() is called.
  41. * @param engine GameEngine instance
  42. */
  43. void game_engine_run(GameEngine* engine);
  44. /** Free the Game Engine
  45. * @param engine GameEngine instance
  46. */
  47. void game_engine_free(GameEngine* engine);
  48. /** Stop the running Game Engine. Will not block execution.
  49. * @param engine RunningGameEngine instance
  50. */
  51. void running_game_engine_stop(RunningGameEngine* engine);
  52. float running_game_engine_get_delta_time(RunningGameEngine* engine);
  53. float running_game_engine_get_delta_frames(RunningGameEngine* engine);
  54. #ifdef __cplusplus
  55. }
  56. #endif