载入中...
搜索中...
未找到
biome_editor.cpp
浏览该文件的文档.
2
6#include "common/Capability.h"
9
10#include <simplesquirrel/simplesquirrel.hpp>
11
12#include <stdexcept>
13#include <string>
14#include <string_view>
15#include <vector>
16
18namespace {
19
20std::string stringField(const editor::EditorValue::Object& request, const char* key) {
21 const auto found = request.find(key);
22 if (found == request.end()) return {};
23 const auto* value = found->second.getIf<std::string>();
24 return value ? *value : std::string{};
25}
26
27} // namespace
28
30public:
31 std::vector<std::string_view> types() const override { return {"biome", "biome-rules"}; }
32
34 const editor::TargetId& target, std::string_view type,
35 const editor::EditorValue::Object& request) override {
36 (void)type;
37 auto biome = std::make_unique<biome_editing::BiomeDocumentTarget>(target.value());
38 const std::string layer = stringField(request, "layer");
39 if (!layer.empty()) {
42 created.name = stringField(request, "name");
43 if (created.name.empty()) created.name = layer;
44 created.spatialAsset = stringField(request, "spatial");
45 auto operation = biome->makeCreateLayer(created);
46 if (!operation.ok())
48 auto applied = biome->applyDomainOperation(operation.value());
49 if (!applied.ok())
51 }
53 owned.target = std::move(biome);
54 return eve::editing::applied<editor::AutomationOwnedTarget>(std::move(owned));
55 }
56};
57
59
61 auto* registry = eve::cap::query<editing::IEditingCommandRegistry>();
62 if (!registry || !biome_editing::registerEditingCommands(*registry).ok())
63 throw std::runtime_error("Failed to register biome editing commands");
64 eve::cap::addListener<editor::IEditorAutomationTargetFactory>(factory_.get());
65}
66
68 eve::cap::removeListener<editor::IEditorAutomationTargetFactory>(factory_.get());
69 if (auto* registry = eve::cap::query<editing::IEditingCommandRegistry>())
70 registry->unregisterOwner("biome_editing").ignore("biome editor adapter shutdown");
71}
72
73void BiomeEditorModule::expose(ssq::Table& table) {
74 auto module = table.addClass(name, BiomeEditorModule::create, false);
76}
77void BiomeEditorModule::expose(ssq::Class&) {}
78
79} // namespace eve::biome_editor
LogicalId target
ActionParameterOperation operation
double value
ActiveSource owned
Squirrel adapter for the biome rules editor.
const GltfImportRequest & request
std::uint32_t key
int biome
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
TileLayer * layer
bool found
int created
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
std::vector< std::string_view > types() const override
Stable target type names this factory accepts.
editor::Result< editor::AutomationOwnedTarget > create(const editor::TargetId &target, std::string_view type, const editor::EditorValue::Object &request) override
Create a domain target from an automation request. @ownership Success transfers the target and any su...
Composition adapter that contributes biome editing commands and automation targets.
~BiomeEditorModule() override
Biome editor module.
BiomeEditorModule()
Biome editor module.
std::map< std::string, Value > Object
Multi-provider extension point for domain-specific automation target creation.
editing::Result< void > registerEditingCommands(editing::IEditingCommandRegistry &registry)
Register Biome-owned planned commands with a generic editing host.
void exposeBiomeRulesEditorScriptBindings(ssq::Table &table, ssq::Class &moduleClass)
Expose the script-owned BiomeRulesEditor factory on BiomeEditorModule.
eve::editing::ObjectId ObjectId
Definition EditorIds.h:38
Stable authored biome layer referencing a spatial asset.
Definition BiomeTarget.h:51
Target plus optional borrowed-dependency owner returned by an automation factory.
std::unique_ptr< IEditableTarget > target