X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fserver%2FServerState.cpp;h=3e2869fc56b1da8afec9c2faccaf71c9eed97593;hb=4e3afb4c7631591b80cb7740a9b6f46da69b7ae4;hp=5545818e23f16b5536f60492867e9742408c2b72;hpb=8ae45b6555d55f301f83daf8c1337d332d8305ab;p=blank.git diff --git a/src/server/ServerState.cpp b/src/server/ServerState.cpp index 5545818..3e2869f 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 @@ -15,29 +16,47 @@ ServerState::ServerState( const Generator::Config &gc, const World::Config &wc, const WorldSave &ws, - const Server::Config &sc + const Config &config ) : env(env) +, shapes() , block_types() +, models() , world(block_types, wc) , generator(gc) , chunk_loader(world.Chunks(), generator, ws) -, skeletons() -, spawner(world, skeletons, gc.seed) -, server(sc, world) +, spawner(world, models, env.rng) +, server(config.net, world, wc, ws) , loop_timer(16) { TextureIndex tex_index; - env.loader.LoadBlockTypes("default", block_types, tex_index); - skeletons.LoadHeadless(); + 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) { + throw std::runtime_error("need at least two models to run"); + } + generator.LoadTypes(block_types); + spawner.LimitModels(1, models.size()); + server.SetPlayerModel(models[0]); loop_timer.Start(); - std::cout << "listening on UDP port " << sc.port << std::endl; + std::cout << "listening on UDP port " << config.net.port << std::endl; +} + +ServerState::~ServerState() { + } 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(); } }