summaryrefslogtreecommitdiffstats
path: root/game/server/worldgen.cc
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-03-22 15:08:17 +0500
committeruntodesu <kirill@untode.su>2025-03-22 15:08:17 +0500
commite34a973f647bc6b7814ad1f3e837689f8478b84a (patch)
tree7c8cb1702c16eb68e7acf942d46633a3833bba00 /game/server/worldgen.cc
parentd8f0fcb101c21b3c4d746d20da6e56e7591006e4 (diff)
downloadvoxelius-e34a973f647bc6b7814ad1f3e837689f8478b84a.tar.bz2
voxelius-e34a973f647bc6b7814ad1f3e837689f8478b84a.zip
A bunch of pre-release fixes
- Updated localization for protocol messages - Added item registry check into server-side - Slightly improved how features are stored
Diffstat (limited to 'game/server/worldgen.cc')
-rw-r--r--game/server/worldgen.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/game/server/worldgen.cc b/game/server/worldgen.cc
index 83fddbb..4fc37c7 100644
--- a/game/server/worldgen.cc
+++ b/game/server/worldgen.cc
@@ -1,13 +1,19 @@
#include "server/pch.hh"
#include "server/worldgen.hh"
+#include "core/config.hh"
+
#include "shared/chunk.hh"
#include "shared/dimension.hh"
#include "shared/protocol.hh"
#include "shared/threading.hh"
+#include "server/globals.hh"
+#include "server/inhabited.hh"
#include "server/sessions.hh"
+static ConfigBoolean aggressive_caching(false);
+
static emhash8::HashMap<Dimension *, emhash8::HashMap<chunk_pos, std::unordered_set<Session *>>> active_tasks;
class WorldgenTask final : public Task {
@@ -60,6 +66,14 @@ void WorldgenTask::finalize(void)
auto chunk = m_dimension->create_chunk(m_cpos);
chunk->set_voxels(m_voxels);
+ if(aggressive_caching.get_value()) {
+ // Marking the chunk with InhabitedComponent makes
+ // it so that it is saved regardles of whether it was
+ // modified by players or not. This isn't particularly
+ // good for server-side disk usage but it might improve performance
+ m_dimension->chunks.emplace<InhabitedComponent>(chunk->get_entity());
+ }
+
protocol::ChunkVoxels response;
response.voxels = m_voxels;
response.chunk = m_cpos;
@@ -84,6 +98,11 @@ void WorldgenTask::finalize(void)
}
}
+void worldgen::init(void)
+{
+ globals::server_config.add_value("worldgen.aggressive_caching", aggressive_caching);
+}
+
bool worldgen::is_generating(Dimension *dimension, const chunk_pos &cpos)
{
auto dim_tasks = active_tasks.find(dimension);