#ifndef GREMLIN_GAME_H #define GREMLIN_GAME_H #include "common.h" typedef struct team_t team_t; typedef struct player_t player_t; typedef struct game_t game_t; #define GAME_TEAM_COUNT 2 #define GAME_PLAYER_COUNT 64 #define GAME_BOMB_COUNT (GAME_PLAYER_COUNT * 4) struct player_t { uint16_t id; uint16_t status; double x, y, z; double rx, ry, rz, rw; double vx, vy, vz; team_t *team; }; struct bomb_t { uint8_t status; double x, y, z; double vx, vy, vz; double ttl; }; struct team_t { uint16_t id; double x, y, z; float color[4]; }; struct game_t { team_t team[GAME_TEAM_COUNT]; player_t player[GAME_PLAYER_COUNT]; bomb_t bomb[GAME_BOMB_COUNT]; int16_t max_player_id; }; extern void game_setup(game_t *game); extern team_t *game_team_with_least_players(game_t *game); extern player_t *game_spawn_player(game_t *game, team_t *team); extern player_t *game_spawn_player_id(game_t *game, team_t *team, uint16_t id); extern team_t *game_team(game_t *game, uint16_t id); extern player_t *game_player(game_t *game, uint16_t id); extern bomb_t *game_bomb(game_t *game, uint16_t index); extern void game_update_players(game_t *game, double dt); extern bomb_t *game_spawn_bomb(game_t *game); extern void game_update_bombs(game_t *game, double dt, void(*explosion_callback)(double x, double y, double z)); #endif