, chunk_receiver(world.Chunks(), save)
, chunk_renderer(player.GetChunks())
, loop_timer(16)
+, stat_timer(1000)
, sky(master.GetEnv().loader.LoadCubeMap("skybox"))
, update_status()
-, chat(master.GetEnv(), *this, *this) {
+, chat(master.GetEnv(), *this, *this)
+, time_skipped(0)
+, packets_skipped(0) {
if (!save.Exists()) {
save.Write(master.GetWorldConf());
}
chunk_renderer.LoadTextures(master.GetEnv().loader, res.tex_index);
chunk_renderer.FogDensity(master.GetWorldConf().fog_density);
loop_timer.Start();
+ stat_timer.Start();
if (save.Exists(player)) {
save.Read(player);
}
void InteractiveState::Update(int dt) {
loop_timer.Update(dt);
+ stat_timer.Update(dt);
master.Update(dt);
chunk_receiver.Update(dt);
hud.FocusNone();
}
if (world_dt > 0) {
- input.PushPlayerUpdate(world_dt);
+ if (input.UpdateImportant() || packets_skipped >= master.NetStat().SuggestedPacketSkip()) {
+ input.PushPlayerUpdate(time_skipped + world_dt);
+ time_skipped = 0;
+ packets_skipped = 0;
+ } else {
+ time_skipped += world_dt;
+ ++packets_skipped;
+ }
}
hud.Display(res.block_types[player.GetInventorySlot() + 1]);
+ if (stat_timer.Hit()) {
+ hud.UpdateNetStats(master.NetStat());
+ }
hud.Update(dt);
glm::mat4 trans = player.GetEntity().Transform(player.GetEntity().ChunkCoords());
}
void InteractiveState::Render(Viewport &viewport) {
- viewport.WorldPosition(
- player.GetEntity().Transform(player.GetEntity().ChunkCoords())
- * player.GetEntity().GetModel().EyesTransform());
+ viewport.WorldPosition(player.GetEntity().ViewTransform(player.GetEntity().ChunkCoords()));
if (master.GetConfig().video.world) {
chunk_renderer.Render(viewport);
world.Render(viewport);