| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #ifndef GAME_H_
- #define GAME_H_
- #include <stdint.h>
- #include "cglm/types.h"
- #include "scufeng/engine.h"
- #define XGameStateEvent(X) \
- X(GSEVENT_NONE) \
- X(GSEVENT_L_SCORE) \
- X(GSEVENT_R_SCORE) \
- X(GSEVENT_BALL_DIR_CHANGE) \
- X(GSEVENT_L_WIN) \
- X(GSEVENT_R_WIN)
- #define X(evt) evt,
- typedef enum {
- XGameStateEvent(X)
- } GameStateEvent;
- #undef X
- typedef struct {
- vec2 pos;
- float w;
- float h;
- vec2 dirv;
- float speed;
- } MovingObject;
- typedef struct {
- float paddles_w;
- float paddles_h;
- float paddle_l_x;
- float paddle_speed;
- float ball_w;
- vec2 ball_pos;
- float ball_speed;
- } GameStateParameters;
- typedef struct {
- bool ai_enabled;
- MovingObject paddle_l;
- MovingObject paddle_r;
- MovingObject ball;
- vec2 ball_start_pos;
- vec2 ball_start_dir;
- uint8_t score_l;
- uint8_t score_r;
- } GameState;
- const char *GameStateEvent_to_str(const GameStateEvent evt);
- GameState GameState_new(
- const GameStateParameters params,
- const bool ai_enabled
- );
- void GameState_paddle_l_change_dir(GameState *const state, const SEDirection dir);
- void GameState_paddle_r_change_dir(GameState *const state, const SEDirection dir);
- GameStateEvent GameState_update(GameState *const state, const double delta);
- SEDirection GameState_paddle_l_dir_get(const GameState *const state);
- extern const GameStateParameters game_default_params;
- #endif // GAME_H_
|