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-06-08 16:02:52 +0000
committerStijn Buys <ingar@osirion.org>2008-06-08 16:02:52 +0000
commit513bfb8d9cf3c246dd15cf67b8a5ff9c7a6f9afe (patch)
treed3df60466c9ba4d577cd833223ba9147cfd268d4 /src/core/gameinterface.cc
parent6582edea98876b8f5797429e76f8fc253f83747a (diff)
enable client prediction
Diffstat (limited to 'src/core/gameinterface.cc')
-rw-r--r--src/core/gameinterface.cc33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/core/gameinterface.cc b/src/core/gameinterface.cc
index f50c1cc..cfa557b 100644
--- a/src/core/gameinterface.cc
+++ b/src/core/gameinterface.cc
@@ -128,17 +128,23 @@ void GameInterface::update_entity_clientstate(Entity *entity)
entity->entity_clientstate->assign(entity);
}
- if (!(entity->flags() & core::Entity::Static))
+ if(Cvar::cl_prediction->value() == 0) {
+
+ entity->state()->state_axis.assign(entity->axis());
+ entity->state()->state_location.assign(entity->location());
return;
+ }
+
+ if (!(entity->flags() & core::Entity::Static)) {
- if (game_clientframetime < game_serverframetime) {
+ // clientstate location
+ entity->state()->state_location = entity->state()->previouslocation() +
+ (entity->location() - entity->state()->previouslocation()) * timeoffset();
+
+ if (game_clientframetime < game_serverframetime) {
- if (!(entity->flags() & core::Entity::Static)) {
-
- // clientstate location
- entity->state()->state_location = entity->state()->previouslocation() +
- (entity->location() - entity->state()->previouslocation()) * timeoffset();
-
+ //FIXME this is hopelessly broken
+
// http://local.wasp.uwa.edu.au/~pbourke/geometry/planeline/
float cosangle;
float angle;
@@ -164,7 +170,7 @@ void GameInterface::update_entity_clientstate(Entity *entity)
l = p.length();
if ((fabs(side) - MIN_DELTA > 0)) {
- cosangle = math::dotproduct(p, entity->state()->axis().up());
+ cosangle = math::dotproduct(p, entity->state()->axis().up());
if (fabs(cosangle) + MIN_DELTA < 1 ) {
angle = acos(cosangle) * 180.0f / M_PI;
angle = math::sgnf(side) * angle * timeoffset();
@@ -216,15 +222,20 @@ void GameInterface::update_entity_clientstate(Entity *entity)
}
}
+ } else {
+ entity->state()->state_axis.assign(entity->axis());
}
} else {
+
entity->state()->assign(entity);
}
}
void GameInterface::update_clientstate(float seconds)
{
+ game_clientframetime += seconds;
+
std::map<unsigned int, core::Entity *>::iterator it;
for (it=core::Entity::registry.begin(); it != core::Entity::registry.end(); it++) {
update_entity_clientstate((*it).second);
@@ -233,8 +244,8 @@ void GameInterface::update_clientstate(float seconds)
float GameInterface::timeoffset() {
- if (game_clientframetime > game_serverframetime)
- return 1;
+ //if (game_clientframetime > game_serverframetime)
+ // return 1;
float d = game_serverframetime - game_previousframetime;
if (d <= 0)