game.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #ifndef GAME_H_
  2. #define GAME_H_
  3. #include <stdint.h>
  4. #include "cglm/types.h"
  5. #include "scufeng/engine.h"
  6. #define XGameStateEvent(X) \
  7. X(GSEVENT_NONE) \
  8. X(GSEVENT_L_SCORE) \
  9. X(GSEVENT_R_SCORE) \
  10. X(GSEVENT_BALL_DIR_CHANGE) \
  11. X(GSEVENT_L_WIN) \
  12. X(GSEVENT_R_WIN)
  13. #define X(evt) evt,
  14. typedef enum {
  15. XGameStateEvent(X)
  16. } GameStateEvent;
  17. #undef X
  18. typedef struct {
  19. vec2 pos;
  20. float w;
  21. float h;
  22. vec2 dirv;
  23. float speed;
  24. } MovingObject;
  25. typedef struct {
  26. float paddles_w;
  27. float paddles_h;
  28. float paddle_l_x;
  29. float paddle_speed;
  30. float ball_w;
  31. vec2 ball_pos;
  32. float ball_speed;
  33. } GameStateParameters;
  34. typedef struct {
  35. bool ai_enabled;
  36. MovingObject paddle_l;
  37. MovingObject paddle_r;
  38. MovingObject ball;
  39. vec2 ball_start_pos;
  40. vec2 ball_start_dir;
  41. uint8_t score_l;
  42. uint8_t score_r;
  43. } GameState;
  44. const char *GameStateEvent_to_str(const GameStateEvent evt);
  45. GameState GameState_new(
  46. const GameStateParameters params,
  47. const bool ai_enabled
  48. );
  49. void GameState_paddle_l_change_dir(GameState *const state, const SEDirection dir);
  50. void GameState_paddle_r_change_dir(GameState *const state, const SEDirection dir);
  51. GameStateEvent GameState_update(GameState *const state, const double delta);
  52. SEDirection GameState_paddle_l_dir_get(const GameState *const state);
  53. extern const GameStateParameters game_default_params;
  54. #endif // GAME_H_