]> git.localhorst.tv Git - blank.git/blobdiff - src/server/ServerState.cpp
make gcc nag more
[blank.git] / src / server / ServerState.cpp
index fc0da820e4513aeef509a032454c03497e571faa..d3001c1d5ef0595fc2f33bc5f2695518273adfd3 100644 (file)
@@ -1,7 +1,6 @@
 #include "ServerState.hpp"
 
 #include "../app/Environment.hpp"
-#include "../app/TextureIndex.hpp"
 #include "../io/WorldSave.hpp"
 #include "../net/io.hpp"
 
@@ -19,20 +18,20 @@ ServerState::ServerState(
        const Config &config
 )
 : env(env)
-, block_types()
-, world(block_types, wc)
+, res()
+, world(res.block_types, wc)
 , generator(gc)
 , chunk_loader(world.Chunks(), generator, ws)
-, skeletons()
-, spawner(world, skeletons, env.rng)
+, spawner(world, res.models)
 , server(config.net, world, wc, ws)
 , loop_timer(16) {
-       TextureIndex tex_index;
-       env.loader.LoadBlockTypes("default", block_types, tex_index);
-       generator.LoadTypes(block_types);
-       skeletons.LoadHeadless();
-       spawner.LimitSkeletons(1, skeletons.size());
-       server.SetPlayerModel(skeletons[0]);
+       res.Load(env.loader, "default");
+       if (res.models.size() < 2) {
+               throw std::runtime_error("need at least two models to run");
+       }
+       generator.LoadTypes(res.block_types);
+       spawner.LimitModels(1, res.models.size());
+       server.SetPlayerModel(res.models[0]);
 
        loop_timer.Start();
 
@@ -59,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()) {
@@ -71,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 &) {
 
 }