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-07 18:56:00 +0000
committerStijn Buys <ingar@osirion.org>2008-05-07 18:56:00 +0000
commit421fc71813f08bfe359f9ac7596933a7e4cea6e0 (patch)
tree15b3630488281280d6634804b4a1a41fc402ab0a /src/core/gameinterface.cc
parent91d3a0352088611d3b78d3344b7a2bf2d4955a0a (diff)
client-side frame interpolation: network updates, interpolation of position
Diffstat (limited to 'src/core/gameinterface.cc')
-rw-r--r--src/core/gameinterface.cc28
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;
}