Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-05-03 18:31:13 +0000
committerStijn Buys <ingar@osirion.org>2008-05-03 18:31:13 +0000
commit5388c37bdc040ba50d21ec16a01f399d20592a90 (patch)
tree9c43947b1b25d7d7e40e5c3cada5ff1f48cd8d61 /src/core/gameserver.cc
parent5d1e18b796d41e035d0d3e828cc6db54ed21a4b6 (diff)
server frame time, rotation snap, flares
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r--src/core/gameserver.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc
index 2169e21..bedab1d 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_frametime = 0.0f;
server_maxplayerid = 1;
server_module = Module::preload();
@@ -255,19 +256,28 @@ void GameServer::frame(float seconds)
if (localplayer()->dirty())
localplayer()->update_info();
+ float f = 0;
+ server_frametime += seconds;
+ if (core::Cvar::sv_framerate->value()) {
+ f = 1.0f / core::Cvar::sv_framerate->value();
+ if (server_frametime < f) {
+ return;
+ }
+ }
+
// run a time frame on each entity
std::map<unsigned int, Entity *>::iterator it;
for (it=Entity::registry.begin(); it != Entity::registry.end(); it++) {
Entity *entity = (*it).second;
if ((entity->type() == Entity::Controlable) || (entity->type() == Entity::Dynamic)) {
- entity->frame(seconds);
+ entity->frame(server_frametime);
}
}
// run a frame on the module
if (server_module) {
- server_module->frame(seconds);
+ server_module->frame(server_frametime);
if (server_module->error()) {
abort();
return;
@@ -347,6 +357,8 @@ void GameServer::frame(float seconds)
entity->entity_dirty = false;
}
}
+
+ server_frametime -= f;
}