X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FServerState.cpp;h=13abdc9144d27cb4623e0a55dd5dfd0e9af0b08d;hb=ac41db13c9d64f5ef12b26c335d57504d02fd2fd;hp=88e817d81f1a70d61f5011cead6f7e741619e034;hpb=51a0b19601cb4b044c7eee1782aa85fc3a399d33;p=blank.git diff --git a/src/app/ServerState.cpp b/src/app/ServerState.cpp index 88e817d..13abdc9 100644 --- a/src/app/ServerState.cpp +++ b/src/app/ServerState.cpp @@ -11,19 +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, 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; } @@ -37,11 +43,18 @@ void ServerState::Handle(const SDL_Event &event) { void ServerState::Update(int dt) { - push_timer.Update(dt); - + loop_timer.Update(dt); server.Handle(); - if (push_timer.Hit()) { - server.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(); + } + chunk_loader.Update(dt); + if (world_dt > 0) { + server.Update(world_dt); } }