X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fserver%2FServerState.cpp;h=d3001c1d5ef0595fc2f33bc5f2695518273adfd3;hb=20d0a76d2519c71009c3b3babec0df27529f8142;hp=3e2869fc56b1da8afec9c2faccaf71c9eed97593;hpb=7e782291e0ce39eb2d4e8c1df28f682c313e6f8d;p=blank.git diff --git a/src/server/ServerState.cpp b/src/server/ServerState.cpp index 3e2869f..d3001c1 100644 --- a/src/server/ServerState.cpp +++ b/src/server/ServerState.cpp @@ -1,7 +1,6 @@ #include "ServerState.hpp" #include "../app/Environment.hpp" -#include "../app/TextureIndex.hpp" #include "../io/WorldSave.hpp" #include "../net/io.hpp" @@ -19,25 +18,20 @@ ServerState::ServerState( const Config &config ) : env(env) -, shapes() -, block_types() -, models() -, world(block_types, wc) +, res() +, world(res.block_types, wc) , generator(gc) , chunk_loader(world.Chunks(), generator, ws) -, spawner(world, models, env.rng) +, spawner(world, res.models) , server(config.net, world, wc, ws) , loop_timer(16) { - TextureIndex tex_index; - env.loader.LoadShapes("default", shapes); - env.loader.LoadBlockTypes("default", block_types, tex_index, shapes); - env.loader.LoadModels("default", models, tex_index, shapes); - if (models.size() < 2) { + res.Load(env.loader, "default"); + if (res.models.size() < 2) { throw std::runtime_error("need at least two models to run"); } - generator.LoadTypes(block_types); - spawner.LimitModels(1, models.size()); - server.SetPlayerModel(models[0]); + generator.LoadTypes(res.block_types); + spawner.LimitModels(1, res.models.size()); + server.SetPlayerModel(res.models[0]); loop_timer.Start(); @@ -64,6 +58,15 @@ void ServerState::Handle(const SDL_Event &event) { void ServerState::Update(int dt) { loop_timer.Update(dt); + if (!loop_timer.HitOnce() && loop_timer.IntervalRemain() > 1) { + server.Wait(loop_timer.IntervalRemain() - 1); + return; + } + if (dt == 0 && !server.Ready()) { + // effectively wait in a spin loop + return; + } + server.Handle(); int world_dt = 0; while (loop_timer.HitOnce()) { @@ -76,10 +79,13 @@ void ServerState::Update(int dt) { if (world_dt > 0) { server.Update(world_dt); } + if (world_dt > 32) { + std::cout << "world dt at " << world_dt << "ms!" << std::endl; + } } -void ServerState::Render(Viewport &viewport) { +void ServerState::Render(Viewport &) { }