diff options
author | Stijn Buys <ingar@osirion.org> | 2008-05-07 18:56:00 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-05-07 18:56:00 +0000 |
commit | 421fc71813f08bfe359f9ac7596933a7e4cea6e0 (patch) | |
tree | 15b3630488281280d6634804b4a1a41fc402ab0a /src/core/gameinterface.cc | |
parent | 91d3a0352088611d3b78d3344b7a2bf2d4955a0a (diff) |
client-side frame interpolation: network updates, interpolation of position
Diffstat (limited to 'src/core/gameinterface.cc')
-rw-r--r-- | src/core/gameinterface.cc | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/src/core/gameinterface.cc b/src/core/gameinterface.cc index 8d351a0..d1bc1c3 100644 --- a/src/core/gameinterface.cc +++ b/src/core/gameinterface.cc @@ -95,48 +95,40 @@ void GameInterface::clear() game_previousframetime = 0; game_serverframetime = 0; game_clientframetime = 0; - game_timestep = 0; - game_frames = 0; } void GameInterface::reset_clientstate(float servertime) { - game_timestep = (servertime - game_serverframetime); - - if (game_timestep < 0) - game_timestep = 0; - game_previousframetime = game_serverframetime; - game_serverframetime = servertime; - game_clientframetime = game_previousframetime; + game_clientframetime = game_serverframetime; + game_serverframetime = servertime; + std::map<unsigned int, core::Entity *>::iterator it; for (it=core::Entity::registry.begin(); it != core::Entity::registry.end(); it++) { core::Entity *entity = (*it).second; - if (entity->state() && !(entity->flags() & Entity::Static)) + if (entity->state() && !(entity->flags() & core::Entity::Static)) entity->state()->assign(entity); } - - game_frames = 0; } -void GameInterface::update_clientstate() +void GameInterface::update_clientstate(float seconds) { - game_frames++; - game_clientframetime += game_timestep; + game_clientframetime += seconds; if (game_clientframetime > game_serverframetime) game_clientframetime = game_serverframetime; } float GameInterface::timeoffset() { + float d = game_serverframetime - game_previousframetime; - if (d < 0) - d = 1; - float t = game_serverframetime - game_clientframetime; + if (d <= 0) + return 0; + float t = game_clientframetime - game_previousframetime; return t/d; } |