diff options
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index ae2b3a9..3c126fc 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -32,6 +32,7 @@ GameServer::GameServer() : GameInterface() con_print << "Initializing game server...\n"; server_instance = this; server_network = 0; + server_time = 0; server_frametime = 0.0f; server_maxplayerid = 1; @@ -243,6 +244,8 @@ void GameServer::frame(float seconds) if (error()) return; + server_time += seconds; + // process incoming network messages if (server_network) { server_network->receive(); @@ -256,6 +259,10 @@ void GameServer::frame(float seconds) if (localplayer()->dirty()) localplayer()->update_info(); + if (!Cvar::sv_dedicated->value()) { + update_clientstate(); + } + server_frametime += seconds; if ((Cvar::sv_dedicated->value() || Cvar::sv_private->value())) { @@ -266,7 +273,12 @@ void GameServer::frame(float seconds) } } } - + + // copy the previous entity state to the client state + if (!Cvar::sv_dedicated->value()) { + reset_clientstate(server_time); + } + // run a time frame on each entity std::map<unsigned int, Entity *>::iterator it; for (it=Entity::registry.begin(); it != Entity::registry.end(); it++) { @@ -292,6 +304,11 @@ void GameServer::frame(float seconds) server_network->transmit(); // TODO - start server frame + std::ostringstream framehdr; + framehdr.str(""); + framehdr << "frame " << server_time << "\n"; + server_network->broadcast(framehdr.str()); + std::map<unsigned int, Entity *>::iterator it; for (it=Entity::registry.begin(); it != Entity::registry.end(); it++) { Entity *entity = (*it).second; |