载入中...
搜索中...
未找到
TerrainTreePlacement.h
浏览该文件的文档.
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <string>
6#include <vector>
7
8#include "common/Result.h"
9
10namespace eve::procgen {
11class Heightmap;
12class PointSet;
13struct TerrainMultiTileReport;
14struct TerrainStampSettings;
15
18
20enum class TerrainTreeYOffsetMode : std::uint8_t { TerrainHeight, SeaLevel, Custom };
21
24 float originX = 0, originZ = 0, width = 1, depth = 1, heightScale = 1;
25 float spacing = 10, spawnDensity = 1, jitterPercent = 0.5F;
26 float failureRate = 0, minimumFitness = 0.5F;
27 bool snapToTerrain = true;
31 float minimumWidth = 0.75F, maximumWidth = 1.5F;
32 float minimumHeight = 0.75F, maximumHeight = 1.5F;
34 float healthyR = 1, healthyG = 1, healthyB = 1, healthyA = 1;
35 float dryR = 1, dryG = 1, dryB = 1, dryA = 1;
36 float bendFactor = 0, boundsRadius = 1;
37 std::int32_t seed = 1;
38 std::uint64_t namespaceId = 1;
39 int maxPoints = 1000000;
40 std::string asset;
41};
42
53
55enum class TerrainTreeOperationMode : std::uint8_t { Add, Replace, Remove };
56
59 std::string name;
60 PointSet* trees = nullptr;
61 const Heightmap* heights = nullptr;
62 double originX = 0, originZ = 0, width = 1, depth = 1;
64 bool worldMap = false;
65};
66
80 const std::vector<TerrainTreeTile>& tiles, const Heightmap& operationFitness,
81 const TerrainTreePlacementSettings& settings, const TerrainStampSettings& operationSettings,
82 TerrainTreeOperationMode mode, bool worldMapOperation = false,
83 const std::vector<std::string>& validTerrainNames = {});
84
91public:
103 [[nodiscard]] Result<int> addTile(const std::string& name, const PointSet& trees, const Heightmap& heights,
104 double originX, double originZ, double width, double depth,
105 int treeResolutionX, int treeResolutionY, bool worldMap = false);
107 [[nodiscard]] Result<int> apply(const Heightmap& operationFitness,
109 const TerrainStampSettings& operationSettings, TerrainTreeOperationMode mode,
110 bool worldMapOperation = false);
112 [[nodiscard]] Result<int> copyTile(const std::string& name, PointSet& output) const;
114 [[nodiscard]] Result<int> undo();
116 [[nodiscard]] Result<int> redo();
118 int getTileCount() const noexcept;
120 int getLastChangedSamples() const noexcept;
122 int getLastAffectedTiles() const noexcept;
124 int getOperationCount() const noexcept;
126 int getAppliedCount() const noexcept;
127
128private:
129 struct Impl;
130 std::unique_ptr<Impl> impl_;
131};
132
147[[nodiscard]] EVENGINE_API_DOMAINS Result<int> exportTerrainTreePoints(PointSet& output, const Heightmap& fitness,
148 const Heightmap& heights,
150
160[[nodiscard]] EVENGINE_API_DOMAINS Result<int> removeTerrainTreePoints(PointSet& output, const PointSet& input,
161 const Heightmap& fitness,
163
173[[nodiscard]] EVENGINE_API_DOMAINS Result<int> rescaleTerrainTreePoints(PointSet& output, const PointSet& input,
175} // namespace eve::procgen
std::string output
EvpackChunkInput input
Definition Evpack.cpp:170
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint32_t width
std::string name
Move-only, checked operation results for the common layer.
TerrainThermalSettings settings
std::uint32_t depth
std::vector< WfcTile > tiles
Definition WfcSimple.cpp:22
Move-only operation result carrying either a value or Status.
Definition Result.h:155
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
Script-friendly collection of attributed 3D samples.
Definition PointSet.h:59
Owning script-safe multi-terrain tree transaction workspace. Tree sets and height rasters are copied ...
TerrainMultiTreeWorkspace(TerrainMultiTreeWorkspace &&) noexcept
Terrain multi tree workspace.
~TerrainMultiTreeWorkspace()
Terrain multi tree workspace.
Result< TerrainMultiTileReport > applyTerrainTreesMultiTile(const std::vector< TerrainTreeTile > &tiles, const Heightmap &operationFitness, const TerrainTreePlacementSettings &s, const TerrainStampSettings &operationSettings, TerrainTreeOperationMode mode, bool worldMapOperation, const std::vector< std::string > &validTerrainNames)
Apply one Pcg tree distribution window across selected terrain tiles atomically.
TerrainTreeScaleMode
Pcg-compatible rules for deriving tree scale from placement fitness.
TerrainTreeYOffsetMode
Height reference used when a tree does not snap directly to terrain.
TerrainTreeOperationMode
Pcg SetTerrainTrees operation branch. Add and Replace both append after upstream clearing policy.
Value configuration for a rectangular stamp in world X/Z coordinates.
Explicit deterministic tree placement configuration for one terrain rectangle and resource.
Previous and replacement prototype values used for atomic Pcg-style tree refresh.
Borrowed terrain-local tree owner, height raster and world geometry for one synchronous transaction.