载入中...
搜索中...
未找到
CrowdDocument.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
7
8#include <array>
9#include <map>
10#include <memory>
11#include <string>
12#include <vector>
13
14namespace eve::crowd_editing {
24
28 std::string archetype;
29 double x = 0.0, y = 0.0;
30 double heading = 0.0;
31 double radius = 0.5;
32 double maximumSpeed = 4.0;
33 std::string behavior = "idle";
35};
36
40 std::string name;
41 std::string kind = "avoid";
42 std::vector<std::array<double, 2>> points;
43 double weight = 1.0;
44 bool enabled = true;
45};
46
50 double x = 0.0, y = 0.0;
51 double arriveRadius = 1.0;
52 double waitSeconds = 0.0;
53};
54
58 std::string name;
59 bool loop = false;
60 std::vector<CrowdWaypointRecord> points;
61};
62
65 std::string kind;
67 std::vector<double> values;
68 std::string label;
69};
70
73 EditorStatus status = EditorStatus::Failed;
75 std::vector<CrowdOverlayPrimitive> primitives;
76 std::vector<EditorDiagnostic> diagnostics;
77};
78
81 public virtual IEditableTarget,
84public:
86 static CapabilityId editorCapabilityId() { return CapabilityId("eve.editor.target.crowd-structure"); }
88 explicit CrowdDocumentTarget(std::string id);
90 TargetId targetId() const override { return TargetId(id_); }
92 TargetDescriptor describe() const override;
94 void* queryCapability(const CapabilityId& capability) override;
96 Result<void> applyDomainOperation(const DomainOperation& operation) override;
98 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
100 [[nodiscard]] Result<void> commitDomainState(
101 std::unique_ptr<IDomainOperationTarget> candidate) override;
102
104 std::vector<CrowdAgentRecord> agents() const;
106 std::vector<CrowdZoneRecord> zones() const;
108 std::vector<CrowdPathRecord> paths() const;
110 Result<DomainOperation> makeSetAgent(const CrowdAgentRecord& record) const;
112 Result<DomainOperation> makeDeleteAgent(const StableId& id) const;
114 Result<DomainOperation> makeSetZone(const CrowdZoneRecord& record) const;
116 Result<DomainOperation> makeDeleteZone(const StableId& id) const;
118 Result<DomainOperation> makeSetPath(const CrowdPathRecord& record) const;
120 Result<DomainOperation> makeDeletePath(const StableId& id) const;
122 std::vector<EditorDiagnostic> validate() const;
124 CrowdOverlayResult overlay(int primitiveBudget = 100000) const;
126 EditorValue snapshotValue() const;
128 Result<void> loadSnapshot(const EditorValue& snapshot);
129
130private:
131 std::string id_;
132 std::map<StableId, CrowdAgentRecord> agents_;
133 std::map<StableId, CrowdZoneRecord> zones_;
134 std::map<StableId, CrowdPathRecord> paths_;
135};
136
137} // namespace eve::crowd_editing
138
139namespace eve::crowd { class Crowd; }
140
141namespace eve::crowd_editing {
142
145public:
147 Result<void> apply(const CrowdDocumentTarget& document, crowd::Crowd* runtime) const;
148};
149
150} // namespace eve::crowd_editing
ActionParameterOperation operation
#define EVENGINE_API_BACKENDS
Definition Export.h:108
std::map< std::string, std::string > paths
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
Move-only operation result carrying either a value or Status.
Definition Result.h:155
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
UI-neutral agent/zone/path document with reversible domain operations.
static CapabilityId editorCapabilityId()
Stable capability id for crowd agent, zone and path editing.
TargetId targetId() const override
Target id.
Dirty region and revision shared by every editable document target.
Optional candidate/publish capability for atomic domain operations.
Editable-target capability that applies owning domain operations.
IEditableTarget public API.
Deterministic owning value tree shared by authoring hosts.
editing::Revision Revision
eve::Severity DiagnosticSeverity
std::uint64_t Revision
StrongId< TargetIdTag > TargetId
Definition EditingIds.h:57
eve::Diagnostic Diagnostic
StrongId< StableIdTag > StableId
Definition EditingIds.h:64
StrongId< RuleIdTag > RuleId
Definition EditingIds.h:60
eve::StatusCode Status
StrongId< CapabilityIdTag > CapabilityId
Definition EditingIds.h:61
eve::crowd_editing::CrowdRuntimeApplier CrowdRuntimeApplier
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
Severity
Stable severity of a diagnostic, independent of its display text.
Definition Diagnostic.h:20
Stable authoring record for one crowd agent.
Renderer-neutral line, circle and label primitives for AI overlays.
Revision-tagged deterministic viewport overlay.
std::vector< CrowdOverlayPrimitive > primitives
std::vector< EditorDiagnostic > diagnostics
Stable ordered path shared by multiple agents.
std::vector< CrowdWaypointRecord > points
Stable waypoint used by a crowd path.
Stable polygonal sensing, avoidance or gameplay zone.
std::vector< std::array< double, 2 > > points
DomainOperation public API.
EditRegion public API.
Stable discovery metadata exposed by every editable target.