]> git.localhorst.tv Git - blank.git/blobdiff - src/server/ServerState.cpp
store shapes in models rather than meshes
[blank.git] / src / server / ServerState.cpp
index ebe675f05b2908007b57626106b9a7e033ecf3fd..98861bfacd17f5c723f7e0ee664218b96e4057f8 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "../app/Environment.hpp"
 #include "../app/TextureIndex.hpp"
+#include "../io/WorldSave.hpp"
 #include "../net/io.hpp"
 
 #include <iostream>
@@ -15,31 +16,45 @@ 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()
 , world(block_types, wc)
 , generator(gc)
 , chunk_loader(world.Chunks(), generator, ws)
 , skeletons()
-, spawner(world, skeletons, gc.seed)
-, server(sc, world)
+, 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);
-       skeletons.LoadHeadless();
-       spawner.LimitSkeletons(1, skeletons.Size());
+       env.loader.LoadShapes("default", shapes);
+       env.loader.LoadBlockTypes("default", block_types, tex_index, shapes);
+       generator.LoadTypes(block_types);
+       skeletons.Load(shapes);
+       spawner.LimitSkeletons(1, skeletons.size());
+       spawner.LoadTextures(tex_index);
        server.SetPlayerModel(skeletons[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();
        }
 }