more oo design
This commit is contained in:
parent
1d0dd12b2e
commit
b55b687cd9
@ -62,7 +62,7 @@ void setup_opengl() {
|
||||
glfwSwapInterval(0);
|
||||
}
|
||||
|
||||
void draw_team(team_t *team) {
|
||||
void draw_team(Team *team) {
|
||||
size_t i = 0;
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, team->color);
|
||||
glMatrixMode( GL_MODELVIEW);
|
||||
@ -372,7 +372,7 @@ void Client::initialize(Arguments &arg) {
|
||||
gluQuadricTexture(quadratic, GL_TRUE);
|
||||
|
||||
if (isMaster()) {
|
||||
team_t *team = game.getTeam(0);
|
||||
Team *team = game.getTeam(0);
|
||||
game.local_player = game.spawn_player(team);
|
||||
}
|
||||
|
||||
@ -448,8 +448,8 @@ void Client::update() {
|
||||
glEnable( GL_LIGHTING);
|
||||
glEnable( GL_CULL_FACE);
|
||||
glDisable( GL_TEXTURE_2D);
|
||||
for (size_t i = 0; i < GAME_TEAM_COUNT; i++)
|
||||
draw_team(&game.team[i]);
|
||||
for (size_t i = 0; i < game.teams.size(); i++)
|
||||
draw_team(&game.teams[i]);
|
||||
|
||||
for (size_t i = 0; i < GAME_PLAYER_COUNT; i++)
|
||||
draw_player(&game.player[i]);
|
||||
@ -476,12 +476,12 @@ void Client::update() {
|
||||
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < GAME_TEAM_COUNT; i++) {
|
||||
for (size_t i = 0; i < game.teams.size(); i++) {
|
||||
std::stringstream sstr;
|
||||
if (game.local_player && &game.team[i] == game.local_player->team) {
|
||||
sstr << "Team " << i << " (yours) : " << game.team[i].points;
|
||||
if (game.local_player && &game.teams[i] == game.local_player->team) {
|
||||
sstr << "Team " << i << " (yours) : " << game.teams[i].points;
|
||||
} else {
|
||||
sstr << "Team " << i << " (other) : " << game.team[i].points;
|
||||
sstr << "Team " << i << " (other) : " << game.teams[i].points;
|
||||
}
|
||||
oglf_print(&font, 10, 25 * fy++, sstr.str().c_str());
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ double rand2() {
|
||||
return 2.0 * (u - 0.5);
|
||||
}
|
||||
|
||||
void reset_team(team_t *team) {
|
||||
void reset_team(Team *team) {
|
||||
team->points = 0;
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ void reset_point(point_t *point) {
|
||||
point->z = 500.0 * rand2();
|
||||
}
|
||||
|
||||
void setup_team(team_t *team, uint8_t id) {
|
||||
void setup_team(Team *team, uint8_t id) {
|
||||
team->id = id;
|
||||
team->color[0] = .5f + .5f * (id & (1 << 0));
|
||||
team->color[1] = .5f + .5f * (id & (1 << 1));
|
||||
@ -79,8 +79,9 @@ void setup_bomb(bomb_t *bomb) {
|
||||
void Game::setup() {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < GAME_TEAM_COUNT; i++)
|
||||
setup_team(&team[i], i);
|
||||
teams.resize(2);
|
||||
for (i = 0; i < teams.size(); i++)
|
||||
setup_team(&teams[i], i);
|
||||
|
||||
for (i = 0; i < GAME_BOMB_COUNT; i++)
|
||||
setup_bomb(&bomb[i]);
|
||||
@ -101,8 +102,8 @@ void Game::setup() {
|
||||
void Game::reset() {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < GAME_TEAM_COUNT; i++)
|
||||
reset_team(&team[i]);
|
||||
for (i = 0; i < teams.size(); i++)
|
||||
reset_team(&teams[i]);
|
||||
|
||||
for (i = 0; i < GAME_BOMB_COUNT; i++)
|
||||
setup_bomb(&bomb[i]);
|
||||
@ -123,7 +124,7 @@ player_t *Game::getFreePlayer() {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
player_t *Game::spawn_player(team_t *team) {
|
||||
player_t *Game::spawn_player(Team *team) {
|
||||
player_t *player = getFreePlayer();
|
||||
player->team = team;
|
||||
player->status = 1;
|
||||
@ -132,7 +133,7 @@ player_t *Game::spawn_player(team_t *team) {
|
||||
return player;
|
||||
}
|
||||
|
||||
player_t *Game::spawn_player_id(team_t *team, uint16_t id) {
|
||||
player_t *Game::spawn_player_id(Team *team, uint16_t id) {
|
||||
player_t *player = getFreePlayer();
|
||||
player->team = team;
|
||||
player->id = id;
|
||||
@ -309,7 +310,7 @@ void Game::update(double dt) {
|
||||
}
|
||||
}
|
||||
|
||||
size_t Game::active_team_players(team_t *team) {
|
||||
size_t Game::active_team_players(Team *team) {
|
||||
size_t i, count = 0;
|
||||
for (i = 0; i < GAME_PLAYER_COUNT; i++) {
|
||||
if (player[i].status == 0)
|
||||
@ -320,24 +321,24 @@ size_t Game::active_team_players(team_t *team) {
|
||||
return count;
|
||||
}
|
||||
|
||||
team_t *Game::team_with_least_players() {
|
||||
Team *Game::team_with_least_players() {
|
||||
size_t i, count = -1;
|
||||
team_t *t = NULL;
|
||||
for (i = 0; i < GAME_TEAM_COUNT; i++) {
|
||||
size_t players = active_team_players(&team[i]);
|
||||
Team *team = NULL;
|
||||
for (i = 0; i < teams.size(); i++) {
|
||||
size_t players = active_team_players(&teams[i]);
|
||||
if (players < count) {
|
||||
count = players;
|
||||
t = &team[i];
|
||||
team = &teams[i];
|
||||
}
|
||||
}
|
||||
return t;
|
||||
return team;
|
||||
}
|
||||
|
||||
team_t *Game::getTeam(uint16_t id) {
|
||||
Team *Game::getTeam(uint16_t id) {
|
||||
size_t i;
|
||||
for (i = 0; i < GAME_TEAM_COUNT; i++) {
|
||||
if (team[i].id == id) {
|
||||
return &team[i];
|
||||
for (i = 0; i < teams.size(); i++) {
|
||||
if (teams[i].id == id) {
|
||||
return &teams[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
@ -3,11 +3,12 @@
|
||||
|
||||
#include "common.h"
|
||||
|
||||
typedef struct team_t team_t;
|
||||
#include <vector>
|
||||
|
||||
typedef struct Team Team;
|
||||
typedef struct player_t player_t;
|
||||
class Game;
|
||||
|
||||
#define GAME_TEAM_COUNT 2
|
||||
#define GAME_PLAYER_COUNT 64
|
||||
#define GAME_BOMB_COUNT (GAME_PLAYER_COUNT * 5)
|
||||
#define GAME_POINT_COUNT 50
|
||||
@ -18,7 +19,7 @@ struct player_t {
|
||||
double x, y, z;
|
||||
double rx, ry, rz, rw;
|
||||
double vx, vy, vz;
|
||||
team_t *team;
|
||||
Team *team;
|
||||
uint16_t points;
|
||||
};
|
||||
|
||||
@ -34,7 +35,8 @@ struct point_t {
|
||||
double x, y, z;
|
||||
};
|
||||
|
||||
struct team_t {
|
||||
class Team {
|
||||
public:
|
||||
uint16_t id;
|
||||
double x, y, z;
|
||||
float color[4];
|
||||
@ -44,7 +46,7 @@ struct team_t {
|
||||
|
||||
class Game {
|
||||
public:
|
||||
team_t team[GAME_TEAM_COUNT];
|
||||
std::vector<Team> teams;
|
||||
player_t player[GAME_PLAYER_COUNT];
|
||||
bomb_t bomb[GAME_BOMB_COUNT];
|
||||
point_t point[GAME_POINT_COUNT];
|
||||
@ -57,10 +59,10 @@ public:
|
||||
|
||||
void setup();
|
||||
void reset();
|
||||
team_t *team_with_least_players();
|
||||
player_t *spawn_player(team_t *team);
|
||||
player_t *spawn_player_id(team_t *team, uint16_t id);
|
||||
team_t *getTeam(uint16_t id);
|
||||
Team *team_with_least_players();
|
||||
player_t *spawn_player(Team *team);
|
||||
player_t *spawn_player_id(Team *team, uint16_t id);
|
||||
Team *getTeam(uint16_t id);
|
||||
player_t *getPlayer(uint16_t id);
|
||||
bomb_t *getBomb(uint16_t index);
|
||||
void update_players(double dt);
|
||||
@ -75,7 +77,7 @@ public:
|
||||
player_t *getFreePlayer();
|
||||
void explode_bomb(bomb_t *bomb);
|
||||
void update_point(point_t *point);
|
||||
size_t active_team_players(team_t *team);
|
||||
size_t active_team_players(Team *team);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -90,12 +90,12 @@ void Network::sendGameUpdates() {
|
||||
ENetPacket * packet = enet_packet_create(&msg, sizeof(msg), 0);
|
||||
enet_host_broadcast(host, 0, packet);
|
||||
}
|
||||
for (i = 0; i < GAME_TEAM_COUNT; i++) {
|
||||
for (i = 0; i < game->teams.size(); i++) {
|
||||
team_update_message_t msg;
|
||||
msg.msg_id = MESSAGE_TEAM_UPDATE;
|
||||
msg.team_id = game->team[i].id;
|
||||
msg.points = game->team[i].points;
|
||||
msg.wins = game->team[i].wins;
|
||||
msg.team_id = game->teams[i].id;
|
||||
msg.points = game->teams[i].points;
|
||||
msg.wins = game->teams[i].wins;
|
||||
ENetPacket * packet = enet_packet_create(&msg, sizeof(msg), 0);
|
||||
enet_host_broadcast(host, 0, packet);
|
||||
}
|
||||
@ -108,7 +108,7 @@ void Network::dispatch(enet_uint8 *data, size_t length) {
|
||||
switch (msg->msg_id) {
|
||||
case MESSAGE_PLAYER_SPAWN: {
|
||||
player_spawn_message_t *sm = (player_spawn_message_t *) data;
|
||||
team_t *team = game->getTeam(sm->team_id);
|
||||
Team *team = game->getTeam(sm->team_id);
|
||||
player_t *player = game->spawn_player_id(team, sm->player_id);
|
||||
break;
|
||||
}
|
||||
@ -195,7 +195,7 @@ void Network::dispatch(enet_uint8 *data, size_t length) {
|
||||
}
|
||||
case MESSAGE_TEAM_UPDATE: {
|
||||
team_update_message_t *m = (team_update_message_t *) data;
|
||||
team_t *team = game->getTeam(m->team_id);
|
||||
Team *team = game->getTeam(m->team_id);
|
||||
if (team == NULL)
|
||||
return;
|
||||
team->points = m->points;
|
||||
@ -249,7 +249,7 @@ void Network::service(uint32_t timeout) {
|
||||
enet_peer_send(event.peer, 0, packet);
|
||||
}
|
||||
|
||||
team_t *team = game->team_with_least_players();
|
||||
Team *team = game->team_with_least_players();
|
||||
player_t *player = game->spawn_player(team);
|
||||
event.peer->data = player;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user