X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FServerState.cpp;h=13abdc9144d27cb4623e0a55dd5dfd0e9af0b08d;hb=ac41db13c9d64f5ef12b26c335d57504d02fd2fd;hp=c2163ad161976124f08b5bbcfc3cf1dba450d826;hpb=43820582217f7e4b707d98f2e69d969eb77fc7c3;p=blank.git diff --git a/src/app/ServerState.cpp b/src/app/ServerState.cpp index c2163ad..13abdc9 100644 --- a/src/app/ServerState.cpp +++ b/src/app/ServerState.cpp @@ -11,22 +11,25 @@ namespace blank { ServerState::ServerState( HeadlessEnvironment &env, + const Generator::Config &gc, const World::Config &wc, const WorldSave &ws, const Server::Config &sc ) : env(env) , block_types() -, world(block_types, wc, ws) +, world(block_types, wc) +, generator(gc) +, chunk_loader(world.Chunks(), generator, ws) , skeletons() -, spawner(world, skeletons, wc.gen.seed) +, spawner(world, skeletons, gc.seed) , server(sc, world) -, push_timer(16) { +, loop_timer(16) { TextureIndex tex_index; env.loader.LoadBlockTypes("default", block_types, tex_index); skeletons.LoadHeadless(); - push_timer.Start(); + loop_timer.Start(); std::cout << "listening on UDP port " << sc.port << std::endl; } @@ -40,14 +43,18 @@ void ServerState::Handle(const SDL_Event &event) { void ServerState::Update(int dt) { - push_timer.Update(dt); + loop_timer.Update(dt); server.Handle(); - spawner.Update(dt); - if (!world.Players().empty()) { - world.Update(dt); + int world_dt = 0; + while (loop_timer.HitOnce()) { + spawner.Update(loop_timer.Interval()); + world.Update(loop_timer.Interval()); + world_dt += loop_timer.Interval(); + loop_timer.PopIteration(); } - if (push_timer.Hit()) { - server.Update(dt); + chunk_loader.Update(dt); + if (world_dt > 0) { + server.Update(world_dt); } }