diff options
author | Stijn Buys <ingar@osirion.org> | 2008-05-03 18:31:13 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-05-03 18:31:13 +0000 |
commit | 5388c37bdc040ba50d21ec16a01f399d20592a90 (patch) | |
tree | 9c43947b1b25d7d7e40e5c3cada5ff1f48cd8d61 /src/core/gameserver.cc | |
parent | 5d1e18b796d41e035d0d3e828cc6db54ed21a4b6 (diff) |
server frame time, rotation snap, flares
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 16 |
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; } |