载入中...
搜索中...
未找到
HouseGenTarget.cpp
浏览该文件的文档.
123 const auto *editorId = field(value, "editorId"), *id = field(value, "id"), *model = field(value, "model"),
130 return eve::editing::failed<HouseKitComponentValue>(EditorStatus::Rejected, RuleId("editor.housegen.component"),
136 int* values[] = {&out.component.width, &out.component.depth, &out.component.height, &out.component.weight};
143 EditorStatus::Rejected, RuleId("editor.housegen.dimension"), "House component dimension is invalid");
148 return eve::editing::failed<HouseKitComponentValue>(EditorStatus::Rejected, RuleId("editor.housegen.arrays"),
153 return eve::editing::failed<HouseKitComponentValue>(EditorStatus::Rejected, RuleId("editor.housegen.sockets"),
169 return eve::editing::failed<HouseKitComponentValue>(EditorStatus::Rejected, RuleId("editor.housegen.material"),
180 return eve::editing::failed<HouseKitComponentValue>(EditorStatus::Rejected, RuleId("editor.housegen.material"),
188 return eve::editing::failed<HouseKitComponentValue>(EditorStatus::Rejected, RuleId("editor.housegen.color"),
197 EditorStatus::Rejected, RuleId("editor.housegen.texture"), "House material texture is invalid");
207 EditorStatus::Rejected, RuleId("editor.housegen.material-number"), "House material number is invalid");
231 return eve::editing::failed<housegen::HouseRequest>(EditorStatus::Rejected, RuleId("editor.housegen.seed"),
241 EditorStatus::Rejected, RuleId("editor.housegen.request-number"), "House request integer is invalid");
244 if (!number(field(value, "moduleSize"), r.moduleSize) || !number(field(value, "floorHeight"), r.floorHeight))
246 EditorStatus::Rejected, RuleId("editor.housegen.request-number"), "House request scale is invalid");
254 EditorStatus::Rejected, RuleId("editor.housegen.request-string"), "House request string is invalid");
258 return eve::editing::failed<housegen::HouseRequest>(EditorStatus::Rejected, RuleId("editor.housegen.rooms"),
262PropertyDescriptor prop(std::string path, PropertyType type, EditorValue defaultValue, double minimum = -1e9,
290 return c == CapabilityId("eve.editor.target.housegen-properties") ? static_cast<IPropertyProvider*>(this) : nullptr;
295 if (item.target != TargetId(id_) || std::none_of(components_.begin(), components_.end(), [&](const auto& c) {
301eve::Result<eve::Revision> HouseGenDocumentTarget::currentRevision(const SelectionSnapshot& s) const {
304 eve::DiagnosticCode::InvalidArgument, "House component selection mismatch", "editor.housegen.selection"));
322PropertyReadResult HouseGenDocumentTarget::read(const SelectionSnapshot& s, const PropertyPath& path) const {
356 return EditorValue::Object{{"components", std::move(components)}, {"request", requestValue(request_)}};
371Result<DomainOperation> HouseGenDocumentTarget::makeSet(const SelectionSnapshot& s, const PropertyPath& path,
375 if (!matches(s) || !d || mode != PropertySetMode::Absolute || !validatePropertyValue(*d, value).ok())
376 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.housegen.set"),
380 auto& c = std::find_if(candidate.components_.begin(), candidate.components_.end(), [&](const auto& v) {
404 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.housegen.invalid"),
412 return eve::editing::failed<DomainOperation>(EditorStatus::Unsupported, RuleId("editor.housegen.property"),
418 if (component.id.empty() || std::any_of(components_.begin(), components_.end(), [&](const auto& c) {
421 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.housegen.component-id"),
427 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.housegen.component"),
432 if (std::none_of(components_.begin(), components_.end(), [&](const auto& c) { return c.id == id; }))
433 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.housegen.component"),
439Result<DomainOperation> HouseGenDocumentTarget::makeSetRequest(const housegen::HouseRequest& request) const {
443 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.housegen.request"),
476 request_.roof == "auto" || request_.roof == "gable" || request_.roof == "flat" || request_.roof == "shed";
477 const bool entrance = request_.entrance == "auto" || request_.entrance == "north" || request_.entrance == "east" ||
481 request_.moduleSize <= 0 || request_.moduleSize > 10000 || !std::isfinite(request_.floorHeight) ||
497 const auto *componentsValue = field(op.payload, "components"), *requestValueField = field(op.payload, "request");
498 const auto* components = componentsValue ? componentsValue->getIf<EditorValue::Array>() : nullptr;
541 const auto *versionValue = field(snapshot, "schemaVersion"), *content = field(snapshot, "content");
544 return eve::editing::failed<void>(EditorStatus::Unsupported, RuleId("editor.housegen.snapshot"),
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
bool ok() const noexcept
Whether this result represents a non-failure outcome.
Definition Result.h:480
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
bool empty() const noexcept
True when no compatibility spelling has been assigned.
Definition Identity.h:374
void bumpRevision()
Advance the revision without touching the dirty region.
Definition EditableTarget.h:179
Revision revisionValue() const noexcept
Return the revision as the shared protocol revision type.
Definition EditableTarget.h:169
void widenDirty()
Mark an unknown area dirty without advancing the revision.
Definition EditableTarget.h:177
virtual void clearDirtyRegion()=0
Clears dirty region.
UI-independent property access for an immutable selection snapshot.
Definition EditingProperty.h:139
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
Definition EditingValue.h:19
bool isWithinLimits(size_t maxDepth, size_t maxElements, size_t maxStringBytes) const
Validate nesting, element count and approximate string byte limits.
Definition EditingValue.cpp:50
房屋组件注册表(按 id 索引,支持分类/风格查询)。
Definition HouseComponentLibrary.h:18
eve::Result< void > registerComponent(const HouseComponent &component)
注册单个组件(id 重复会报错)。
Definition HouseComponentLibrary.cpp:100
Revisioned component-kit and deterministic generation-request asset.
Definition HouseGenTarget.h:63
Result< DomainOperation > makeCreateComponent(const HouseKitComponentValue &component) const
Add one component with stable editor and unique runtime IDs.
Definition HouseGenTarget.cpp:416
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget > candidate) override
Commits domain state.
Definition HouseGenTarget.cpp:528
Result< DomainOperation > makeDeleteComponent(const ObjectId &id) const
Remove one component.
Definition HouseGenTarget.cpp:431
Result< DomainOperation > makeSetRequest(const housegen::HouseRequest &request) const
Replace the deterministic generation request.
Definition HouseGenTarget.cpp:439
Result< DomainOperation > makeSet(const SelectionSnapshot &selection, const PropertyPath &path, const EditorValue &value, PropertySetMode mode) const override
Make set.
Definition HouseGenTarget.cpp:371
eve::Result< eve::Revision > currentRevision(const SelectionSnapshot &selection) const override
Current revision.
Definition HouseGenTarget.cpp:301
PropertySchema schema(const SelectionSnapshot &selection) const override
Schema.
Definition HouseGenTarget.cpp:307
Result< DomainOperation > makeReset(const SelectionSnapshot &selection, const PropertyPath &path) const override
Make reset.
Definition HouseGenTarget.cpp:408
void * queryCapability(const CapabilityId &capability) override
Query an optional target capability.
Definition HouseGenTarget.cpp:289
const std::vector< HouseKitComponentValue > & components() const
Components.
Definition HouseGenTarget.h:99
PropertyReadResult read(const SelectionSnapshot &selection, const PropertyPath &path) const override
Reads .
Definition HouseGenTarget.cpp:322
std::vector< EditorDiagnostic > validate() const
Validate kit fields, generator-required categories and request budgets.
Definition HouseGenTarget.cpp:447
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition HouseGenTarget.cpp:493
Result< void > loadSnapshot(const EditorValue &snapshot)
Loads snapshot.
Definition HouseGenTarget.cpp:540
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
Definition HouseGenTarget.cpp:525
EVENGINE_API_PLATFORM bool hasErrors(const std::vector< DnutDiagnostic > &diagnostics)
Return whether any diagnostic is an error.
Definition DnutLexer.cpp:233
Diagnostic ruleDiagnostic(eve::DiagnosticCode code, RuleId rule, DiagnosticSeverity severity, std::string message)
Build a common diagnostic carrying an open editing rule identity.
Definition EditingResult.h:25
Definition HouseGenRuntime.cpp:10
editing::PropertyDescriptor PropertyDescriptor
Definition HouseGenTarget.h:35
editing::DomainOperation DomainOperation
Definition HouseGenTarget.h:24
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ InvalidArgument
@ PreconditionViolation
@ Conflict
@ Object
Definition Container.h:602
PropertyDescriptorLookup find(const PropertyPath &path) const
Finds find.
Definition EditingProperty.cpp:9
Stable discovery metadata exposed by every editable target.
Definition EditableTarget.h:39
std::vector< std::string > requiredRooms
Definition HouseGenTypes.h:86
Authored house component with stable editor identity.
Definition HouseGenTarget.h:53
housegen::HouseComponent component
Definition HouseGenTarget.h:55