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;
}
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);
}
}