载入中...
搜索中...
未找到
CameraRuntime.cpp
浏览该文件的文档.
2
4
5#include <utility>
6
8
11
13 graphics::Camera3D* camera) {
14 const auto diagnostics = document.validate();
15 for (const auto& diagnostic : diagnostics)
16 if (diagnostic.severity() == DiagnosticSeverity::Error)
17 return Result<void>::failure(eve::Status(EditorStatus::Rejected, diagnostics));
18 auto candidate = std::make_unique<camera::CameraController>();
19 candidate->setCamera(camera);
20 for (const auto& rig : document.rigs()) {
21 candidate->setMode(rig.mode);
22 candidate->setTarget(rig.target.x, rig.target.y, rig.target.z);
23 candidate->setOffset(rig.offset.x, rig.offset.y, rig.offset.z);
24 candidate->setLookAhead(rig.lookAhead.x, rig.lookAhead.y, rig.lookAhead.z);
25 candidate->setComposition(rig.composition.x, rig.composition.y);
26 candidate->setRadius(rig.radius);
27 candidate->setAzimuth(rig.azimuth);
28 candidate->setElevation(rig.elevation);
29 candidate->setYaw(rig.yaw);
30 candidate->setPitch(rig.pitch);
31 candidate->setFov(rig.fov);
32 candidate->setSmooth(rig.smooth);
33 candidate->setMaxSpeed(rig.maxSpeed);
34 if (!candidate->addRig(rig.id.value(), rig.mode, rig.priority) ||
35 !candidate->saveRigState(rig.id.value()) ||
36 !candidate->setRigEnabled(rig.id.value(), rig.enabled))
37 return eve::editing::failed<void>(EditorStatus::Failed, RuleId("editor.camera.runtime-rig"), "Camera runtime rejected a validated rig");
38 }
39 for (const auto& key : document.timeline()) {
40 bool accepted = false;
41 if (key.kind == "cut") accepted = candidate->addTimelineCut(key.time, key.rig.value(), key.blend);
42 else if (key.kind == "float") accepted = candidate->addTimelineFloat(key.time, key.property, key.value);
43 else if (key.kind == "event") accepted = candidate->addTimelineEvent(key.time, key.name, key.data);
44 if (!accepted)
45 return eve::editing::failed<void>(EditorStatus::Failed, RuleId("editor.camera.runtime-key"), "Camera runtime rejected a validated timeline key");
46 }
47 controller_ = std::move(candidate);
48 revision_ = document.revision();
49 return eve::editing::applied<void>(diagnostics);
50}
51
52} // namespace eve::camera_editing
float camera[2]
std::uint32_t key
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Structured status and zero or more diagnostics for an operation.
Definition Status.h:68
~CameraDocumentRuntime()
Camera document runtime.
CameraDocumentRuntime()
Camera document runtime.
Result< void > publish(const CameraDocumentTarget &document, graphics::Camera3D *camera)
Build a complete controller before replacing the active generation.
Revisioned camera-rig and director-timeline editing document.
const std::vector< CameraRigValue > & rigs() const
Return authored rigs in stable document order.
std::vector< EditorDiagnostic > validate() const
Validate references, ranges, names and document budgets.
std::vector< CameraTimelineKeyValue > timeline() const
Return timeline keys sorted by time then stable identity.
std::uint64_t revision() const override
Return the current revision.
EVENGINE_API_BACKENDS public API.
editing::RuleId RuleId