add generator definition file (.toml)

This commit is contained in:
MihailRis
2024-09-26 22:26:01 +03:00
parent d839da7dab
commit 3d478aef08
12 changed files with 76 additions and 54 deletions
@@ -16,20 +16,17 @@
#include "util/timeutil.hpp"
class LuaGeneratorScript : public GeneratorScript {
const GeneratorDef& def;
scriptenv env;
std::vector<Biome> biomes;
uint biomeParameters;
uint seaLevel;
public:
LuaGeneratorScript(
scriptenv env,
std::vector<Biome> biomes,
uint biomeParameters,
uint seaLevel)
: env(std::move(env)),
biomes(std::move(biomes)),
biomeParameters(biomeParameters),
seaLevel(seaLevel)
const GeneratorDef& def,
scriptenv env,
std::vector<Biome> biomes)
: def(def),
env(std::move(env)),
biomes(std::move(biomes))
{}
std::shared_ptr<Heightmap> generateHeightmap(
@@ -56,6 +53,7 @@ public:
) override {
std::vector<std::shared_ptr<Heightmap>> maps;
uint biomeParameters = def.biomeParameters;
auto L = lua::get_main_thread();
lua::pushenv(L, *env);
if (lua::getfield(L, "generate_biome_parameters")) {
@@ -79,7 +77,6 @@ public:
}
std::vector<StructurePlacement> placeStructures(
const GeneratorDef& def,
const glm::ivec2& offset, const glm::ivec2& size, uint64_t seed,
const std::shared_ptr<Heightmap>& heightmap
) override {
@@ -153,14 +150,6 @@ public:
const std::vector<Biome>& getBiomes() const override {
return biomes;
}
uint getBiomeParameters() const override {
return biomeParameters;
}
uint getSeaLevel() const override {
return seaLevel;
}
};
static BlocksLayer load_layer(
@@ -273,7 +262,7 @@ static inline Biome load_biome(
}
std::unique_ptr<GeneratorScript> scripting::load_generator(
const fs::path& file
const GeneratorDef& def, const fs::path& file
) {
auto env = create_environment();
auto L = lua::get_main_thread();
@@ -285,24 +274,20 @@ std::unique_ptr<GeneratorScript> scripting::load_generator(
auto root = lua::tovalue(L, -1);
lua::pop(L);
uint biomeParameters = root["biome_parameters"].asInteger();
uint seaLevel = 0;
root.at("sea_level").get(seaLevel);
std::vector<Biome> biomes;
const auto& biomesMap = root["biomes"];
for (const auto& [biomeName, biomeMap] : biomesMap.asObject()) {
try {
biomes.push_back(
load_biome(biomeMap, biomeName, biomeParameters, -2));
load_biome(biomeMap, biomeName, def.biomeParameters, -2));
} catch (const std::runtime_error& err) {
throw std::runtime_error("biome "+biomeName+": "+err.what());
}
}
return std::make_unique<LuaGeneratorScript>(
def,
std::move(env),
std::move(biomes),
biomeParameters,
seaLevel);
std::move(biomes)
);
}