From 4befbb00861e9daa3ca5ef42d0ce592e336c15bb Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 19 Mar 2026 19:15:11 +0300 Subject: [PATCH] add 'player-min-spawn-height', 'player-max-spawn-height' generator parameters --- src/content/loading/GeneratorLoader.cpp | 2 ++ src/objects/Player.cpp | 4 +++- src/world/generator/GeneratorDef.hpp | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/content/loading/GeneratorLoader.cpp b/src/content/loading/GeneratorLoader.cpp index 2ade9bff9..1f08580a0 100644 --- a/src/content/loading/GeneratorLoader.cpp +++ b/src/content/loading/GeneratorLoader.cpp @@ -219,6 +219,8 @@ void ContentLoader::loadGenerator( map.at("sea-level").get(def.seaLevel); map.at("wide-structs-chunks-radius").get(def.wideStructsChunksRadius); map.at("player-spawn-radius").get(def.playerSpawnRadius); + map.at("player-min-spawn-height").get(def.playerMinSpawnHeight); + map.at("player-max-spawn-height").get(def.playerMaxSpawnHeight); if (map.has("heightmap-inputs")) { for (const auto& element : map["heightmap-inputs"]) { int index = element.asInteger(); diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index dd918b4ea..d51ae0d4c 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -128,7 +128,9 @@ void Player::attemptToChooseSpawnpoint() { const auto& generatorDef = level.content.generators.require(level.getWorld()->getGenerator()); - glm::vec3 newpos {0.0f, random.randFloat() * 100 + 100, 0.0f}; + int minHeight = generatorDef.playerMinSpawnHeight; + int maxHeight = generatorDef.playerMaxSpawnHeight; + glm::vec3 newpos {0.0f, random.randFloat() * (maxHeight - minHeight + 1) + minHeight, 0.0f}; double angle = random.randDouble() * glm::two_pi(); double radius = glm::sqrt(random.randDouble()); newpos.x += glm::cos(angle) * generatorDef.playerSpawnRadius * radius; diff --git a/src/world/generator/GeneratorDef.hpp b/src/world/generator/GeneratorDef.hpp index c82cf6c70..0cf0880d4 100644 --- a/src/world/generator/GeneratorDef.hpp +++ b/src/world/generator/GeneratorDef.hpp @@ -214,6 +214,8 @@ struct GeneratorDef { uint heightsBPD = 4; float playerSpawnRadius = DEFAULT_PLAYER_SPAWN_RADIUS; + int playerMinSpawnHeight = CHUNK_H / 4; + int playerMaxSpawnHeight = CHUNK_H; /// @brief Biome parameter maps interpolation method InterpolationType biomesInterpolation = InterpolationType::LINEAR;