载入中...
搜索中...
未找到
TerrainWorldWorkspace.cpp
浏览该文件的文档.
98TerrainWorldWorkspace& TerrainWorldWorkspace::operator=(TerrainWorldWorkspace&&) noexcept = default;
101 if (!impl_ || impl_->runStatus == TerrainWorldRunStatus::Pending || s.tilesX <= 0 || s.tilesZ <= 0 ||
107 s.defaultSplatLayer < 0 || s.defaultSplatLayer >= s.splatLayers || s.defaultDetailDensity < 0 ||
110 DiagnosticCode::InvalidArgument, "terrain.world.create: valid Pcg tile topology and resolutions required"));
145 DiagnosticCode::InvalidArgument, "terrain.world: created workspace without pending spawn required"));
185 return applyTerrainTreesMultiTile(tiles, rule.fitness, rule.settings, rule.operation, rule.mode,
194 return applyTerrainObjectsMultiTile(tiles, rule.fitness, rule.settings, rule.operation, rule.mode,
203 return applyTerrainProbesMultiTile(tiles, rule.fitness, rule.settings, rule.operation, rule.mode,
218Result<int> TerrainWorldWorkspace::stamp(const Heightmap& stampMap, const TerrainStampSettings& settings,
222 for (auto& tile : world.tiles) tiles.push_back({tile.name, &tile.heights, tile.originX, tile.originZ,
232 for (auto& tile : world.tiles) tiles.push_back({tile.name, &tile.splat, tile.originX, tile.originZ,
235 return paintTerrainSplatLayerMultiTile(tiles, paint, layer, operation, world.settings.worldMap);
238Result<int> TerrainWorldWorkspace::applyDetail(const Heightmap& fitness, const TerrainDetailSettings& settings,
244 for (auto& tile : world.tiles) tiles.push_back({tile.name, &tile.detail, tile.originX, tile.originZ,
247 return applyTerrainDetailMultiTile(tiles, fitness, configured, operation, seed, world.settings.worldMap);
255 for (auto& tile : world.tiles) tiles.push_back({tile.name, &tile.trees, &tile.heights, tile.originX,
259 return applyTerrainTreesMultiTile(tiles, fitness, settings, operation, mode, world.settings.worldMap);
268 for (auto& tile : world.tiles) tiles.push_back({tile.name, &tile.objects, &tile.heights, tile.originX,
272 return applyTerrainObjectsMultiTile(tiles, fitness, settings, operation, mode, world.settings.worldMap);
287 return applyTerrainProbesMultiTile(tiles, fitness, settings, operation, mode, world.settings.worldMap);
294 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain.world.spawn: nonempty spawn plan required"));
333 if (!impl_ || impl_->tiles.empty() || impl_->runStatus == TerrainWorldRunStatus::Pending || plan.rules().empty())
342 DiagnosticCode::InvalidArgument, "terrain.world.beginSpawn: at least one enabled rule required"));
351Result<TerrainWorldRunStatus> TerrainWorldWorkspace::beginSpawnBiome(const TerrainBiomePreset& preset) {
357Result<TerrainWorldRunStatus> TerrainWorldWorkspace::beginSpawnStamper(const TerrainBiomePreset& preset) {
364 if (!impl_ || impl_->runStatus != TerrainWorldRunStatus::Pending || !impl_->runCandidate || maxRules <= 0)
377 if (report.changedSamples > std::numeric_limits<int>::max() - impl_->runReport.changedSamples) {
381 DiagnosticCode::InvalidArgument, "terrain.world.stepSpawn: changed count exceeds integer range"));
406 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain.world.cancelSpawn: no pending spawn"));
439Result<int> TerrainWorldWorkspace::setHeightWorldUnits(float heightWorldUnits, float worldHeightSpan) {
465 DiagnosticCode::InvalidArgument, "terrain.world.clearSpawns: at least one domain must be selected"));
528Result<const TerrainWorldWorkspace::Impl::Tile*> worldTile(const std::unique_ptr<TerrainWorldWorkspace::Impl>& impl,
533 return Result<const TerrainWorldWorkspace::Impl::Tile*>::success(&impl->tiles[static_cast<std::size_t>(index)]);
536Result<int> TerrainWorldWorkspace::copyHeightmap(int index, Heightmap& output) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<int>::failure(tile.status()); output = tile.value()->heights; return Result<int>::success(int(output.data().size())); }
537Result<int> TerrainWorldWorkspace::copySplatmap(int index, TerrainSplatmap& output) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<int>::failure(tile.status()); output = tile.value()->splat; return Result<int>::success(output.getWidth() * output.getHeight()); }
538Result<int> TerrainWorldWorkspace::copyDetail(int index, TerrainDetailLayer& output) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<int>::failure(tile.status()); output = tile.value()->detail; return Result<int>::success(output.getWidth() * output.getHeight()); }
539Result<int> TerrainWorldWorkspace::copyTrees(int index, PointSet& output) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<int>::failure(tile.status()); output = tile.value()->trees; return Result<int>::success(output.getCount()); }
540Result<int> TerrainWorldWorkspace::copyObjects(int index, PointSet& output) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<int>::failure(tile.status()); output = tile.value()->objects; return Result<int>::success(output.getCount()); }
541Result<int> TerrainWorldWorkspace::copyProbes(int index, PointSet& output) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<int>::failure(tile.status()); output = tile.value()->probes; return Result<int>::success(output.getCount()); }
542Result<std::string> TerrainWorldWorkspace::getTileName(int index) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<std::string>::failure(tile.status()); return Result<std::string>::success(tile.value()->name); }
543Result<double> TerrainWorldWorkspace::getTileOriginX(int index) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<double>::failure(tile.status()); return Result<double>::success(tile.value()->originX); }
544Result<double> TerrainWorldWorkspace::getTileOriginZ(int index) const { auto tile = worldTile<int>(impl_, index); if (!tile.ok()) return Result<double>::failure(tile.status()); return Result<double>::success(tile.value()->originZ); }
569int TerrainWorldWorkspace::getTileCount() const noexcept { return impl_ ? static_cast<int>(impl_->tiles.size()) : 0; }
570int TerrainWorldWorkspace::getLastChangedSamples() const noexcept { return impl_ ? impl_->last.changedSamples : 0; }
571int TerrainWorldWorkspace::getLastAffectedTiles() const noexcept { return impl_ ? impl_->last.affectedTiles : 0; }
572int TerrainWorldWorkspace::getOperationCount() const noexcept { return impl_ && !impl_->history.empty() ? static_cast<int>(impl_->history.size()) - 1 : 0; }
573int TerrainWorldWorkspace::getAppliedCount() const noexcept { return impl_ ? impl_->cursor : 0; }
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
const T & value() const &
Borrow the value from a const lvalue after checking success.
Definition Result.h:308
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
Result< int > appendPointFrom(const PointSet &source, std::size_t sourceIndex)
Append a point and its attributes from another set.
Definition PointSet.cpp:69
void reserve(std::size_t count)
Reserve point storage without changing point or attribute row counts.
Definition PointSet.cpp:60
Own an ordered Pcg-style biome preset made from independent spawner plans. Entries and plans are copi...
Definition TerrainBiomePreset.h:25
Result< TerrainSpawnPlan > compileForStamper() const
Compile active stamper-linked entries into one owned transactional plan.
Definition TerrainBiomePreset.cpp:93
Result< TerrainSpawnPlan > compileForBiome() const
Compile active biome-controller entries into one owned transactional plan.
Definition TerrainBiomePreset.cpp:92
Owned integer terrain-detail layer, independent of graphics and resource registries....
Definition TerrainDetailLayer.h:35
Result< int > reset(int width, int height, int count=0)
Reset positive dimensions and uniform nonnegative count atomically.
Definition TerrainDetailLayer.cpp:84
Own an ordered mixed-domain Pcg-style spawn recipe. Rule IDs are stable and unique....
Definition TerrainSpawnPlan.h:87
const std::vector< TerrainSpawnRule > & rules() const noexcept
Return immutable ordered rules for transactional execution.
Definition TerrainSpawnPlan.cpp:103
Owning normalized terrain texture-layer weights with atomic mutation. Layers share one finite width/h...
Definition TerrainSplatmap.h:20
Result< int > initialize(int width, int height, int layerCount, int defaultLayer=0)
Initialize topology and assign all weight to defaultLayer.
Definition TerrainSplatmap.cpp:75
Own a complete Pcg-style terrain grid and its height, splat, detail, tree, object and probe state....
Definition TerrainWorldWorkspace.h:61
~TerrainWorldWorkspace()
Terrain world workspace.
Result< int > stamp(const Heightmap &stamp, const TerrainStampSettings &settings, const Heightmap &localMask, const Heightmap &globalMask)
Apply one height stamp and record a complete-world snapshot.
Definition TerrainWorldWorkspace.cpp:218
Definition EvpackPointGraphLoader.h:12
Result< TerrainMultiTileReport > applyTerrainObjectsMultiTile(const std::vector< TerrainObjectTile > &tiles, const Heightmap &fitness, const TerrainObjectPlacementSettings &s, const TerrainStampSettings &operationSettings, TerrainObjectOperationMode mode, bool worldMapOperation, const std::vector< std::string > &validTerrainNames)
Apply one Pcg-style game-object rule over mapped terrain tiles atomically.
Definition TerrainObjectPlacement.cpp:235
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.
Definition TerrainMultiTile.cpp:170
TerrainProbeOperationMode
Mutation performed by a multi-terrain probe rule.
Definition TerrainProbePlacement.h:14
Result< TerrainMultiTileReport > paintTerrainSplatLayerMultiTile(const std::vector< TerrainSplatTile > &tiles, const Heightmap &operationPaint, int targetLayer, const TerrainStampSettings &operationSettings, bool worldMapOperation, const std::vector< std::string > &validTerrainNames)
Paint one shared Pcg Texture-domain operation raster across selected tiles atomically.
Definition TerrainSplatmap.cpp:283
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.
Definition TerrainTreePlacement.cpp:250
TerrainDetailMode
Native detail-density operation corresponding to Pcg SpawnMode.
Definition TerrainDetailLayer.h:15
TerrainWorldRunStatus
Observable lifecycle of a caller-driven staged world spawn.
Definition TerrainWorldWorkspace.h:26
Result< TerrainMultiTileReport > applyTerrainProbesMultiTile(const std::vector< TerrainProbeTile > &tiles, const Heightmap &fitness, const TerrainProbePlacementSettings &s, const TerrainStampSettings &operation, TerrainProbeOperationMode mode, bool worldMapOperation, const std::vector< std::string > &validNames)
Apply one Pcg probe rule over mapped terrain tiles as one atomic transaction.
Definition TerrainProbePlacement.cpp:102
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)
Definition TerrainDetailLayer.cpp:149
std::variant< TerrainSplatSpawnRule, TerrainDetailSpawnRule, TerrainTreeSpawnRule, TerrainObjectSpawnRule, TerrainProbeSpawnRule, TerrainModifierStampSpawnRule > TerrainSpawnRule
Definition TerrainSpawnPlan.h:80
TerrainObjectOperationMode
Mutation performed by a multi-terrain game-object operation.
Definition TerrainObjectPlacement.h:21
TerrainTreeOperationMode
Pcg SetTerrainTrees operation branch. Add and Replace both append after upstream clearing policy.
Definition TerrainTreePlacement.h:55
@ InvalidArgument
Definition Container.h:602
Effective detail rule settings; density is rule density times global spawn density.
Definition TerrainDetailLayer.h:17
Completed multi-tile stamp statistics and Pcg-compatible affected-pixel mappings.
Definition TerrainMultiTile.h:55
std::vector< TerrainAffectedPixels > mappings
Definition TerrainMultiTile.h:59
int changedSamples
Definition TerrainMultiTile.h:57
int affectedTiles
Definition TerrainMultiTile.h:56
Deterministic Pcg SetTerrainGameObjects scan, collision and resource configuration.
Definition TerrainObjectPlacement.h:50
Deterministic value settings for Pcg SetProbes terrain scanning.
Definition TerrainProbePlacement.h:16
Value configuration for a rectangular stamp in world X/Z coordinates.
Definition TerrainStamp.h:22
Explicit deterministic tree placement configuration for one terrain rectangle and resource.
Definition TerrainTreePlacement.h:23
Select Pcg spawn domains to clear in one atomic world operation.
Definition TerrainWorldWorkspace.h:46
Validated Pcg-style centered terrain-grid topology.
Definition TerrainWorldWorkspace.h:29
std::vector< TerrainSplatmap > splats
Definition TerrainWorldWorkspace.cpp:40
TerrainMultiTileReport report
Definition TerrainWorldWorkspace.cpp:43
std::vector< PointSet > objects
Definition TerrainWorldWorkspace.cpp:42
std::vector< PointSet > trees
Definition TerrainWorldWorkspace.cpp:42
std::vector< PointSet > probes
Definition TerrainWorldWorkspace.cpp:42
std::vector< TerrainDetailLayer > details
Definition TerrainWorldWorkspace.cpp:41
std::vector< Heightmap > heights
Definition TerrainWorldWorkspace.cpp:39
TerrainDetailLayer detail
Definition TerrainWorldWorkspace.cpp:34
PointSet objects
Definition TerrainWorldWorkspace.cpp:35
double originZ
Definition TerrainWorldWorkspace.cpp:36
Heightmap heights
Definition TerrainWorldWorkspace.cpp:32
PointSet probes
Definition TerrainWorldWorkspace.cpp:35
PointSet trees
Definition TerrainWorldWorkspace.cpp:35
TerrainSplatmap splat
Definition TerrainWorldWorkspace.cpp:33
double originX
Definition TerrainWorldWorkspace.cpp:36
std::string name
Definition TerrainWorldWorkspace.cpp:31
TerrainMultiTileReport last
Definition TerrainWorldWorkspace.cpp:47
std::size_t runNext
Definition TerrainWorldWorkspace.cpp:53
std::vector< Snapshot > history
Definition TerrainWorldWorkspace.cpp:48
TerrainWorldCreationSettings settings
Definition TerrainWorldWorkspace.cpp:45
TerrainWorldRunStatus runStatus
Definition TerrainWorldWorkspace.cpp:50
Snapshot snapshot() const
Definition TerrainWorldWorkspace.cpp:68
Impl()=default
std::vector< Tile > tiles
Definition TerrainWorldWorkspace.cpp:46
void restore(const Snapshot &value)
Definition TerrainWorldWorkspace.cpp:79
Impl(const Impl &other)
Definition TerrainWorldWorkspace.cpp:57
std::unique_ptr< Impl > runCandidate
Definition TerrainWorldWorkspace.cpp:51
TerrainSpawnPlan runPlan
Definition TerrainWorldWorkspace.cpp:52
TerrainMultiTileReport runReport
Definition TerrainWorldWorkspace.cpp:54
void record()
Definition TerrainWorldWorkspace.cpp:88