Skip to content

Commit

Permalink
add 'lowering' generated structures property
Browse files Browse the repository at this point in the history
  • Loading branch information
MihailRis committed Nov 12, 2024
1 parent d72f758 commit 4b0b643
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 10 deletions.
7 changes: 5 additions & 2 deletions doc/en/world-generator.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,20 @@ Fragments used by the generator must present in the directory:

## Structures

A structure is a set of rules for inserting a fragment into the world by the generator. It currently has no properties, being created as empty objects in the `generators/generator_name.files/structures.toml` file. Example:
A structure is a set of rules for inserting a fragment into the world by the generator. Structures are declared as objects in the file `generators/generator_name.files/structures.toml`. Example:
```toml
tree0 = {}
tree1 = {}
tree2 = {}
tower = {}
tower = {lowering=2}
coal_ore0 = {}
```

Currently, the name of the structure must match the name of the fragment used.

Available properties:
- lowering - depth of structure lowering.

## Biomes

A biome defines what blocks and layers the terrain is generated from, as well as a set of plants and structures.
Expand Down
7 changes: 5 additions & 2 deletions doc/ru/world-generator.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,20 @@

## Структуры

Структура - набор правил по вставке фрагмента в мир генератором. На данный момент не имеет свойств, создаваясь в виде пустых объектов в файле `generators/имя_генератора.files/structures.toml`. Пример:
Структура - набор правил по вставке фрагмента в мир генератором. Структуры объявляются в виде объектов в файле `generators/имя_генератора.files/structures.toml`. Пример:
```toml
tree0 = {}
tree1 = {}
tree2 = {}
tower = {}
tower = {lowering=-2}
coal_ore0 = {}
```

На данный момент, имя структуры должно совпадать с именем использованного фрагмента.

Доступные свойства:
- lowering - глубина погружения структуры под поверхность.

## Биомы

Биом определяет то, из каких блоков и какими слоями генерируется ландшафт, а так же набор растений, структур.
Expand Down
2 changes: 1 addition & 1 deletion res/content/base/generators/demo.files/structures.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
tree0 = {}
tree1 = {}
tree2 = {}
tower = {}
tower = {lowering=2}
coal_ore0 = {}
2 changes: 1 addition & 1 deletion src/content/loading/GeneratorLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ static VoxelStructureMeta load_structure_meta(
) {
VoxelStructureMeta meta;
meta.name = name;

config.at("lowering").get(meta.lowering);
return meta;
}

Expand Down
3 changes: 3 additions & 0 deletions src/world/generator/GeneratorDef.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ class VoxelFragment;
struct GeneratorDef;

struct VoxelStructureMeta {
/// @brief Structure name
std::string name;
/// @brief Structure lowering on placement
int lowering = 0;
};

struct BlocksLayer {
Expand Down
9 changes: 5 additions & 4 deletions src/world/generator/WorldGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,11 @@ void WorldGenerator::generateStructures(
if (height < def.seaLevel) {
continue;
}
auto& structure = *def.structures[structureId]->fragments[rotation];
glm::ivec3 position {x, height, z};
position.x -= structure.getSize().x / 2;
position.z -= structure.getSize().z / 2;
auto& structure = *def.structures[structureId];
auto& fragment = *structure.fragments[rotation];
glm::ivec3 position {x, height-structure.meta.lowering, z};
position.x -= fragment.getSize().x / 2;
position.z -= fragment.getSize().z / 2;
placeStructure(
StructurePlacement {
structureId,
Expand Down

0 comments on commit 4b0b643

Please sign in to comment.