From 91d3a0352088611d3b78d3344b7a2bf2d4955a0a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Tue, 6 May 2008 21:07:11 +0000 Subject: client-side frame interpolation: frames and timers --- src/core/gameserver.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/core/gameserver.cc') 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::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::iterator it; for (it=Entity::registry.begin(); it != Entity::registry.end(); it++) { Entity *entity = (*it).second; -- cgit v1.2.3