载入中...
搜索中...
未找到
MontageCoordinator.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
10
11#include <cstddef>
12#include <functional>
13#include <memory>
14#include <optional>
15#include <vector>
16
17namespace eve::animation {
18
19class AnimBoneMask;
20
25
34public:
36 explicit MontageCoordinator(AnimSkeleton& skeleton);
37
42 [[nodiscard]] Result<MontageHandle> play(std::size_t layer, action::ActionTimeline timeline,
43 std::vector<MontageClipAsset>&& clips,
50 [[nodiscard]] Result<MontageAdvance> present(MontageHandle handle, const action::ActionAdvance& advance,
53 [[nodiscard]] Result<void> advanceBlendOuts(Duration delta, SimulationTick tick,
54 MontageHandle except = MontageHandle::invalid());
62 [[nodiscard]] Result<void> setLayerBoneMask(std::size_t layer, std::vector<float> weights);
68 [[nodiscard]] Result<void> setLayerBoneMask(std::size_t layer, const AnimBoneMask& mask);
70 [[nodiscard]] Result<void> clearLayerBoneMask(std::size_t layer);
72 [[nodiscard]] Result<std::vector<float>> layerBoneMask(std::size_t layer) const;
79 [[nodiscard]] Result<void> setLayerWeight(std::size_t layer, float weight);
81 [[nodiscard]] Result<float> layerWeight(std::size_t layer) const;
88 [[nodiscard]] Result<void> setLayerAdditive(std::size_t layer, bool additive);
90 [[nodiscard]] Result<bool> layerAdditive(std::size_t layer) const;
97 [[nodiscard]] Result<void> setLayerRootMotionReceiver(std::size_t layer,
100 [[nodiscard]] Result<void> clearLayerRootMotionReceiver(std::size_t layer);
108 [[nodiscard]] Result<void> setLayerRootMotionPolicy(std::size_t layer, const RootMotionPolicy& policy);
110 [[nodiscard]] Result<void> clearLayerRootMotionPolicy(std::size_t layer);
112 [[nodiscard]] Result<std::reference_wrapper<AnimPose>> pose(std::size_t layer);
121 [[nodiscard]] Result<std::reference_wrapper<AnimPose>> compose(const AnimPose& basePose);
123 void collectFinished() noexcept;
124
125private:
126 struct Slot {
127 std::unique_ptr<MontagePlayer> player;
129 bool retired = false;
130 };
131 struct Layer {
132 Slot slots[2];
133 std::size_t active = 1;
134 std::unique_ptr<AnimPose> pose;
135 std::unique_ptr<AnimPose> rawPose;
136 std::unique_ptr<AnimPose> blendScratch;
137 std::vector<float> boneMask;
138 float weight = 1.0f;
139 bool additive = false;
140 IMontageRootMotionReceiver* rootMotionReceiver = nullptr;
141 std::optional<RootMotionPolicy> rootMotionPolicy;
142 };
143
144 [[nodiscard]] static std::size_t handleIndex(std::size_t layer, std::size_t slot) noexcept {
145 return layer * 2 + slot;
146 }
148 [[nodiscard]] Slot* slotFor(MontageHandle handle) noexcept;
150 [[nodiscard]] const Slot* slotFor(MontageHandle handle) const noexcept;
151 void ensureLayer(std::size_t layer);
152 void retireSlot(Slot& slot) noexcept;
153 [[nodiscard]] double evaluateLayerPose(Layer& layer) const;
154
155 AnimSkeleton& skeleton_;
156 std::vector<Layer> layers_;
157 std::unique_ptr<AnimPose> composedPose_;
158};
159
160} // namespace eve::animation
bool & active
eve::action::ActionExecutionId executionId
eve::EntitySpatialPose pose
int mask
#define EVENGINE_API_WORLD
Definition Export.h:109
bool retired
Deterministic presentation-only action montage playback.
TileLayer * layer
std::uint32_t generation
PrimitiveHandle handle
Strong generation-qualified handles for non-ECS runtime registries.
LocalPageCacheEntry slots[ShadowConfig::kLocalSlots]
SimulationTick tick
float weights[3]
Signed, fixed-resolution simulation duration in nanoseconds.
Definition Time.h:43
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Process-local slot identity tagged by the registry that owns it.
detail::HandleCoordinates::generation_type generation_type
Unsigned owner-local generation type.
Per-bone weights used by override and additive animation layers.
Evaluated local (and optional world) pose for an AnimSkeleton. Script type: AnimPose.
Definition AnimPose.h:17
3D bone hierarchy + bind-pose local TRS for skeletal animation. Independent of ik::Skeleton3D (FABRIK...
Optional receiver for filtered per-step root motion.
Owns a fixed two-slot ping-pong topology for every animation layer.
Result payload for one deterministic advance call.
Definition Action.h:175
Canonical action timeline asset shared by runtime and editor.
MontageHandleTag public API.
Policy applied after raw root-bone delta extraction. @ownership Value type; owned by AnimPlayer or th...