载入中...
搜索中...
未找到
TerrainMultiTile.h
浏览该文件的文档.
1#pragma once
2
3#include <cstdint>
4#include <string>
5#include <memory>
6#include <vector>
7#include "common/Result.h"
8
9namespace eve::procgen {
10class Heightmap;
11class TerrainDetailLayer;
12struct TerrainStampSettings;
13struct TerrainDetailSettings;
14
20
23 std::string name;
24 Heightmap* heightmap = nullptr;
25 double originX = 0, originZ = 0, width = 1, depth = 1;
26 bool worldMap = false;
27};
28
31
34 std::string name;
35 double originX = 0, originZ = 0, width = 1, depth = 1;
37 bool worldMap = false;
38};
39
42 std::string name;
44 double originX = 0, originZ = 0, width = 1, depth = 1;
45 bool worldMap = false;
46};
47
50 std::string terrainName;
51 int localX = 0, localY = 0, operationX = 0, operationY = 0, width = 0, height = 0;
52};
53
59 std::vector<TerrainAffectedPixels> mappings;
60};
61
73 const std::vector<TerrainOperationTile>& tiles, const TerrainStampSettings& settings, TerrainOperationDomain domain,
74 bool worldMapOperation = false, const std::vector<std::string>& validTerrainNames = {});
75
89 const std::vector<TerrainDetailTile>& tiles, const Heightmap& operationFitness,
90 const TerrainDetailSettings& settings, const TerrainStampSettings& operationSettings, std::int32_t seed,
91 bool worldMapOperation = false, const std::vector<std::string>& validTerrainNames = {});
92
108 const std::vector<TerrainHeightTile>& tiles, const Heightmap& stamp, const TerrainStampSettings& settings,
109 const Heightmap& localMask, const Heightmap& globalMask, bool worldMapOperation = false,
110 const std::vector<std::string>& validTerrainNames = {});
111
120[[nodiscard]] EVENGINE_API_DOMAINS Result<int> stitchTerrainHeightmaps(
121 const TerrainHeightTile& terrainA, const TerrainHeightTile& terrainB,
122 const TerrainHeightStitchSettings& settings = {});
123
129public:
141 [[nodiscard]] Result<int> addTile(const std::string& name, const Heightmap& heightmap, double originX,
142 double originZ, double width, double depth, bool worldMap = false);
144 [[nodiscard]] Result<int> stamp(const Heightmap& stamp, const TerrainStampSettings& settings,
145 const Heightmap& localMask, const Heightmap& globalMask,
146 bool worldMapOperation = false);
148 [[nodiscard]] Result<int> stitch(const std::string& terrainA, const std::string& terrainB,
151 [[nodiscard]] Result<int> copyTile(const std::string& name, Heightmap& output) const;
153 [[nodiscard]] Result<int> undo();
155 [[nodiscard]] Result<int> redo();
157 int getTileCount() const noexcept;
159 int getLastAffectedTiles() const noexcept;
161 int getLastChangedSamples() const noexcept;
163 int getLastMappingCount() const noexcept;
165 int getOperationCount() const noexcept;
167 int getAppliedCount() const noexcept;
168private:
169 struct Impl;
170 std::unique_ptr<Impl> impl_;
171};
172
179public:
191 [[nodiscard]] Result<int> addTile(const std::string& name, const TerrainDetailLayer& layer, double originX,
192 double originZ, double width, double depth, bool worldMap = false);
194 [[nodiscard]] Result<int> apply(const Heightmap& operationFitness, const TerrainDetailSettings& settings,
195 const TerrainStampSettings& operationSettings, std::int32_t seed,
196 bool worldMapOperation = false);
198 [[nodiscard]] Result<int> copyTile(const std::string& name, TerrainDetailLayer& output) const;
200 [[nodiscard]] Result<int> undo();
202 [[nodiscard]] Result<int> redo();
204 int getTileCount() const noexcept;
206 int getLastChangedSamples() const noexcept;
208 int getLastAffectedTiles() const noexcept;
210 int getOperationCount() const noexcept;
212 int getAppliedCount() const noexcept;
213
214private:
215 struct Impl;
216 std::unique_ptr<Impl> impl_;
217};
218} // namespace eve::procgen
std::string output
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint32_t width
std::string name
TileLayer * layer
std::uint32_t seed
Definition PointSet.cpp:807
Move-only, checked operation results for the common layer.
TerrainThermalSettings settings
Heightmap stamp
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
Owned integer terrain-detail layer, independent of graphics and resource registries....
Owning script-safe multi-terrain detail transaction workspace. Input layers are copied on insertion....
~TerrainMultiDetailWorkspace()
Terrain multi detail workspace.
TerrainMultiDetailWorkspace(TerrainMultiDetailWorkspace &&) noexcept
Terrain multi detail workspace.
Owning script-safe collection of height tiles with atomic multi-tile operations. Tiles are copied on ...
~TerrainMultiTileWorkspace()
Terrain multi tile workspace.
TerrainMultiTileWorkspace(TerrainMultiTileWorkspace &&) noexcept
Terrain multi tile workspace.
Result< TerrainMultiTileReport > applyTerrainStampMultiTile(const std::vector< TerrainHeightTile > &tiles, const Heightmap &stamp, const TerrainStampSettings &settings, const Heightmap &localMask, const Heightmap &globalMask, bool worldMapOperation, const std::vector< std::string > &validTerrainNames)
Apply one world-space stamp to all selected intersecting height tiles atomically.
Result< TerrainMultiTileReport > mapTerrainOperationMultiTile(const std::vector< TerrainOperationTile > &tiles, const TerrainStampSettings &settings, TerrainOperationDomain domain, bool worldMapOperation, const std::vector< std::string > &validTerrainNames)
Calculate Pcg-compatible local and shared pixel rectangles for any multi-terrain raster domain.
Result< int > stitchTerrainHeightmaps(const TerrainHeightTile &terrainA, const TerrainHeightTile &terrainB, const TerrainHeightStitchSettings &settings)
Stitch the overlapping shared edge of two grid-aligned height tiles with Pcg's seam interpolation.
TerrainOperationDomain
Pcg multi-terrain pixel domain; only heightmaps share the border sample between adjacent tiles.
Result< TerrainMultiTileReport > applyTerrainDetailMultiTile(const std::vector< TerrainDetailTile > &tiles, const Heightmap &operationFitness, const TerrainDetailSettings &settings, const TerrainStampSettings &operationSettings, int32_t seed, bool worldMapOperation, const std::vector< std::string > &validTerrainNames)
Integer rectangles mapping one tile into the shared operation raster.
Effective detail rule settings; density is rule density times global spawn density.
Borrowed mutable detail layer participating in one synchronous world operation.
Pcg terrain-height seam controls; maxDifference is retained for source-profile compatibility.
Borrowed mutable height tile participating in one synchronous world operation.
Completed multi-tile stamp statistics and Pcg-compatible affected-pixel mappings.
std::vector< TerrainAffectedPixels > mappings
Immutable tile geometry and raster resolution used to calculate a shared operation window.
Value configuration for a rectangular stamp in world X/Z coordinates.