载入中...
搜索中...
未找到
MotionSequence.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
12#include "common/Result.h"
13
14#include <cstdint>
15#include <vector>
16
17namespace eve::animation {
18
26public:
30 MotionSequenceHandle(MotionRuntime *runtime, std::vector<MotionHandle> children);
31
33 [[nodiscard]] bool isActive() const noexcept;
35 [[nodiscard]] int childCount() const noexcept { return static_cast<int>(children_.size()); }
37 [[nodiscard]] MotionHandle child(int index) const;
38
40 [[nodiscard]] eve::Result<void> complete();
42 [[nodiscard]] eve::Result<void> cancel();
43
44private:
45 MotionRuntime *runtime_ = nullptr;
46 std::vector<MotionHandle> children_;
47};
48
63public:
65 explicit MotionSequence(MotionRuntime &runtime);
66
68 [[nodiscard]] eve::Result<void> append(MotionBuilder &&builder);
70 [[nodiscard]] eve::Result<void> append(MotionVec2Builder &&builder);
72 [[nodiscard]] eve::Result<void> append(MotionVec3Builder &&builder);
73
75 [[nodiscard]] eve::Result<void> join(MotionBuilder &&builder);
77 [[nodiscard]] eve::Result<void> join(MotionVec2Builder &&builder);
79 [[nodiscard]] eve::Result<void> join(MotionVec3Builder &&builder);
80
82 [[nodiscard]] eve::Result<void> insert(float atSeconds, MotionBuilder &&builder);
84 [[nodiscard]] eve::Result<void> insert(float atSeconds, MotionVec2Builder &&builder);
86 [[nodiscard]] eve::Result<void> insert(float atSeconds, MotionVec3Builder &&builder);
87
89 [[nodiscard]] eve::Result<void> appendInterval(float seconds);
90
92 [[nodiscard]] float cursor() const noexcept { return cursor_; }
94 [[nodiscard]] float duration() const noexcept { return duration_; }
96 [[nodiscard]] int itemCount() const noexcept { return static_cast<int>(items_.size()); }
97
100
101private:
102 enum class Kind : std::uint8_t { Float, Vec2, Vec3 };
103
104 struct Item {
105 Kind kind = Kind::Float;
106 float start = 0.f;
107 MotionRuntime::FloatDesc floatDesc{};
108 MotionRuntime::Vec2Desc vec2Desc{};
109 MotionRuntime::Vec3Desc vec3Desc{};
110 };
111
112 [[nodiscard]] static eve::Result<float> spanOf(float delay, float duration, int loops);
113 [[nodiscard]] eve::Result<void> schedule(float start, float span, Item item);
114 [[nodiscard]] eve::Result<void> appendAtCursor(Item item, float delay, float duration, int loops);
115 [[nodiscard]] eve::Result<void> joinAtLast(Item item, float delay, float duration, int loops);
116 [[nodiscard]] eve::Result<void> insertAt(float at, Item item, float delay, float duration, int loops);
117
118 MotionRuntime &runtime_;
119 std::vector<Item> items_;
120 float cursor_ = 0.f;
121 float duration_ = 0.f;
122 float lastAppendStart_ = 0.f;
123 bool hasAppend_ = false;
124};
125
126} // namespace eve::animation
Duration start
float duration
#define EVENGINE_API_WORLD
Definition Export.h:109
TokenKind kind
Fluent LitMotion-style builder that commits into MotionRuntime.
Dense motion storage advanced by Animation::advance(SimulationStep).
LitMotion-style typed motion handles, values, and sink interfaces.
std::weak_ptr< Run > run
Definition OnnxGpgpu.cpp:25
Move-only, checked operation results for the common layer.
std::vector< ecs::EntityHandle > schedule
The round's activation queue, resolved against the target battle.
int children
Definition TreeMesh.cpp:295
uint32_t index
std::size_t at
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Configure then bind/run a float motion into a MotionRuntime.
Owns typed motion slots and applies SimulationStep updates.
Playback handle for a sequence's child motions.
MotionSequenceHandle()=default
Motion sequence handle.
Schedule unspawned builders onto a shared MotionRuntime timeline.
float duration() const noexcept
Duration.
int itemCount() const noexcept
Item count.
float cursor() const noexcept
Cursor.
enum EVENGINE_API_FOUNDATION Float
OT_FLOAT.
Definition Runtime.h:118
Generation-checked slot identity for a live motion.
Definition MotionTypes.h:20