载入中...
搜索中...
未找到
BiomeRulesEditor.h
浏览该文件的文档.
1#pragma once
2
13#include "procgen/SpatialData.h"
14
15#include <cstdint>
16#include <string>
17#include <vector>
18
19namespace eve::biome_editor {
20
33public:
35 explicit BiomeRulesEditor(std::string targetId);
36
39
41 const biome_editing::BiomeDocumentTarget& target() const noexcept { return target_; }
42
47 [[nodiscard]] biome_editing::Result<void> configureWorkspace(editor::EditorWorkspace& workspace) const;
48
49 [[nodiscard]] biome_editing::Result<void> selectLayer(std::string id);
50 [[nodiscard]] biome_editing::Result<void> selectAsset(std::string id);
51 [[nodiscard]] biome_editing::Result<void> setLayerDensity(double density);
52 [[nodiscard]] biome_editing::Result<void> setLayerPriority(int priority);
53 [[nodiscard]] biome_editing::Result<void> setAssetWeight(double weight);
54 [[nodiscard]] biome_editing::Result<void> createLayer(std::string id, std::string name);
55 [[nodiscard]] biome_editing::Result<void> deleteSelectedLayer();
56 [[nodiscard]] biome_editing::Result<void> createAsset(std::string id, std::string asset);
57 [[nodiscard]] biome_editing::Result<void> deleteSelectedAsset();
58 [[nodiscard]] biome_editing::Result<void> addExclusion(std::string spatialAsset);
59 [[nodiscard]] biome_editing::Result<void> removeExclusion(std::string spatialAsset);
60 [[nodiscard]] biome_editing::Result<void> setSeed(std::uint32_t seed);
61 [[nodiscard]] biome_editing::Result<void> setSpacing(float spacing);
62
65
66 bool canUndo() const noexcept { return transactions_.canUndo(); }
68 bool canRedo() const noexcept { return transactions_.canRedo(); }
70 std::uint64_t revision() const noexcept { return target_.revision(); }
72 std::uint64_t previewRevision() const noexcept { return previewRevision_; }
74 std::uint32_t seed() const noexcept { return seed_; }
76 float spacing() const noexcept { return spacing_; }
78 std::string selectedId() const { return selectedId_; }
80 std::string selectedType() const { return selectedType_; }
81
83 int layerCount() const { return static_cast<int>(target_.layers().size()); }
85 std::string layerId(int index) const;
87 std::string layerName(int index) const;
89 float layerDensity(int index) const;
91 int layerPriority(int index) const;
93 bool isLayerSelected(int index) const;
94
96 int assetCount() const;
98 std::string assetId(int index) const;
100 std::string assetRef(int index) const;
102 float assetWeight(int index) const;
104 bool isAssetSelected(int index) const;
105
107 int exclusionCount() const { return static_cast<int>(target_.exclusions().size()); }
109 std::string exclusionAsset(int index) const;
110
112 int pointCount() const { return static_cast<int>(points_.size()); }
114 float pointX(int index) const;
116 float pointZ(int index) const;
118 std::string pointAsset(int index) const;
119
120private:
121 struct PreviewPoint {
122 float x = 0;
123 float z = 0;
124 std::string asset;
125 };
126
127 class SpatialResolver final : public biome_editing::IBiomeSpatialResolver {
128 public:
130 SpatialResolver(procgen::SpatialData* forest, procgen::SpatialData* clearing);
132 biome_editing::Result<procgen::SpatialData*> resolve(const std::string& asset) const override;
133
134 private:
135 procgen::SpatialData* forest_ = nullptr;
136 procgen::SpatialData* clearing_ = nullptr;
137 };
138
139 [[nodiscard]] biome_editing::Result<void> commit(
140 biome_editing::Result<biome_editing::DomainOperation> operation, std::string label);
141 [[nodiscard]] biome_editing::Result<void> refreshPreview();
142 void seedPreviewDocument();
143 editor::SelectionSnapshot selection() const;
145 const biome_editing::BiomeLayerValue* selectedLayer() const;
147 const biome_editing::BiomeAssetValue* assetAt(int index) const;
148
149 biome_editing::BiomeDocumentTarget target_;
150 editor::LocalWorldAuthority authority_;
151 editor::LocalTransactionBackend transactions_;
152 procgen::SpatialData forestDomain_;
153 procgen::SpatialData clearingDomain_;
154 SpatialResolver resolver_;
155 biome_editing::BiomeDocumentRuntime runtime_;
156 std::vector<PreviewPoint> points_;
157 std::string selectedId_ = "forest";
158 std::string selectedType_ = "biome.layer";
159 std::uint64_t txSequence_ = 0;
160 std::uint64_t previewRevision_ = 0;
161 std::uint32_t seed_ = 42;
162 float spacing_ = 2.0f;
163};
164
165} // namespace eve::biome_editor
ActionParameterOperation operation
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
int priority
std::string label
#define EVENGINE_API_EDITORS
Definition Export.h:112
std::string name
std::uint32_t seed
Definition PointSet.cpp:807
std::uint32_t targetId
int spacing
uint32_t index
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Revisioned BiomeRules asset.
Definition BiomeTarget.h:64
Resolves copied spatial domains for BiomeRules publication.
Workspace controller for one authored biome rules document.
BiomeRulesEditor & operator=(const BiomeRulesEditor &)=delete
int exclusionCount() const
Exclusion count.
std::string selectedType() const
Selected type.
std::uint32_t seed() const noexcept
Seed.
std::string selectedId() const
Selected id.
float spacing() const noexcept
Spacing.
const biome_editing::BiomeDocumentTarget & target() const noexcept
Borrow the authoritative biome document.
std::uint64_t revision() const noexcept
Revision.
std::uint64_t previewRevision() const noexcept
Preview revision.
BiomeRulesEditor(const BiomeRulesEditor &)=delete
bool canRedo() const noexcept
Can redo.
Composition model shared by project-specific developer and runtime editors.
Queryable spatial input for procedural pipelines.
Definition SpatialData.h:35