From b55b687cd91cf4494a32cff4c3820fe2d579f260 Mon Sep 17 00:00:00 2001 From: gmueller Date: Tue, 18 Jan 2011 22:50:24 +0100 Subject: [PATCH] more oo design --- src/client/Client.cpp | 16 ++++++++-------- src/common/Game.cpp | 39 ++++++++++++++++++++------------------- src/common/Game.h | 22 ++++++++++++---------- src/common/Network.cpp | 14 +++++++------- 4 files changed, 47 insertions(+), 44 deletions(-) diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 7ed7395..11adee0 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -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()); } diff --git a/src/common/Game.cpp b/src/common/Game.cpp index cf95293..1ae6892 100644 --- a/src/common/Game.cpp +++ b/src/common/Game.cpp @@ -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; diff --git a/src/common/Game.h b/src/common/Game.h index d0f1d4c..6bb67bb 100644 --- a/src/common/Game.h +++ b/src/common/Game.h @@ -3,11 +3,12 @@ #include "common.h" -typedef struct team_t team_t; +#include + +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 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 diff --git a/src/common/Network.cpp b/src/common/Network.cpp index 1b25053..43f54d5 100644 --- a/src/common/Network.cpp +++ b/src/common/Network.cpp @@ -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;