From 421fc71813f08bfe359f9ac7596933a7e4cea6e0 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 7 May 2008 18:56:00 +0000 Subject: client-side frame interpolation: network updates, interpolation of position --- src/core/gameinterface.cc | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) (limited to 'src/core/gameinterface.cc') 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::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; } -- cgit v1.2.3