moved gameobject away from game_server.cpp

This commit is contained in:
Magnus Auvinen 2007-10-05 00:05:21 +00:00
parent f7b5cfc672
commit 449146a275
2 changed files with 163 additions and 163 deletions

View file

@ -257,169 +257,6 @@ void game_world::tick()
remove_entities(); remove_entities();
} }
//////////////////////////////////////////////////
// game object
//////////////////////////////////////////////////
gameobject::gameobject()
: entity(OBJTYPE_GAME)
{
// select gametype
if(strcmp(config.gametype, "ctf") == 0)
{
gametype = GAMETYPE_CTF;
dbg_msg("game", "-- Capture The Flag --");
}
else if(strcmp(config.gametype, "tdm") == 0)
{
gametype = GAMETYPE_TDM;
dbg_msg("game", "-- Team Death Match --");
}
else
{
gametype = GAMETYPE_DM;
dbg_msg("game", "-- Death Match --");
}
//
game_over_tick = -1;
sudden_death = 0;
round_start_tick = server_tick();
round_count = 0;
}
void gameobject::endround()
{
world->paused = true;
game_over_tick = server_tick();
sudden_death = 0;
}
void gameobject::resetgame()
{
world->reset_requested = true;
}
static bool is_separator(char c)
{
return c == ';' || c == ' ' || c == ',' || c == '\t';
}
void gameobject::startround()
{
resetgame();
round_start_tick = server_tick();
sudden_death = 0;
game_over_tick = -1;
world->paused = false;
teamscore[0] = 0;
teamscore[1] = 0;
round_count++;
}
void gameobject::cyclemap()
{
if(!strlen(config.sv_maprotation))
return;
// handle maprotation
char buf[512];
const char *s = strstr(config.sv_maprotation, config.sv_map);
if(s == 0)
s = config.sv_maprotation; // restart rotation
else
{
s += strlen(config.sv_map); // skip this map
while(is_separator(s[0]))
s++;
if(s[0] == 0)
s = config.sv_maprotation; // restart rotation
}
int i = 0;
for(; i < 512; i++)
{
buf[i] = s[i];
if(is_separator(s[i]) || s[i] == 0)
{
buf[i] = 0;
break;
}
}
i = 0; // skip spaces
while(is_separator(buf[i]))
i++;
dbg_msg("game", "rotating map to %s", &buf[i]);
strcpy(config.sv_map, &buf[i]);
}
void gameobject::post_reset()
{
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(players[i].client_id != -1)
players[i].respawn();
}
}
void gameobject::on_player_death(class player *victim, class player *killer, int weapon)
{
// do scoreing
if(!killer)
return;
if(killer == victim)
victim->score--; // klant arschel
else
killer->score++; // good shit
}
void gameobject::tick()
{
if(game_over_tick != -1)
{
// game over.. wait for restart
if(server_tick() > game_over_tick+server_tickspeed()*10)
{
cyclemap();
startround();
}
}
}
void gameobject::snap(int snapping_client)
{
obj_game *game = (obj_game *)snap_new_item(OBJTYPE_GAME, 0, sizeof(obj_game));
game->paused = world->paused;
game->game_over = game_over_tick==-1?0:1;
game->sudden_death = sudden_death;
game->score_limit = config.scorelimit;
game->time_limit = config.timelimit;
game->round_start_tick = round_start_tick;
game->gametype = gametype;
game->teamscore[0] = teamscore[0];
game->teamscore[1] = teamscore[1];
}
int gameobject::getteam(int notthisid)
{
int numplayers[2] = {0,0};
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(players[i].client_id != -1 && players[i].client_id != notthisid)
{
numplayers[players[i].team]++;
}
}
return numplayers[0] > numplayers[1] ? 1 : 0;
}
gameobject *gameobj = 0;
////////////////////////////////////////////////// //////////////////////////////////////////////////
// projectile // projectile
////////////////////////////////////////////////// //////////////////////////////////////////////////

View file

@ -0,0 +1,163 @@
#include <engine/config.h>
#include "srv_common.h"
#include <string.h>
gameobject::gameobject()
: entity(OBJTYPE_GAME)
{
// select gametype
if(strcmp(config.gametype, "ctf") == 0)
{
gametype = GAMETYPE_CTF;
dbg_msg("game", "-- Capture The Flag --");
}
else if(strcmp(config.gametype, "tdm") == 0)
{
gametype = GAMETYPE_TDM;
dbg_msg("game", "-- Team Death Match --");
}
else
{
gametype = GAMETYPE_DM;
dbg_msg("game", "-- Death Match --");
}
//
game_over_tick = -1;
sudden_death = 0;
round_start_tick = server_tick();
round_count = 0;
}
void gameobject::endround()
{
world->paused = true;
game_over_tick = server_tick();
sudden_death = 0;
}
void gameobject::resetgame()
{
world->reset_requested = true;
}
static bool is_separator(char c)
{
return c == ';' || c == ' ' || c == ',' || c == '\t';
}
void gameobject::startround()
{
resetgame();
round_start_tick = server_tick();
sudden_death = 0;
game_over_tick = -1;
world->paused = false;
teamscore[0] = 0;
teamscore[1] = 0;
round_count++;
}
void gameobject::cyclemap()
{
if(!strlen(config.sv_maprotation))
return;
// handle maprotation
char buf[512];
const char *s = strstr(config.sv_maprotation, config.sv_map);
if(s == 0)
s = config.sv_maprotation; // restart rotation
else
{
s += strlen(config.sv_map); // skip this map
while(is_separator(s[0]))
s++;
if(s[0] == 0)
s = config.sv_maprotation; // restart rotation
}
int i = 0;
for(; i < 512; i++)
{
buf[i] = s[i];
if(is_separator(s[i]) || s[i] == 0)
{
buf[i] = 0;
break;
}
}
i = 0; // skip spaces
while(is_separator(buf[i]))
i++;
dbg_msg("game", "rotating map to %s", &buf[i]);
strcpy(config.sv_map, &buf[i]);
}
void gameobject::post_reset()
{
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(players[i].client_id != -1)
players[i].respawn();
}
}
void gameobject::on_player_death(class player *victim, class player *killer, int weapon)
{
// do scoreing
if(!killer)
return;
if(killer == victim)
victim->score--; // klant arschel
else
killer->score++; // good shit
}
void gameobject::tick()
{
if(game_over_tick != -1)
{
// game over.. wait for restart
if(server_tick() > game_over_tick+server_tickspeed()*10)
{
cyclemap();
startround();
}
}
}
void gameobject::snap(int snapping_client)
{
obj_game *game = (obj_game *)snap_new_item(OBJTYPE_GAME, 0, sizeof(obj_game));
game->paused = world->paused;
game->game_over = game_over_tick==-1?0:1;
game->sudden_death = sudden_death;
game->score_limit = config.scorelimit;
game->time_limit = config.timelimit;
game->round_start_tick = round_start_tick;
game->gametype = gametype;
game->teamscore[0] = teamscore[0];
game->teamscore[1] = teamscore[1];
}
int gameobject::getteam(int notthisid)
{
int numplayers[2] = {0,0};
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(players[i].client_id != -1 && players[i].client_id != notthisid)
{
numplayers[players[i].team]++;
}
}
return numplayers[0] > numplayers[1] ? 1 : 0;
}
gameobject *gameobj = 0;