Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r--src/core/gameserver.cc19
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;