X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fserver%2FServerState.cpp;h=fc0da820e4513aeef509a032454c03497e571faa;hb=9da6ac5e93d79e79658a95d5f6efe42146873583;hp=8c3f7e6196f92c5272cda3b61aa9128b825891c9;hpb=75ebb9101c7aec9c16ef418b822c39e81889f66f;p=blank.git diff --git a/src/server/ServerState.cpp b/src/server/ServerState.cpp index 8c3f7e6..fc0da82 100644 --- a/src/server/ServerState.cpp +++ b/src/server/ServerState.cpp @@ -2,6 +2,7 @@ #include "../app/Environment.hpp" #include "../app/TextureIndex.hpp" +#include "../io/WorldSave.hpp" #include "../net/io.hpp" #include @@ -20,18 +21,17 @@ ServerState::ServerState( : env(env) , block_types() , world(block_types, wc) -, spawn_index(world.Chunks().MakeIndex(wc.spawn, 3)) -, generator(gc, block_types) +, generator(gc) , chunk_loader(world.Chunks(), generator, ws) , skeletons() -, spawner(world, skeletons, gc.seed) -, server(config.net, world, ws) +, spawner(world, skeletons, env.rng) +, server(config.net, world, wc, ws) , loop_timer(16) { TextureIndex tex_index; env.loader.LoadBlockTypes("default", block_types, tex_index); - generator.Scan(); + generator.LoadTypes(block_types); skeletons.LoadHeadless(); - spawner.LimitSkeletons(1, skeletons.Size()); + spawner.LimitSkeletons(1, skeletons.size()); server.SetPlayerModel(skeletons[0]); loop_timer.Start(); @@ -40,12 +40,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(); } }