载入中...
搜索中...
未找到
AnimationClip.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7#include <map>
8#include <memory>
9#include <string>
10#include <vector>
11
12namespace eve::animation {
13class AnimClip;
14class AnimSkeleton;
15}
16
17namespace eve::animation_editing {
18
22 double time = 0.0;
23 double positionX = 0.0, positionY = 0.0, positionZ = 0.0;
24 double rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0, rotationW = 1.0;
25 double scaleX = 1.0, scaleY = 1.0, scaleZ = 1.0;
26};
27
31 std::string bone;
32 std::vector<AnimationTransformKey> keys;
33};
34
38 double time = 0.0;
39 std::string name;
40 std::string payload;
41};
42
45 std::string bone;
46 double weight = 1.0;
47};
48
51 std::string bone;
52 double positionX = 0.0, positionY = 0.0, positionZ = 0.0;
53 double rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0, rotationW = 1.0;
54 double scaleX = 1.0, scaleY = 1.0, scaleZ = 1.0;
55 double maskWeight = 1.0;
56};
57
60 EditorStatus status = EditorStatus::Failed;
62 double time = 0.0;
63 std::vector<AnimationSampledBone> bones;
64 std::vector<EditorDiagnostic> diagnostics;
65};
66
69 EditorStatus status = EditorStatus::Failed;
71 std::map<std::string, std::string> mapping;
72 std::vector<std::string> unmatchedSourceBones;
73 std::vector<std::string> unmatchedTargetBones;
74 std::vector<EditorDiagnostic> diagnostics;
75};
76
79public:
81 virtual ~IAnimationClipEditTarget() = default;
83 static CapabilityId editingCapabilityId() { return CapabilityId("eve.editor.target.animation-clip"); }
85 static CapabilityId editorCapabilityId() { return editingCapabilityId(); }
87 virtual Result<DomainOperation> makeSetSettings(double duration, double sampleRate, bool loop) const = 0;
91 virtual Result<DomainOperation> makeDeleteTrack(const StableId& track) const = 0;
95 virtual Result<DomainOperation> makeDeleteEvent(const StableId& event) const = 0;
98};
99
102 public virtual IEditableTarget,
107public:
109 explicit AnimationClipDocumentTarget(std::string id);
111 TargetId targetId() const override { return TargetId(id_); }
113 TargetDescriptor describe() const override;
115 void* queryCapability(const CapabilityId& capability) override;
117 Result<void> applyDomainOperation(const DomainOperation& operation) override;
119 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
121 [[nodiscard]] Result<void> commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) override;
122
124 Result<DomainOperation> makeSetSettings(double duration, double sampleRate, bool loop) const override;
126 Result<DomainOperation> makeSetTrack(const AnimationBoneTrack& track) const override;
128 Result<DomainOperation> makeDeleteTrack(const StableId& track) const override;
130 Result<DomainOperation> makeSetEvent(const AnimationEventRecord& event) const override;
132 Result<DomainOperation> makeDeleteEvent(const StableId& event) const override;
134 Result<DomainOperation> makeSetMask(const AnimationMaskEntry& mask) const override;
135
137 double duration() const noexcept { return duration_; }
139 double sampleRate() const noexcept { return sampleRate_; }
141 bool isLooping() const noexcept { return loop_; }
143 std::vector<AnimationBoneTrack> tracks() const;
145 std::vector<AnimationEventRecord> events() const;
147 std::vector<EditorDiagnostic> validate(const std::vector<std::string>& skeletonBones = {}) const;
149 AnimationClipPreview preview(double time, const std::vector<std::string>& skeletonBones = {}) const;
151 AnimationRetargetPreview previewRetarget(const std::vector<std::string>& targetBones) const;
153 EditorValue snapshotValue() const override;
155 Result<void> loadSnapshot(const EditorValue& snapshot);
156
157private:
158 std::string id_;
159 double duration_ = 1.0;
160 double sampleRate_ = 30.0;
161 bool loop_ = true;
162 std::map<StableId, AnimationBoneTrack> tracks_;
163 std::map<StableId, AnimationEventRecord> events_;
164 std::map<std::string, double> mask_;
165};
166
171[[nodiscard]] Result<AnimationBoneTrack> parseAnimationBoneTrack(const EditorValue& value);
176[[nodiscard]] Result<AnimationEventRecord> parseAnimationEventRecord(const EditorValue& value);
177
185
186} // namespace eve::animation_editing
ActionParameterOperation operation
double value
float duration
int mask
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::vector< Track > tracks
Battle::Events events
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
3D bone hierarchy + bind-pose local TRS for skeletal animation. Independent of ik::Skeleton3D (FABRIK...
UI-neutral animation clip document with reversible stable-id timeline edits.
double sampleRate() const noexcept
Authored sample rate.
TargetId targetId() const override
Target id.
double duration() const noexcept
Clip duration in seconds.
bool isLooping() const noexcept
Whether preview time wraps.
Optional bridge producing a real runtime AnimClip from an editor document.
Timeline editing capability for skeletal clips.
virtual Result< DomainOperation > makeDeleteTrack(const StableId &track) const =0
Plan removal of a stable bone track.
virtual Result< DomainOperation > makeDeleteEvent(const StableId &event) const =0
Plan removal of an event marker.
static CapabilityId editorCapabilityId()
Compatibility spelling retained for existing editor tools.
virtual Result< DomainOperation > makeSetTrack(const AnimationBoneTrack &track) const =0
Plan creation or replacement of a complete stable bone track.
virtual Result< DomainOperation > makeSetMask(const AnimationMaskEntry &mask) const =0
Plan replacement of a bone mask weight.
virtual ~IAnimationClipEditTarget()=default
Releases IAnimationClipEditTarget resources.
virtual Result< DomainOperation > makeSetEvent(const AnimationEventRecord &event) const =0
Plan creation or replacement of an event marker.
static CapabilityId editingCapabilityId()
Stable capability id for clip timeline operations.
virtual Result< DomainOperation > makeSetSettings(double duration, double sampleRate, bool loop) const =0
Plan replacement of duration, sample rate and looping settings.
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.
Optional capability exposing a deterministic, persistence-safe editing snapshot.
editing::Revision Revision
Result< AnimationEventRecord > parseAnimationEventRecord(const EditorValue &value)
Parse one authored event marker from an owning Value payload.
Result< AnimationBoneTrack > parseAnimationBoneTrack(const EditorValue &value)
Parse one authored bone track from an owning Value payload.
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
Stable bone track addressed by skeleton bone name.
std::vector< AnimationTransformKey > keys
Immutable timeline scrub result tied to one document revision.
std::vector< AnimationSampledBone > bones
std::vector< EditorDiagnostic > diagnostics
Stable timeline event marker with optional payload.
Per-bone blend mask entry in normalized [0, 1] weight space.
Non-destructive source-to-target skeleton mapping preview.
std::map< std::string, std::string > mapping
std::vector< EditorDiagnostic > diagnostics
Sampled local transform returned by non-destructive timeline scrubbing.
One stable transform key used by the animation timeline.
DomainOperation public API.
Stable discovery metadata exposed by every editable target.