X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fserver%2FServerState.cpp;h=0bec3918c0345bc0e3e836157d3d148ba0ddcac2;hb=56069d41c1553d87a8759713ef391d3a908adc0e;hp=e16872ffe74c094030ace36c87a92a7c566cfcfa;hpb=9240fdf2e68ee014da0d0a89a7fb2f29ebf28e2d;p=blank.git diff --git a/src/server/ServerState.cpp b/src/server/ServerState.cpp index e16872f..0bec391 100644 --- a/src/server/ServerState.cpp +++ b/src/server/ServerState.cpp @@ -1,7 +1,7 @@ #include "ServerState.hpp" #include "../app/Environment.hpp" -#include "../app/TextureIndex.hpp" +#include "../io/WorldSave.hpp" #include "../net/io.hpp" #include @@ -18,21 +18,20 @@ ServerState::ServerState( const Config &config ) : env(env) -, block_types() -, world(block_types, wc) -, spawn_index(world.Chunks().MakeIndex(wc.spawn, 3)) +, res() +, world(res.block_types, wc) , generator(gc) , chunk_loader(world.Chunks(), generator, ws) -, skeletons() -, spawner(world, skeletons, env.rng) -, server(config.net, world, ws) +, spawner(world, res.models, env.rng) +, 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(); @@ -40,12 +39,18 @@ ServerState::ServerState( } ServerState::~ServerState() { - world.Chunks().UnregisterIndex(spawn_index); + } void ServerState::Handle(const SDL_Event &event) { if (event.type == SDL_QUIT) { + std::cout << "saving remaining chunks" << std::endl; + for (Chunk &chunk : world.Chunks()) { + if (chunk.ShouldUpdateSave()) { + chunk_loader.SaveFile().Write(chunk); + } + } env.state.PopAll(); } }