载入中...
搜索中...
未找到
Animation.cpp
浏览该文件的文档.
11#include "animation/AnimTrail.h"
19#include "animation/SpineAnim.h"
23
24#include "common/Exception.h"
25
26#include <algorithm>
27#include <simplesquirrel/simplesquirrel.hpp>
28
29namespace eve::animation {
30
31namespace {
32
33void copyFloatArray(ssq::Array arr, std::vector<float> &out) {
34 const size_t n = arr.size();
35 out.resize(n);
36 for (size_t i = 0; i < n; ++i) out[i] = arr.get<float>(i);
37}
38
39void bindPositionsFromArray(AnimLattice *self, ssq::Array arr) {
40 std::vector<float> pos;
41 copyFloatArray(arr, pos);
42 if (pos.size() % 3u != 0) {
43 throw Exception("AnimLattice.bindPositionsFromArray: array size must be a multiple of 3");
44 }
45 self->bindPositions(pos.data(), static_cast<int>(pos.size() / 3u));
46}
47
48bool updateDeformedPositionsFromArray(AnimLattice *self, ssq::Array arr) {
49 std::vector<float> pos;
50 copyFloatArray(arr, pos);
51 return self->updateDeformedPositions(pos);
52}
53
54bool updateDeformedNormalsFromArray(AnimLattice *self, ssq::Array posArr, ssq::Array nrmArr) {
55 std::vector<float> pos;
56 std::vector<float> nrm;
57 copyFloatArray(posArr, pos);
58 copyFloatArray(nrmArr, nrm);
59 return self->updateDeformedNormals(pos, nrm);
60}
61
62} // namespace
63
65
67 // Owned players may outlive the module if script GC still holds them; detach.
68 for (Tween *t : tweens_) {
69 if (t) t->setOwner(nullptr);
70 }
71 tweens_.clear();
72 for (SpriteAnim *a : spriteAnims_) {
73 if (a) a->setOwner(nullptr);
74 }
75 spriteAnims_.clear();
76 for (SpineAnim *a : spineAnims_) {
77 if (a) a->setOwner(nullptr);
78 }
79 spineAnims_.clear();
80}
81
82Tween *Animation::newTween(float duration) {
83 auto *t = new Tween(duration);
84 registerTween(t);
85 return t;
86}
87
89
90SpriteClip *Animation::newSpriteClip(const std::string &name) { return new SpriteClip(name); }
91
93 auto *a = new SpriteAnim();
94 registerSpriteAnim(a);
95 return a;
96}
97
99
101
105
107 auto *a = new SpineAnim(skeleton);
108 registerSpineAnim(a);
109 return a;
110}
111
113 auto *atlas = new SpineAtlas();
114 std::string err;
115 if (!atlas->loadFromFile(path, &err)) {
116 delete atlas;
117 return nullptr;
118 }
119 return atlas;
120}
121
123 auto *atlas = new SpineAtlas();
124 std::string err;
125 if (!atlas->loadFromText(text, &err)) {
126 delete atlas;
127 return nullptr;
128 }
129 return atlas;
130}
131
133 auto *data = new SpineSkeletonData();
134 std::string err;
135 if (!data->loadFromFile(path, &err)) {
136 delete data;
137 return nullptr;
138 }
139 return data;
140}
141
143 auto *data = new SpineSkeletonData();
144 std::string err;
145 if (!data->loadFromJson(json, &err)) {
146 delete data;
147 return nullptr;
148 }
149 return data;
150}
151
153
154AnimClip *Animation::newClip(const std::string &name) { return new AnimClip(name); }
155
156AnimPose *Animation::newPose(int boneCount) { return new AnimPose(boneCount); }
157
158AnimPlayer *Animation::newPlayer(AnimSkeleton *skeleton) { return new AnimPlayer(skeleton); }
159
163
165 return new MotionDatabase(skeleton);
166}
167
169 return new MotionMatcher(skeleton, database);
170}
171
172ControlAnim *Animation::newControlAnim(float frequencyHz, float dampingZeta, float response) {
173 return new ControlAnim(frequencyHz, dampingZeta, response);
174}
175
177
181
183 int animIndex) {
184 return AnimImporter::loadClipFromModel(model, skeleton, animIndex);
185}
186
188 AnimSkeleton *sk = nullptr;
189 AnimClip *clip = nullptr;
190 AnimImporter::importEvaFile(path, &sk, &clip);
191 delete clip;
192 return sk;
193}
194
195AnimClip *Animation::newClipFromEvaFile(const std::string &path) {
196 AnimSkeleton *sk = nullptr;
197 AnimClip *clip = nullptr;
198 AnimImporter::importEvaFile(path, &sk, &clip);
199 delete sk;
200 if (clip) AnimClipRegistry::registerPath(path, clip);
201 return clip;
202}
203
205 AnimSkeleton *skeleton) {
206 return AnimSkin::fromModel(model, meshIndex, skeleton);
207}
208
209AnimLattice *Animation::newLattice(int divX, int divY, int divZ) {
210 return new AnimLattice(divX, divY, divZ);
211}
212
214 int divX, int divY, int divZ) {
215 return AnimLattice::fromModel(model, meshIndex, divX, divY, divZ);
216}
217
218AnimTrail *Animation::newTrail(int capacity) { return new AnimTrail(capacity); }
219
220void Animation::registerTween(Tween *t) {
221 if (!t) return;
222 t->setOwner(this);
223 if (std::find(tweens_.begin(), tweens_.end(), t) == tweens_.end()) tweens_.push_back(t);
224}
225
226void Animation::unregisterTween(Tween *t) {
227 if (!t) return;
228 auto it = std::find(tweens_.begin(), tweens_.end(), t);
229 if (it != tweens_.end()) tweens_.erase(it);
230 if (t->owner() == this) t->setOwner(nullptr);
231}
232
233void Animation::registerSpriteAnim(SpriteAnim *a) {
234 if (!a) return;
235 a->setOwner(this);
236 if (std::find(spriteAnims_.begin(), spriteAnims_.end(), a) == spriteAnims_.end())
237 spriteAnims_.push_back(a);
238}
239
240void Animation::unregisterSpriteAnim(SpriteAnim *a) {
241 if (!a) return;
242 auto it = std::find(spriteAnims_.begin(), spriteAnims_.end(), a);
243 if (it != spriteAnims_.end()) spriteAnims_.erase(it);
244 if (a->owner() == this) a->setOwner(nullptr);
245}
246
247void Animation::registerSpineAnim(SpineAnim *a) {
248 if (!a) return;
249 a->setOwner(this);
250 if (std::find(spineAnims_.begin(), spineAnims_.end(), a) == spineAnims_.end())
251 spineAnims_.push_back(a);
252}
253
254void Animation::unregisterSpineAnim(SpineAnim *a) {
255 if (!a) return;
256 auto it = std::find(spineAnims_.begin(), spineAnims_.end(), a);
257 if (it != spineAnims_.end()) spineAnims_.erase(it);
258 if (a->owner() == this) a->setOwner(nullptr);
259}
260
261void Animation::update(float dt) {
262 // Copy pointer lists: destructors during update must not invalidate iteration.
263 std::vector<Tween *> tweenSnap = tweens_;
264 for (Tween *t : tweenSnap) {
265 if (!t) continue;
266 if (t->isActive()) t->update(dt);
267 }
268 std::vector<SpriteAnim *> spriteSnap = spriteAnims_;
269 for (SpriteAnim *a : spriteSnap) {
270 if (a && a->isPlaying()) a->update(dt);
271 }
272 std::vector<SpineAnim *> spineSnap = spineAnims_;
273 for (SpineAnim *a : spineSnap) {
274 if (a && a->isPlaying()) a->update(dt);
275 }
276}
277
279 int n = 0;
280 for (const Tween *t : tweens_) {
281 if (t && t->isActive()) ++n;
282 }
283 for (const SpriteAnim *a : spriteAnims_) {
284 if (a && a->isPlaying()) ++n;
285 }
286 for (const SpineAnim *a : spineAnims_) {
287 if (a && a->isPlaying()) ++n;
288 }
289 return n;
290}
291
293 auto it = tweens_.begin();
294 while (it != tweens_.end()) {
295 Tween *t = *it;
296 if (!t || t->isFinished() || t->isStopped()) {
297 if (t && t->owner() == this) t->setOwner(nullptr);
298 it = tweens_.erase(it);
299 } else {
300 ++it;
301 }
302 }
303}
304
306 for (Tween *t : tweens_) {
307 if (t && t->owner() == this) t->setOwner(nullptr);
308 }
309 tweens_.clear();
310}
311
312void Animation::expose(ssq::Table &table) {
313 auto cls = table.addClass(name, Animation::create, false);
314 expose(cls);
315
316 auto tw = table.addClass<Tween>(
317 "Tween", std::function<Tween *()>([]() -> Tween * { return nullptr; }), true);
318 tw.addFunc("setFrom", &Tween::setFrom);
319 tw.addFunc("setTo", &Tween::setTo);
320 tw.addFunc("setDelta", &Tween::setDelta);
321 tw.addFunc("setFromAngle", &Tween::setFromAngle);
322 tw.addFunc("setToAngle", &Tween::setToAngle);
323 tw.addFunc("setDeltaAngle", &Tween::setDeltaAngle);
324 tw.addFunc("has", &Tween::has);
325 tw.addFunc("get", &Tween::get);
326 tw.addFunc("getFrom", &Tween::getFrom);
327 tw.addFunc("getTo", &Tween::getTo);
328 tw.addFunc("getDelta", &Tween::getDelta);
329 tw.addFunc("setDuration", &Tween::setDuration);
330 tw.addFunc("getDuration", &Tween::getDuration);
331 tw.addFunc("setDelay", &Tween::setDelay);
332 tw.addFunc("getDelay", &Tween::getDelay);
333 tw.addFunc("setEase", &Tween::setEase);
334 tw.addFunc("getEase", &Tween::getEase);
335 tw.addFunc("setRepeat", &Tween::setRepeat);
336 tw.addFunc("getRepeat", &Tween::getRepeat);
337 tw.addFunc("setYoyo", &Tween::setYoyo);
338 tw.addFunc("getYoyo", &Tween::getYoyo);
339 tw.addFunc("start", &Tween::start);
340 tw.addFunc("pause", &Tween::pause);
341 tw.addFunc("resume", &Tween::resume);
342 tw.addFunc("stop", &Tween::stop);
343 tw.addFunc("reset", &Tween::reset);
344 tw.addFunc("isRunning", &Tween::isRunning);
345 tw.addFunc("isPaused", &Tween::isPaused);
346 tw.addFunc("isFinished", &Tween::isFinished);
347 tw.addFunc("isStopped", &Tween::isStopped);
348 tw.addFunc("isDelayed", &Tween::isDelayed);
349 tw.addFunc("isActive", &Tween::isActive);
350 tw.addFunc("getElapsed", &Tween::getElapsed);
351 tw.addFunc("getProgress", &Tween::getProgress);
352 tw.addFunc("getEasedProgress", &Tween::getEasedProgress);
353 tw.addFunc("update", &Tween::update);
354 tw.addFunc("evaluate", &Tween::evaluate);
355 tw.addFunc("getPropertyCount", &Tween::getPropertyCount);
356 tw.addFunc("getPropertyName", &Tween::getPropertyName);
357
358 auto sk = table.addClass<AnimSkeleton>(
359 "AnimSkeleton", std::function<AnimSkeleton *()>([]() -> AnimSkeleton * { return nullptr; }),
360 true);
361 sk.addFunc("addBone", &AnimSkeleton::addBone);
362 sk.addFunc("getBoneCount", &AnimSkeleton::getBoneCount);
363 sk.addFunc("getBoneName", &AnimSkeleton::getBoneName);
364 sk.addFunc("findBone", &AnimSkeleton::findBone);
365 sk.addFunc("getParent", &AnimSkeleton::getParent);
366 sk.addFunc("setBindPosition", &AnimSkeleton::setBindPosition);
367 sk.addFunc("setBindRotation", &AnimSkeleton::setBindRotation);
368 sk.addFunc("setBindScale", &AnimSkeleton::setBindScale);
369 sk.addFunc("getBindPositionX", &AnimSkeleton::getBindPositionX);
370 sk.addFunc("getBindPositionY", &AnimSkeleton::getBindPositionY);
371 sk.addFunc("getBindPositionZ", &AnimSkeleton::getBindPositionZ);
372 sk.addFunc("getBindRotationX", &AnimSkeleton::getBindRotationX);
373 sk.addFunc("getBindRotationY", &AnimSkeleton::getBindRotationY);
374 sk.addFunc("getBindRotationZ", &AnimSkeleton::getBindRotationZ);
375 sk.addFunc("getBindRotationW", &AnimSkeleton::getBindRotationW);
376 sk.addFunc("getBindScaleX", &AnimSkeleton::getBindScaleX);
377 sk.addFunc("getBindScaleY", &AnimSkeleton::getBindScaleY);
378 sk.addFunc("getBindScaleZ", &AnimSkeleton::getBindScaleZ);
379 sk.addFunc("applyBindPose", &AnimSkeleton::applyBindPose);
380
381 auto clip = table.addClass<AnimClip>(
382 "AnimClip", std::function<AnimClip *()>([]() -> AnimClip * { return nullptr; }), true);
383 clip.addFunc("setName", &AnimClip::setName);
384 clip.addFunc("getName", &AnimClip::getName);
385 clip.addFunc("setDuration", &AnimClip::setDuration);
386 clip.addFunc("getDuration", &AnimClip::getDuration);
387 clip.addFunc("setLoop", &AnimClip::setLoop);
388 clip.addFunc("getLoop", &AnimClip::getLoop);
389 clip.addFunc("setSampleRate", &AnimClip::setSampleRate);
390 clip.addFunc("getSampleRate", &AnimClip::getSampleRate);
391 clip.addFunc("addPositionKey", &AnimClip::addPositionKey);
392 clip.addFunc("addRotationKey", &AnimClip::addRotationKey);
393 clip.addFunc("addScaleKey", &AnimClip::addScaleKey);
394 clip.addFunc("getPositionKeyCount", &AnimClip::getPositionKeyCount);
395 clip.addFunc("getRotationKeyCount", &AnimClip::getRotationKeyCount);
396 clip.addFunc("getScaleKeyCount", &AnimClip::getScaleKeyCount);
397 clip.addFunc("applyPlanarRootMotion", &AnimClip::applyPlanarRootMotion);
398 clip.addFunc("sample", &AnimClip::sample);
399 clip.addFunc("wrapTime", &AnimClip::wrapTime);
400
401 auto pose = table.addClass<AnimPose>(
402 "AnimPose", std::function<AnimPose *()>([]() -> AnimPose * { return nullptr; }), true);
403 pose.addFunc("resize", &AnimPose::resize);
404 pose.addFunc("getBoneCount", &AnimPose::getBoneCount);
405 pose.addFunc("copyFrom", &AnimPose::copyFrom);
406 pose.addFunc("blendFrom", &AnimPose::blendFrom);
407 pose.addFunc("setLocalPosition", &AnimPose::setLocalPosition);
408 pose.addFunc("setLocalRotation", &AnimPose::setLocalRotation);
409 pose.addFunc("setLocalScale", &AnimPose::setLocalScale);
410 pose.addFunc("getLocalPositionX", &AnimPose::getLocalPositionX);
411 pose.addFunc("getLocalPositionY", &AnimPose::getLocalPositionY);
412 pose.addFunc("getLocalPositionZ", &AnimPose::getLocalPositionZ);
413 pose.addFunc("getLocalRotationX", &AnimPose::getLocalRotationX);
414 pose.addFunc("getLocalRotationY", &AnimPose::getLocalRotationY);
415 pose.addFunc("getLocalRotationZ", &AnimPose::getLocalRotationZ);
416 pose.addFunc("getLocalRotationW", &AnimPose::getLocalRotationW);
417 pose.addFunc("getLocalScaleX", &AnimPose::getLocalScaleX);
418 pose.addFunc("getLocalScaleY", &AnimPose::getLocalScaleY);
419 pose.addFunc("getLocalScaleZ", &AnimPose::getLocalScaleZ);
420 pose.addFunc("computeWorld", &AnimPose::computeWorld);
421 pose.addFunc("getWorldPositionX", &AnimPose::getWorldPositionX);
422 pose.addFunc("getWorldPositionY", &AnimPose::getWorldPositionY);
423 pose.addFunc("getWorldPositionZ", &AnimPose::getWorldPositionZ);
424 pose.addFunc("getWorldRotationX", &AnimPose::getWorldRotationX);
425 pose.addFunc("getWorldRotationY", &AnimPose::getWorldRotationY);
426 pose.addFunc("getWorldRotationZ", &AnimPose::getWorldRotationZ);
427 pose.addFunc("getWorldRotationW", &AnimPose::getWorldRotationW);
428 pose.addFunc("getWorldMatrixElement", &AnimPose::getWorldMatrixElement);
429
430 auto skin = table.addClass<AnimSkin>(
431 "AnimSkin", std::function<AnimSkin *()>([]() -> AnimSkin * { return nullptr; }), true);
432 skin.addFunc("getVertexCount", &AnimSkin::getVertexCount);
433 skin.addFunc("getBoneCount", &AnimSkin::getBoneCount);
434 skin.addFunc("getInfluenceCount", &AnimSkin::getInfluenceCount);
435 skin.addFunc("getSkeletonBone", &AnimSkin::getSkeletonBone);
436 skin.addFunc("getSkinBoneName", &AnimSkin::getSkinBoneName);
437 skin.addFunc("getInverseBindElement", &AnimSkin::getInverseBindElement);
438 skin.addFunc("getBindPositionX", &AnimSkin::getBindPositionX);
439 skin.addFunc("getBindPositionY", &AnimSkin::getBindPositionY);
440 skin.addFunc("getBindPositionZ", &AnimSkin::getBindPositionZ);
441 skin.addFunc("getVertexBone", &AnimSkin::getVertexBone);
442 skin.addFunc("getVertexWeight", &AnimSkin::getVertexWeight);
443 skin.addFunc("updateSkinnedPositions", &AnimSkin::updateSkinnedPositions);
444 skin.addFunc("hasSkinnedPositions", &AnimSkin::hasSkinnedPositions);
445 skin.addFunc("getSkinnedPositionX", &AnimSkin::getSkinnedPositionX);
446 skin.addFunc("getSkinnedPositionY", &AnimSkin::getSkinnedPositionY);
447 skin.addFunc("getSkinnedPositionZ", &AnimSkin::getSkinnedPositionZ);
448
449 auto lattice = table.addClass<AnimLattice>(
450 "AnimLattice", std::function<AnimLattice *()>([]() -> AnimLattice * { return nullptr; }),
451 true);
452 lattice.addFunc("setDivisions", &AnimLattice::setDivisions);
453 lattice.addFunc("getDivisionsX", &AnimLattice::getDivisionsX);
454 lattice.addFunc("getDivisionsY", &AnimLattice::getDivisionsY);
455 lattice.addFunc("getDivisionsZ", &AnimLattice::getDivisionsZ);
456 lattice.addFunc("setSize", &AnimLattice::setSize);
457 lattice.addFunc("getSizeX", &AnimLattice::getSizeX);
458 lattice.addFunc("getSizeY", &AnimLattice::getSizeY);
459 lattice.addFunc("getSizeZ", &AnimLattice::getSizeZ);
460 lattice.addFunc("setOrigin", &AnimLattice::setOrigin);
461 lattice.addFunc("getOriginX", &AnimLattice::getOriginX);
462 lattice.addFunc("getOriginY", &AnimLattice::getOriginY);
463 lattice.addFunc("getOriginZ", &AnimLattice::getOriginZ);
464 lattice.addFunc("setClamp", &AnimLattice::setClamp);
465 lattice.addFunc("getClamp", &AnimLattice::getClamp);
466 lattice.addFunc("getPointCount", &AnimLattice::getPointCount);
467 lattice.addFunc("setPointScale", &AnimLattice::setPointScale);
468 lattice.addFunc("setPointOffset", &AnimLattice::setPointOffset);
469 lattice.addFunc("setScale", &AnimLattice::setScale);
470 lattice.addFunc("reset", &AnimLattice::reset);
471 lattice.addFunc("getPointScaleX", &AnimLattice::getPointScaleX);
472 lattice.addFunc("getPointScaleY", &AnimLattice::getPointScaleY);
473 lattice.addFunc("getPointScaleZ", &AnimLattice::getPointScaleZ);
474 lattice.addFunc("getPointOffsetX", &AnimLattice::getPointOffsetX);
475 lattice.addFunc("getPointOffsetY", &AnimLattice::getPointOffsetY);
476 lattice.addFunc("getPointOffsetZ", &AnimLattice::getPointOffsetZ);
477 lattice.addFunc("bindModel", &AnimLattice::bindModel);
478 lattice.addFunc("bindPositionsFromArray",
479 std::function<void(AnimLattice *, ssq::Array)>(bindPositionsFromArray));
480 lattice.addFunc("clearBind", &AnimLattice::clearBind);
481 lattice.addFunc("getVertexCount", &AnimLattice::getVertexCount);
482 lattice.addFunc("getBindPositionX", &AnimLattice::getBindPositionX);
483 lattice.addFunc("getBindPositionY", &AnimLattice::getBindPositionY);
484 lattice.addFunc("getBindPositionZ", &AnimLattice::getBindPositionZ);
485 lattice.addFunc(
486 "updateDeformedPositions",
487 static_cast<bool (AnimLattice::*)()>(&AnimLattice::updateDeformedPositions));
488 lattice.addFunc(
489 "updateDeformedPositionsFromArray",
490 std::function<bool(AnimLattice *, ssq::Array)>(updateDeformedPositionsFromArray));
491 lattice.addFunc(
492 "updateDeformedNormalsFromArray",
493 std::function<bool(AnimLattice *, ssq::Array, ssq::Array)>(
494 updateDeformedNormalsFromArray));
495 lattice.addFunc("hasDeformedPositions", &AnimLattice::hasDeformedPositions);
496 lattice.addFunc("hasDeformedNormals", &AnimLattice::hasDeformedNormals);
497 lattice.addFunc("getDeformedPositionX", &AnimLattice::getDeformedPositionX);
498 lattice.addFunc("getDeformedPositionY", &AnimLattice::getDeformedPositionY);
499 lattice.addFunc("getDeformedPositionZ", &AnimLattice::getDeformedPositionZ);
500 lattice.addFunc("getDeformedPositions", &AnimLattice::getDeformedPositions);
501 lattice.addFunc("getDeformedNormals", &AnimLattice::getDeformedNormals);
502
503 auto player = table.addClass<AnimPlayer>(
504 "AnimPlayer", std::function<AnimPlayer *()>([]() -> AnimPlayer * { return nullptr; }),
505 true);
506 player.addFunc("play", &AnimPlayer::play);
507 player.addFunc("crossFade", &AnimPlayer::crossFade);
508 player.addFunc("stop", &AnimPlayer::stop);
509 player.addFunc("pause", &AnimPlayer::pause);
510 player.addFunc("resume", &AnimPlayer::resume);
511 player.addFunc("setSpeed", &AnimPlayer::setSpeed);
512 player.addFunc("getSpeed", &AnimPlayer::getSpeed);
513 player.addFunc("setTime", &AnimPlayer::setTime);
514 player.addFunc("getTime", &AnimPlayer::getTime);
515 player.addFunc("setLoop", &AnimPlayer::setLoop);
516 player.addFunc("getLoop", &AnimPlayer::getLoop);
517 player.addFunc("isPlaying", &AnimPlayer::isPlaying);
518 player.addFunc("isPaused", &AnimPlayer::isPaused);
519 player.addFunc("getPose", &AnimPlayer::getPose);
520 player.addFunc("update", &AnimPlayer::update);
521
522 auto sm = table.addClass<AnimStateMachine>(
523 "AnimStateMachine",
524 std::function<AnimStateMachine *()>([]() -> AnimStateMachine * { return nullptr; }), true);
525 sm.addFunc("addState", &AnimStateMachine::addState);
526 sm.addFunc("setEntry", &AnimStateMachine::setEntry);
527 sm.addFunc("hasState", &AnimStateMachine::hasState);
528 sm.addFunc("getCurrentState", &AnimStateMachine::getCurrentState);
529 sm.addFunc("getStateCount", &AnimStateMachine::getStateCount);
530 sm.addFunc("addTransition", &AnimStateMachine::addTransition);
531 sm.addFunc("addFloatCondition", &AnimStateMachine::addFloatCondition);
532 sm.addFunc("addBoolCondition", &AnimStateMachine::addBoolCondition);
533 sm.addFunc("addTriggerCondition", &AnimStateMachine::addTriggerCondition);
534 sm.addFunc("setExitTime", &AnimStateMachine::setExitTime);
535 sm.addFunc("setHasExitTime", &AnimStateMachine::setHasExitTime);
536 sm.addFunc("setFloat", &AnimStateMachine::setFloat);
537 sm.addFunc("getFloat", &AnimStateMachine::getFloat);
538 sm.addFunc("setBool", &AnimStateMachine::setBool);
539 sm.addFunc("getBool", &AnimStateMachine::getBool);
540 sm.addFunc("setTrigger", &AnimStateMachine::setTrigger);
541 sm.addFunc("resetTrigger", &AnimStateMachine::resetTrigger);
542 sm.addFunc("getPose", &AnimStateMachine::getPose);
543 sm.addFunc("getStateTime", &AnimStateMachine::getStateTime);
544 sm.addFunc("isBlending", &AnimStateMachine::isBlending);
545 sm.addFunc("update", &AnimStateMachine::update);
546
547 auto db = table.addClass<MotionDatabase>(
548 "MotionDatabase",
549 std::function<MotionDatabase *()>([]() -> MotionDatabase * { return nullptr; }), true);
550 db.addFunc("addFeatureBone", &MotionDatabase::addFeatureBone);
551 db.addFunc("addFeatureBoneByName", &MotionDatabase::addFeatureBoneByName);
552 db.addFunc("setRootBone", &MotionDatabase::setRootBone);
553 db.addFunc("getRootBone", &MotionDatabase::getRootBone);
554 db.addFunc("setRootBoneByName", &MotionDatabase::setRootBoneByName);
555 db.addFunc("addClip", &MotionDatabase::addClip);
556 db.addFunc("getClipCount", &MotionDatabase::getClipCount);
557 db.addFunc("bake", &MotionDatabase::bake);
558 db.addFunc("isBaked", &MotionDatabase::isBaked);
559 db.addFunc("getFrameCount", &MotionDatabase::getFrameCount);
560 db.addFunc("getFeatureSize", &MotionDatabase::getFeatureSize);
561 db.addFunc("getFrameTime", &MotionDatabase::getFrameTime);
562 db.addFunc("getFrameClipIndex", &MotionDatabase::getFrameClipIndex);
563 db.addFunc("getFeatureBoneCount", &MotionDatabase::getFeatureBoneCount);
564 db.addFunc("getFeatureBone", &MotionDatabase::getFeatureBone);
565
566 auto mm = table.addClass<MotionMatcher>(
567 "MotionMatcher",
568 std::function<MotionMatcher *()>([]() -> MotionMatcher * { return nullptr; }), true);
569 mm.addFunc("setDesiredVelocity", &MotionMatcher::setDesiredVelocity);
570 mm.addFunc("getDesiredVelocityX", &MotionMatcher::getDesiredVelocityX);
571 mm.addFunc("getDesiredVelocityZ", &MotionMatcher::getDesiredVelocityZ);
572 mm.addFunc("setDesiredYaw", &MotionMatcher::setDesiredYaw);
573 mm.addFunc("getDesiredYaw", &MotionMatcher::getDesiredYaw);
574 mm.addFunc("setSearchInterval", &MotionMatcher::setSearchInterval);
575 mm.addFunc("getSearchInterval", &MotionMatcher::getSearchInterval);
576 mm.addFunc("setBlendTime", &MotionMatcher::setBlendTime);
577 mm.addFunc("getBlendTime", &MotionMatcher::getBlendTime);
578 mm.addFunc("setTrajectoryWeight", &MotionMatcher::setTrajectoryWeight);
579 mm.addFunc("getTrajectoryWeight", &MotionMatcher::getTrajectoryWeight);
580 mm.addFunc("setPoseWeight", &MotionMatcher::setPoseWeight);
581 mm.addFunc("getPoseWeight", &MotionMatcher::getPoseWeight);
582 mm.addFunc("setVelocityWeight", &MotionMatcher::setVelocityWeight);
583 mm.addFunc("getVelocityWeight", &MotionMatcher::getVelocityWeight);
584 mm.addFunc("setIgnoreRadius", &MotionMatcher::setIgnoreRadius);
585 mm.addFunc("getIgnoreRadius", &MotionMatcher::getIgnoreRadius);
586 mm.addFunc("getMatchedFrame", &MotionMatcher::getMatchedFrame);
587 mm.addFunc("getMatchedClipIndex", &MotionMatcher::getMatchedClipIndex);
588 mm.addFunc("getMatchedTime", &MotionMatcher::getMatchedTime);
589 mm.addFunc("getLastSearchCost", &MotionMatcher::getLastSearchCost);
590 mm.addFunc("getPose", &MotionMatcher::getPose);
591 mm.addFunc("search", &MotionMatcher::search);
592 mm.addFunc("update", &MotionMatcher::update);
593
594 auto ca = table.addClass<ControlAnim>(
595 "ControlAnim", std::function<ControlAnim *()>([]() -> ControlAnim * { return nullptr; }),
596 true);
597 ca.addFunc("setFrequency", &ControlAnim::setFrequency);
598 ca.addFunc("getFrequency", &ControlAnim::getFrequency);
599 ca.addFunc("setDamping", &ControlAnim::setDamping);
600 ca.addFunc("getDamping", &ControlAnim::getDamping);
601 ca.addFunc("setResponse", &ControlAnim::setResponse);
602 ca.addFunc("getResponse", &ControlAnim::getResponse);
603 ca.addFunc("setIntegrator", &ControlAnim::setIntegrator);
604 ca.addFunc("getIntegrator", &ControlAnim::getIntegrator);
605 ca.addFunc("set", &ControlAnim::set);
606 ca.addFunc("setTarget", &ControlAnim::setTarget);
607 ca.addFunc("setTargetVelocity", &ControlAnim::setTargetVelocity);
608 ca.addFunc("impulse", &ControlAnim::impulse);
609 ca.addFunc("has", &ControlAnim::has);
610 ca.addFunc("get", &ControlAnim::get);
611 ca.addFunc("getVelocity", &ControlAnim::getVelocity);
612 ca.addFunc("getTarget", &ControlAnim::getTarget);
613 ca.addFunc("clear", &ControlAnim::clear);
614 ca.addFunc("remove", &ControlAnim::remove);
615 ca.addFunc("getPropertyCount", &ControlAnim::getPropertyCount);
616 ca.addFunc("getPropertyName", &ControlAnim::getPropertyName);
617 ca.addFunc("update", &ControlAnim::update);
618
619 auto cp = table.addClass<ControlPose>(
620 "ControlPose", std::function<ControlPose *()>([]() -> ControlPose * { return nullptr; }),
621 true);
622 cp.addFunc("setFrequency", &ControlPose::setFrequency);
623 cp.addFunc("getFrequency", &ControlPose::getFrequency);
624 cp.addFunc("setDamping", &ControlPose::setDamping);
625 cp.addFunc("getDamping", &ControlPose::getDamping);
626 cp.addFunc("setResponse", &ControlPose::setResponse);
627 cp.addFunc("getResponse", &ControlPose::getResponse);
628 cp.addFunc("setIntegrator", &ControlPose::setIntegrator);
629 cp.addFunc("getIntegrator", &ControlPose::getIntegrator);
630 cp.addFunc("setBoneWeight", &ControlPose::setBoneWeight);
631 cp.addFunc("getBoneWeight", &ControlPose::getBoneWeight);
632 cp.addFunc("setTargetPose", &ControlPose::setTargetPose);
633 cp.addFunc("snapToTarget", &ControlPose::snapToTarget);
634 cp.addFunc("getPose", &ControlPose::getPose);
635 cp.addFunc("getTargetPose", &ControlPose::getTargetPose);
636 cp.addFunc("update", &ControlPose::update);
637
638 auto trail = table.addClass<AnimTrail>(
639 "AnimTrail", std::function<AnimTrail *()>([]() -> AnimTrail * { return nullptr; }), true);
640 trail.addFunc("setCapacity", &AnimTrail::setCapacity);
641 trail.addFunc("getCapacity", &AnimTrail::getCapacity);
642 trail.addFunc("setDuration", &AnimTrail::setDuration);
643 trail.addFunc("getDuration", &AnimTrail::getDuration);
644 trail.addFunc("setMinDistance", &AnimTrail::setMinDistance);
645 trail.addFunc("getMinDistance", &AnimTrail::getMinDistance);
646 trail.addFunc("setWidth", &AnimTrail::setWidth);
647 trail.addFunc("getWidth", &AnimTrail::getWidth);
648 trail.addFunc("setColor", &AnimTrail::setColor);
649 trail.addFunc("getColorR", &AnimTrail::getColorR);
650 trail.addFunc("getColorG", &AnimTrail::getColorG);
651 trail.addFunc("getColorB", &AnimTrail::getColorB);
652 trail.addFunc("getColorA", &AnimTrail::getColorA);
653 trail.addFunc("setFade", &AnimTrail::setFade);
654 trail.addFunc("getFade", &AnimTrail::getFade);
655 trail.addFunc("setStyle", &AnimTrail::setStyle);
656 trail.addFunc("getStyle", &AnimTrail::getStyle);
657 trail.addFunc("setDrawScale", &AnimTrail::setDrawScale);
658 trail.addFunc("getDrawScaleX", &AnimTrail::getDrawScaleX);
659 trail.addFunc("getDrawScaleY", &AnimTrail::getDrawScaleY);
660 trail.addFunc("setDrawOffset", &AnimTrail::setDrawOffset);
661 trail.addFunc("getDrawOffsetX", &AnimTrail::getDrawOffsetX);
662 trail.addFunc("getDrawOffsetY", &AnimTrail::getDrawOffsetY);
663 trail.addFunc("addPoint", &AnimTrail::addPoint);
664 trail.addFunc("addPoint3", &AnimTrail::addPoint3);
665 trail.addFunc("sampleBone", &AnimTrail::sampleBone);
666 trail.addFunc("sampleBoneOffset", &AnimTrail::sampleBoneOffset);
667 trail.addFunc("clear", &AnimTrail::clear);
668 trail.addFunc("update", &AnimTrail::update);
669 trail.addFunc("getPointCount", &AnimTrail::getPointCount);
670 trail.addFunc("getPointX", &AnimTrail::getPointX);
671 trail.addFunc("getPointY", &AnimTrail::getPointY);
672 trail.addFunc("getPointZ", &AnimTrail::getPointZ);
673 trail.addFunc("getPointAge", &AnimTrail::getPointAge);
674 trail.addFunc("getPointAlpha", &AnimTrail::getPointAlpha);
675 trail.addFunc("draw", &AnimTrail::draw);
676
677 auto sheet = table.addClass<SpriteSheet>(
678 "SpriteSheet", std::function<SpriteSheet *()>([]() -> SpriteSheet * { return nullptr; }),
679 true);
680 sheet.addFunc("addFrame", &SpriteSheet::addFrame);
681 sheet.addFunc("setGrid", &SpriteSheet::setGrid);
682 sheet.addFunc("clear", &SpriteSheet::clear);
683 sheet.addFunc("getFrameCount", &SpriteSheet::getFrameCount);
684 sheet.addFunc("findFrame", &SpriteSheet::findFrame);
685 sheet.addFunc("getFrameName", &SpriteSheet::getFrameName);
686 sheet.addFunc("getFrameX", &SpriteSheet::getFrameX);
687 sheet.addFunc("getFrameY", &SpriteSheet::getFrameY);
688 sheet.addFunc("getFrameWidth", &SpriteSheet::getFrameWidth);
689 sheet.addFunc("getFrameHeight", &SpriteSheet::getFrameHeight);
690 sheet.addFunc("applyToQuad", &SpriteSheet::applyToQuad);
691
692 auto sclip = table.addClass<SpriteClip>(
693 "SpriteClip", std::function<SpriteClip *()>([]() -> SpriteClip * { return nullptr; }),
694 true);
695 sclip.addFunc("setName", &SpriteClip::setName);
696 sclip.addFunc("getName", &SpriteClip::getName);
697 sclip.addFunc("setLoop", &SpriteClip::setLoop);
698 sclip.addFunc("getLoop", &SpriteClip::getLoop);
699 sclip.addFunc("addFrame", &SpriteClip::addFrame);
700 sclip.addFunc("addFrameByName", &SpriteClip::addFrameByName);
701 sclip.addFunc("clear", &SpriteClip::clear);
702 sclip.addFunc("getFrameCount", &SpriteClip::getFrameCount);
703 sclip.addFunc("getSheetFrame", &SpriteClip::getSheetFrame);
704 sclip.addFunc("getFrameDuration", &SpriteClip::getFrameDuration);
705 sclip.addFunc("getDuration", &SpriteClip::getDuration);
706 sclip.addFunc("frameAtTime", &SpriteClip::frameAtTime);
707 sclip.addFunc("wrapTime", &SpriteClip::wrapTime);
708
709 auto sanim = table.addClass<SpriteAnim>(
710 "SpriteAnim", std::function<SpriteAnim *()>([]() -> SpriteAnim * { return nullptr; }),
711 true);
712 sanim.addFunc("setSheet", &SpriteAnim::setSheet);
713 sanim.addFunc("getSheet", &SpriteAnim::getSheet);
714 sanim.addFunc("play", &SpriteAnim::play);
715 sanim.addFunc("stop", &SpriteAnim::stop);
716 sanim.addFunc("pause", &SpriteAnim::pause);
717 sanim.addFunc("resume", &SpriteAnim::resume);
718 sanim.addFunc("setSpeed", &SpriteAnim::setSpeed);
719 sanim.addFunc("getSpeed", &SpriteAnim::getSpeed);
720 sanim.addFunc("setTime", &SpriteAnim::setTime);
721 sanim.addFunc("getTime", &SpriteAnim::getTime);
722 sanim.addFunc("setLoop", &SpriteAnim::setLoop);
723 sanim.addFunc("getLoop", &SpriteAnim::getLoop);
724 sanim.addFunc("isPlaying", &SpriteAnim::isPlaying);
725 sanim.addFunc("isPaused", &SpriteAnim::isPaused);
726 sanim.addFunc("isFinished", &SpriteAnim::isFinished);
727 sanim.addFunc("getClip", &SpriteAnim::getClip);
728 sanim.addFunc("getClipFrame", &SpriteAnim::getClipFrame);
729 sanim.addFunc("getSheetFrame", &SpriteAnim::getSheetFrame);
730 sanim.addFunc("bindQuad", &SpriteAnim::bindQuad);
731 sanim.addFunc("unbindQuad", &SpriteAnim::unbindQuad);
732 sanim.addFunc("getBoundQuad", &SpriteAnim::getBoundQuad);
733 sanim.addFunc("applyToQuad", &SpriteAnim::applyToQuad);
734 sanim.addFunc("update", &SpriteAnim::update);
735
736 auto satlas = table.addClass<SpineAtlas>(
737 "SpineAtlas", std::function<SpineAtlas *()>([]() -> SpineAtlas * { return nullptr; }),
738 true);
739 satlas.addFunc("loadFromText",
740 [](SpineAtlas *self, const std::string &text) -> bool {
741 return self->loadFromText(text, nullptr);
742 });
743 satlas.addFunc("loadFromFile",
744 [](SpineAtlas *self, const std::string &path) -> bool {
745 return self->loadFromFile(path, nullptr);
746 });
747 satlas.addFunc("clear", &SpineAtlas::clear);
748 satlas.addFunc("getPageCount", &SpineAtlas::getPageCount);
749 satlas.addFunc("getPageName", &SpineAtlas::getPageName);
750 satlas.addFunc("getPageWidth", &SpineAtlas::getPageWidth);
751 satlas.addFunc("getPageHeight", &SpineAtlas::getPageHeight);
752 satlas.addFunc("getRegionCount", &SpineAtlas::getRegionCount);
753 satlas.addFunc("findRegion", &SpineAtlas::findRegion);
754 satlas.addFunc("getRegionName", &SpineAtlas::getRegionName);
755 satlas.addFunc("getRegionPage", &SpineAtlas::getRegionPage);
756 satlas.addFunc("getRegionX", &SpineAtlas::getRegionX);
757 satlas.addFunc("getRegionY", &SpineAtlas::getRegionY);
758 satlas.addFunc("getRegionWidth", &SpineAtlas::getRegionWidth);
759 satlas.addFunc("getRegionHeight", &SpineAtlas::getRegionHeight);
760 satlas.addFunc("getRegionRotate", &SpineAtlas::getRegionRotate);
761
762 auto sdata = table.addClass<SpineSkeletonData>(
763 "SpineSkeletonData",
764 std::function<SpineSkeletonData *()>([]() -> SpineSkeletonData * { return nullptr; }),
765 true);
766 sdata.addFunc("loadFromJson",
767 [](SpineSkeletonData *self, const std::string &json) -> bool {
768 return self->loadFromJson(json, nullptr);
769 });
770 sdata.addFunc("loadFromFile",
771 [](SpineSkeletonData *self, const std::string &path) -> bool {
772 return self->loadFromFile(path, nullptr);
773 });
774 sdata.addFunc("clear", &SpineSkeletonData::clear);
775 sdata.addFunc("getSpineVersion", &SpineSkeletonData::getSpineVersion);
776 sdata.addFunc("getBoneCount", &SpineSkeletonData::getBoneCount);
777 sdata.addFunc("findBone", &SpineSkeletonData::findBone);
778 sdata.addFunc("getBoneName", &SpineSkeletonData::getBoneName);
779 sdata.addFunc("getBoneParent", &SpineSkeletonData::getBoneParent);
780 sdata.addFunc("getSlotCount", &SpineSkeletonData::getSlotCount);
781 sdata.addFunc("findSlot", &SpineSkeletonData::findSlot);
782 sdata.addFunc("getSlotName", &SpineSkeletonData::getSlotName);
783 sdata.addFunc("getSlotBone", &SpineSkeletonData::getSlotBone);
784 sdata.addFunc("getSkinCount", &SpineSkeletonData::getSkinCount);
785 sdata.addFunc("findSkin", &SpineSkeletonData::findSkin);
786 sdata.addFunc("getSkinName", &SpineSkeletonData::getSkinName);
787 sdata.addFunc("getAnimationCount", &SpineSkeletonData::getAnimationCount);
788 sdata.addFunc("findAnimation", &SpineSkeletonData::findAnimation);
789 sdata.addFunc("getAnimationName", &SpineSkeletonData::getAnimationName);
790 sdata.addFunc("getAnimationDuration", &SpineSkeletonData::getAnimationDuration);
791
792 auto ssk = table.addClass<SpineSkeleton>(
793 "SpineSkeleton",
794 std::function<SpineSkeleton *()>([]() -> SpineSkeleton * { return nullptr; }), true);
795 ssk.addFunc("getData", &SpineSkeleton::getData);
796 ssk.addFunc("setSkin", &SpineSkeleton::setSkin);
797 ssk.addFunc("getSkin", &SpineSkeleton::getSkin);
798 ssk.addFunc("setToSetupPose", &SpineSkeleton::setToSetupPose);
799 ssk.addFunc("updateWorldTransform", &SpineSkeleton::updateWorldTransform);
800 ssk.addFunc("getBoneCount", &SpineSkeleton::getBoneCount);
801 ssk.addFunc("getBoneWorldX", &SpineSkeleton::getBoneWorldX);
802 ssk.addFunc("getBoneWorldY", &SpineSkeleton::getBoneWorldY);
803 ssk.addFunc("getBoneWorldRotation", &SpineSkeleton::getBoneWorldRotation);
804 ssk.addFunc("getSlotCount", &SpineSkeleton::getSlotCount);
805 ssk.addFunc("getSlotAttachmentName", &SpineSkeleton::getSlotAttachmentName);
806 ssk.addFunc("setSlotAttachmentName", &SpineSkeleton::setSlotAttachmentName);
807
808 auto spanim = table.addClass<SpineAnim>(
809 "SpineAnim", std::function<SpineAnim *()>([]() -> SpineAnim * { return nullptr; }), true);
810 spanim.addFunc("getSkeleton", &SpineAnim::getSkeleton);
811 spanim.addFunc("setAtlas", &SpineAnim::setAtlas);
812 spanim.addFunc("getAtlas", &SpineAnim::getAtlas);
813 spanim.addFunc("setPageTexture", &SpineAnim::setPageTexture);
814 spanim.addFunc("setPageTextureByName", &SpineAnim::setPageTextureByName);
815 spanim.addFunc("getPageTexture", &SpineAnim::getPageTexture);
816 spanim.addFunc("play", &SpineAnim::play);
817 spanim.addFunc("stop", &SpineAnim::stop);
818 spanim.addFunc("pause", &SpineAnim::pause);
819 spanim.addFunc("resume", &SpineAnim::resume);
820 spanim.addFunc("setSpeed", &SpineAnim::setSpeed);
821 spanim.addFunc("getSpeed", &SpineAnim::getSpeed);
822 spanim.addFunc("setTime", &SpineAnim::setTime);
823 spanim.addFunc("getTime", &SpineAnim::getTime);
824 spanim.addFunc("setLoop", &SpineAnim::setLoop);
825 spanim.addFunc("getLoop", &SpineAnim::getLoop);
826 spanim.addFunc("setFlipY", &SpineAnim::setFlipY);
827 spanim.addFunc("getFlipY", &SpineAnim::getFlipY);
828 spanim.addFunc("setPosition", &SpineAnim::setPosition);
829 spanim.addFunc("getX", &SpineAnim::getX);
830 spanim.addFunc("getY", &SpineAnim::getY);
831 spanim.addFunc("setScale", &SpineAnim::setScale);
832 spanim.addFunc("getScaleX", &SpineAnim::getScaleX);
833 spanim.addFunc("getScaleY", &SpineAnim::getScaleY);
834 spanim.addFunc("setLayer", &SpineAnim::setLayer);
835 spanim.addFunc("getLayer", &SpineAnim::getLayer);
836 spanim.addFunc("setColor", &SpineAnim::setColor);
837 spanim.addFunc("isPlaying", &SpineAnim::isPlaying);
838 spanim.addFunc("isPaused", &SpineAnim::isPaused);
839 spanim.addFunc("isFinished", &SpineAnim::isFinished);
840 spanim.addFunc("getAnimation", &SpineAnim::getAnimation);
841 spanim.addFunc("getAnimationDuration", &SpineAnim::getAnimationDuration);
842 spanim.addFunc("apply", &SpineAnim::apply);
843 spanim.addFunc("update", &SpineAnim::update);
844 spanim.addFunc("draw", &SpineAnim::draw);
845 // collectDrawItems is C++-only (shared DrawItem2D queue); scripts use getDrawSlot*.
846 spanim.addFunc("getDrawSlotCount", &SpineAnim::getDrawSlotCount);
847 spanim.addFunc("getDrawSlotX", &SpineAnim::getDrawSlotX);
848 spanim.addFunc("getDrawSlotY", &SpineAnim::getDrawSlotY);
849 spanim.addFunc("getDrawSlotWidth", &SpineAnim::getDrawSlotWidth);
850 spanim.addFunc("getDrawSlotHeight", &SpineAnim::getDrawSlotHeight);
851 spanim.addFunc("getDrawSlotRotation", &SpineAnim::getDrawSlotRotation);
852 spanim.addFunc("getDrawSlotRegion", &SpineAnim::getDrawSlotRegion);
853}
854
855void Animation::expose(ssq::Class &cls) {
856 cls.addFunc("getName", &Animation::getName);
857 cls.addFunc("newTween", &Animation::newTween);
858 cls.addFunc("newSpriteSheet", &Animation::newSpriteSheet);
859 cls.addFunc("newSpriteClip", &Animation::newSpriteClip);
860 cls.addFunc("newSpriteAnim", &Animation::newSpriteAnim);
861 cls.addFunc("newSpineAtlas", &Animation::newSpineAtlas);
862 cls.addFunc("newSpineSkeletonData", &Animation::newSpineSkeletonData);
863 cls.addFunc("newSpineSkeleton", &Animation::newSpineSkeleton);
864 cls.addFunc("newSpineAnim", &Animation::newSpineAnim);
865 cls.addFunc("newSpineAtlasFromFile", &Animation::newSpineAtlasFromFile);
866 cls.addFunc("newSpineAtlasFromText", &Animation::newSpineAtlasFromText);
867 cls.addFunc("newSpineSkeletonDataFromFile", &Animation::newSpineSkeletonDataFromFile);
868 cls.addFunc("newSpineSkeletonDataFromJson", &Animation::newSpineSkeletonDataFromJson);
869 cls.addFunc("newSkeleton", &Animation::newSkeleton);
870 cls.addFunc("newClip", &Animation::newClip);
871 cls.addFunc("newPose", &Animation::newPose);
872 cls.addFunc("newPlayer", &Animation::newPlayer);
873 cls.addFunc("newStateMachine", &Animation::newStateMachine);
874 cls.addFunc("newMotionDatabase", &Animation::newMotionDatabase);
875 cls.addFunc("newMotionMatcher", &Animation::newMotionMatcher);
876 cls.addFunc("newControlAnim", &Animation::newControlAnim);
877 cls.addFunc("newControlPose", &Animation::newControlPose);
878 cls.addFunc("newSkeletonFromModel", &Animation::newSkeletonFromModel);
879 cls.addFunc("newClipFromModel", &Animation::newClipFromModel);
880 cls.addFunc("newSkeletonFromEvaFile", &Animation::newSkeletonFromEvaFile);
881 cls.addFunc("newClipFromEvaFile", &Animation::newClipFromEvaFile);
882 cls.addFunc("newSkinFromModel", &Animation::newSkinFromModel);
883 cls.addFunc("newLattice", &Animation::newLattice);
884 cls.addFunc("newLatticeFromModel", &Animation::newLatticeFromModel);
885 cls.addFunc("newTrail", &Animation::newTrail);
886 cls.addFunc("update", &Animation::update);
887 cls.addFunc("getTweenCount", &Animation::getTweenCount);
888 cls.addFunc("getSpriteAnimCount", &Animation::getSpriteAnimCount);
889 cls.addFunc("getSpineAnimCount", &Animation::getSpineAnimCount);
890 cls.addFunc("getActiveCount", &Animation::getActiveCount);
891 cls.addFunc("clearFinished", &Animation::clearFinished);
892 cls.addFunc("clearAll", &Animation::clearAll);
893}
894
895} // namespace eve::animation
HSQOBJECT cls
Definition ECS.cpp:21
glm::vec3 n
Definition Grass.cpp:64
uint32_t a
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:24
glm::mat4 model
Light2D::Data * data
const char * name
Definition RockMesh.cpp:21
virtual std::string getName() const =0
static void registerPath(const std::string &path, AnimClip *clip)
Track a clip under a source path (keys are normalized).
Keyframed skeletal animation clip (local TRS tracks per bone). Script type: AnimClip.
Definition AnimClip.h:17
float getDuration() const
Definition AnimClip.h:29
bool getLoop() const
Definition AnimClip.h:32
void sample(float time, AnimPose *out, const AnimSkeleton *skeleton=nullptr) const
Sample local pose at time (seconds). If skeleton non-null, missing tracks fall back to bind pose; oth...
Definition AnimClip.cpp:276
void addScaleKey(int boneIndex, float time, float x, float y, float z)
Definition AnimClip.cpp:66
void setDuration(float seconds)
Definition AnimClip.cpp:18
float getSampleRate() const
Definition AnimClip.h:36
void addPositionKey(int boneIndex, float time, float x, float y, float z)
Definition AnimClip.cpp:35
int getRotationKeyCount(int boneIndex) const
Definition AnimClip.cpp:81
void applyPlanarRootMotion(int boneIndex, float speedX, float speedZ)
Bake planar root motion onto an existing position track (or create one). For each position key at tim...
Definition AnimClip.cpp:154
int getScaleKeyCount(int boneIndex) const
Definition AnimClip.cpp:86
void setSampleRate(float hz)
Sample rate hint used by MotionDatabase baking (Hz).
Definition AnimClip.cpp:23
int getPositionKeyCount(int boneIndex) const
Definition AnimClip.cpp:76
void addRotationKey(int boneIndex, float time, float x, float y, float z, float w)
Definition AnimClip.cpp:45
std::string getName() const
Definition AnimClip.h:26
void setName(const std::string &name)
Definition AnimClip.h:25
float wrapTime(float time) const
Wrap or clamp time according to loop flag.
Definition AnimClip.cpp:169
void setLoop(bool loop)
Definition AnimClip.h:31
static AnimSkeleton * loadSkeletonFromModel(const model3d::ModelData *model)
Convenience: ModelData wrappers (implemented in AnimImporterModel.cpp).
static AnimClip * loadClipFromModel(const model3d::ModelData *model, const AnimSkeleton *skeleton, int animIndex=0)
static void importEvaFile(const std::string &path, AnimSkeleton **skeletonOut, AnimClip **clipOut)
Load from .eva file path.
CPU 3D lattice scale-deformer (晶格缩放变形).
Definition AnimLattice.h:41
void setDivisions(int divX, int divY, int divZ)
Changes divisions; resets all control points to identity and clears the bind.
float getDeformedPositionX(int vertexIndex) const
Cached deformed position component (requires updateDeformedPositions).
std::vector< float > getDeformedNormals() const
Copy of the cached deformed normals (xyz packed; empty when not updated).
std::vector< float > getDeformedPositions() const
Copy of the cached deformed positions (xyz packed; empty when not updated).
void setPointScale(int ix, int iy, int iz, float sx, float sy, float sz)
Per-control-point scale (squash / stretch about the lattice origin).
float getPointOffsetX(int ix, int iy, int iz) const
bool updateDeformedPositions()
Deform the bound bind positions into the internal cache.
float getBindPositionZ(int vertexIndex) const
void setOrigin(float ox, float oy, float oz)
Center of the lattice box in model space.
void setClamp(bool clamp)
When true (default), vertices outside the box are clamped to the boundary cells; when false,...
Definition AnimLattice.h:77
void bindModel(const model3d::ModelData *model, int meshIndex)
Binds the current lattice to meshIndex of model (uses current divisions).
bool updateDeformedNormals(const std::vector< float > &posXYZ, const std::vector< float > &inNrmXYZ)
Deform packed xyz normals (with packed positions for cell lookup) into the internal normal cache.
float getPointScaleX(int ix, int iy, int iz) const
float getPointOffsetY(int ix, int iy, int iz) const
float getDeformedPositionY(int vertexIndex) const
int getPointCount() const
Total control point count (divX * divY * divZ).
Definition AnimLattice.h:83
bool updateDeformedPositions(const std::vector< float > &inPosXYZ)
Deform an input packed xyz array into the internal cache (size vertexCount*3).
void setSize(float sx, float sy, float sz)
World-space size of the lattice box (components must be > 0).
float getDeformedPositionZ(int vertexIndex) const
void setPointOffset(int ix, int iy, int iz, float dx, float dy, float dz)
Per-control-point translation offset (local bulge / pinch).
bool hasDeformedPositions() const
True after a successful updateDeformedPositions().
float getPointScaleY(int ix, int iy, int iz) const
void setScale(float sx, float sy, float sz)
Applies one scale to every control point (whole-lattice squash & stretch).
static AnimLattice * fromModel(const model3d::ModelData *model, int meshIndex, int divX, int divY, int divZ)
Builds a lattice bound to meshIndex of model (Assimp vertices). Throws on null model / invalid mesh /...
float getBindPositionX(int vertexIndex) const
Bind-pose position component for vertex v (0..vertexCount-1).
float getPointOffsetZ(int ix, int iy, int iz) const
void reset()
Resets every control point to identity (offset 0, scale 1).
bool hasDeformedNormals() const
True after a successful updateDeformedNormals().
float getPointScaleZ(int ix, int iy, int iz) const
void bindPositions(const float *posXYZ, int count)
Binds a packed xyz array (count * 3 floats). Uses current divisions/size/origin.
float getBindPositionY(int vertexIndex) const
Single-clip (or cross-fading) 3D animation player. Script type: AnimPlayer.
Definition AnimPlayer.h:14
void setSpeed(float speed)
void setTime(float seconds)
void setLoop(bool loop)
Definition AnimPlayer.h:36
void update(float dt)
Advance playback and sample into internal pose.
void crossFade(AnimClip *clip, float blendSeconds)
Cross-fade to clip over blendSeconds (keeps sampling previous until done).
void play(AnimClip *clip)
Evaluated local (and optional world) pose for an AnimSkeleton. Script type: AnimPose.
Definition AnimPose.h:15
float getLocalRotationX(int boneIndex) const
Definition AnimPose.cpp:122
float getWorldRotationX(int boneIndex) const
Definition AnimPose.cpp:180
float getWorldPositionZ(int boneIndex) const
Definition AnimPose.cpp:176
float getLocalScaleZ(int boneIndex) const
Definition AnimPose.cpp:146
float getLocalPositionZ(int boneIndex) const
Definition AnimPose.cpp:118
void blendFrom(const AnimPose *a, const AnimPose *b, float t)
Definition AnimPose.cpp:62
int getBoneCount() const
Definition AnimPose.h:25
float getWorldMatrixElement(int boneIndex, int elementIndex) const
Column-major 4x4 world matrix for boneIndex after computeWorld(). elementIndex in [0,...
Definition AnimPose.cpp:202
float getLocalPositionX(int boneIndex) const
Definition AnimPose.cpp:110
float getLocalRotationW(int boneIndex) const
Definition AnimPose.cpp:134
float getWorldPositionX(int boneIndex) const
Definition AnimPose.cpp:168
void setLocalScale(int boneIndex, float x, float y, float z)
Definition AnimPose.cpp:102
float getLocalScaleX(int boneIndex) const
Definition AnimPose.cpp:138
float getWorldPositionY(int boneIndex) const
Definition AnimPose.cpp:172
void setLocalRotation(int boneIndex, float x, float y, float z, float w)
Definition AnimPose.cpp:92
float getWorldRotationW(int boneIndex) const
Definition AnimPose.cpp:192
float getWorldRotationZ(int boneIndex) const
Definition AnimPose.cpp:188
float getWorldRotationY(int boneIndex) const
Definition AnimPose.cpp:184
float getLocalScaleY(int boneIndex) const
Definition AnimPose.cpp:142
float getLocalRotationZ(int boneIndex) const
Definition AnimPose.cpp:130
void setLocalPosition(int boneIndex, float x, float y, float z)
Definition AnimPose.cpp:84
float getLocalPositionY(int boneIndex) const
Definition AnimPose.cpp:114
void copyFrom(const AnimPose *other)
Definition AnimPose.cpp:56
float getLocalRotationY(int boneIndex) const
Definition AnimPose.cpp:126
void computeWorld(const AnimSkeleton *skeleton)
Compute world transforms from local pose + skeleton hierarchy. World values readable via getWorld* af...
Definition AnimPose.cpp:151
void resize(int boneCount)
Definition AnimPose.cpp:44
3D bone hierarchy + bind-pose local TRS for skeletal animation. Independent of ik::Skeleton3D (FABRIK...
float getBindPositionY(int boneIndex) const
float getBindScaleX(int boneIndex) const
int getParent(int boneIndex) const
void setBindPosition(int boneIndex, float x, float y, float z)
float getBindPositionZ(int boneIndex) const
float getBindRotationW(int boneIndex) const
float getBindScaleY(int boneIndex) const
float getBindRotationY(int boneIndex) const
float getBindScaleZ(int boneIndex) const
float getBindPositionX(int boneIndex) const
float getBindRotationZ(int boneIndex) const
float getBindRotationX(int boneIndex) const
std::string getBoneName(int boneIndex) const
int findBone(const std::string &name) const
void setBindScale(int boneIndex, float x, float y, float z)
void setBindRotation(int boneIndex, float x, float y, float z, float w)
void applyBindPose(class AnimPose *pose) const
Fill pose locals with bind pose.
int addBone(const std::string &name, int parentIndex=-1)
Append a bone. parentIndex = -1 for root.
CPU linear-blend skinning binding for one mesh against an AnimSkeleton.
Definition AnimSkin.h:25
int getSkeletonBone(int skinBoneIndex) const
Skeleton bone index used by skin joint i (-1 if unused).
Definition AnimSkin.cpp:155
float getInverseBindElement(int skinBoneIndex, int elementIndex) const
Inverse-bind matrix element (column-major, 0..15) for skin joint i.
Definition AnimSkin.cpp:165
int getBoneCount() const
Definition AnimSkin.h:44
float getSkinnedPositionX(int vertexIndex) const
Cached skinned position component (requires updateSkinnedPositions).
Definition AnimSkin.cpp:266
float getBindPositionX(int vertexIndex) const
Bind-pose (unskinned) position component for vertex v (0..vertexCount-1).
Definition AnimSkin.cpp:173
int getVertexBone(int vertexIndex, int influenceIndex) const
Influence slot i (0..3) for vertex: skeleton bone index or -1.
Definition AnimSkin.cpp:186
bool hasSkinnedPositions() const
True after a successful updateSkinnedPositions().
Definition AnimSkin.h:74
bool updateSkinnedPositions(const AnimPose *pose)
Skin into an internal cache readable via getSkinnedPosition*. Returns false if pose is null or there ...
Definition AnimSkin.cpp:255
int getInfluenceCount() const
Definition AnimSkin.h:45
static AnimSkin * fromModel(const model3d::ModelData *model, int meshIndex, const AnimSkeleton *skeleton)
Build skin binding for meshIndex on model, mapping bone names onto skeleton. Throws if the mesh has n...
Definition AnimSkin.cpp:58
float getVertexWeight(int vertexIndex, int influenceIndex) const
Definition AnimSkin.cpp:198
std::string getSkinBoneName(int skinBoneIndex) const
Definition AnimSkin.cpp:160
float getBindPositionZ(int vertexIndex) const
Definition AnimSkin.cpp:181
float getSkinnedPositionZ(int vertexIndex) const
Definition AnimSkin.cpp:276
float getSkinnedPositionY(int vertexIndex) const
Definition AnimSkin.cpp:271
float getBindPositionY(int vertexIndex) const
Definition AnimSkin.cpp:177
int getVertexCount() const
Definition AnimSkin.h:43
Clip-driven animation state machine with float/bool/trigger parameters and cross-fade transitions....
void setHasExitTime(int transitionId, bool enabled)
float getFloat(const std::string &name) const
int addTransition(const std::string &from, const std::string &to, float blendSeconds)
Add transition from → to with blend duration.
void addTriggerCondition(int transitionId, const std::string &param)
bool hasState(const std::string &name) const
void resetTrigger(const std::string &name)
void addBoolCondition(int transitionId, const std::string &param, bool value)
void setTrigger(const std::string &name)
void addFloatCondition(int transitionId, const std::string &param, const std::string &op, float threshold)
Comparison op: ">", ">=", "<", "<=", "==", "!=".
void setBool(const std::string &name, bool value)
void setFloat(const std::string &name, float value)
void addState(const std::string &name, AnimClip *clip)
bool getBool(const std::string &name) const
void setEntry(const std::string &name)
void setExitTime(int transitionId, float normalizedTime)
Optional: require normalized local time in [0,1] >= exitTime before transition.
Motion trail / afterimage recorder + 2D trajectory drawer.
Definition AnimTrail.h:31
std::string getStyle() const
Definition AnimTrail.cpp:62
void setDuration(float seconds)
How long each sample lives (seconds). <= 0 keeps until capacity eviction.
Definition AnimTrail.cpp:27
float getColorB() const
Definition AnimTrail.h:58
void setCapacity(int capacity)
Max retained samples (ring). Clamped to >= 2.
Definition AnimTrail.cpp:19
void setWidth(float pixels)
Definition AnimTrail.cpp:36
void update(float dt)
Age samples by dt; drop expired (when duration > 0).
void addPoint3(float x, float y, float z)
Append a 3D sample (draw uses set plane / first two mapped axes via sampleBone).
Definition AnimTrail.cpp:78
void setDrawOffset(float ox, float oy)
Definition AnimTrail.cpp:71
int getPointCount() const
Definition AnimTrail.h:98
void setMinDistance(float distance)
Skip new samples closer than this distance to the newest point (0 = always add).
Definition AnimTrail.cpp:31
void draw(graphics::Graphics *gfx)
Draw trajectory in 2D pixel/world space via Graphics.
float getDrawScaleY() const
Definition AnimTrail.h:74
float getWidth() const
Definition AnimTrail.h:52
void setColor(float r, float g, float b, float a=1.f)
Head (newest) color; alpha fades toward 0 along the trail when fade is on.
Definition AnimTrail.cpp:41
float getDrawOffsetX() const
Definition AnimTrail.h:76
float getPointZ(int index) const
void sampleBone(const AnimPose *pose, int boneIndex, const std::string &plane="xy")
Sample bone world position after pose->computeWorld. plane maps axes to draw (x,y): "xy" | "xz" | "yz...
float getColorR() const
Definition AnimTrail.h:56
void setStyle(const std::string &style)
"line" | "points". Invalid → exception.
Definition AnimTrail.cpp:50
void setFade(bool enable)
Definition AnimTrail.cpp:48
float getDrawOffsetY() const
Definition AnimTrail.h:77
float getDrawScaleX() const
Definition AnimTrail.h:73
float getMinDistance() const
Definition AnimTrail.h:49
float getPointAlpha(int index) const
Effective draw alpha in [0, colorA] after fade.
float getPointX(int index) const
Index 0 = oldest retained sample; count-1 = newest.
float getColorG() const
Definition AnimTrail.h:57
float getColorA() const
Definition AnimTrail.h:59
void setDrawScale(float sx, float sy)
Applied at draw time: screen = (x,y) * scale + offset. Useful when sampling bone world units into pix...
Definition AnimTrail.cpp:66
float getPointY(int index) const
float getDuration() const
Definition AnimTrail.h:45
float getPointAge(int index) const
void sampleBoneOffset(const AnimPose *pose, int boneIndex, float ox, float oy, float oz, const std::string &plane="xy")
void addPoint(float x, float y)
Append a 2D sample (z stored as 0).
Definition AnimTrail.cpp:76
Animation module — tween factory + 2D sprite-sheet / Spine + 3D skeletal playback (player / state mac...
Definition Animation.h:53
Tween * newTween(float duration=1.f)
Create a tween (duration in seconds). Returned pointer is owned by script GC.
Definition Animation.cpp:82
AnimPose * newPose(int boneCount=0)
AnimLattice * newLattice(int divX=2, int divY=2, int divZ=2)
3D lattice scale-deformer (晶格缩放变形). divX/divY/divZ are the control-point divisions (each >= 2)....
AnimSkeleton * newSkeletonFromModel(eve::model3d::ModelData *model)
Import skeleton/clip from Assimp-backed ModelData, or from compact .eva fixtures (see AnimImporter).
AnimClip * newClipFromModel(eve::model3d::ModelData *model, AnimSkeleton *skeleton, int animIndex=0)
SpineAtlas * newSpineAtlasFromFile(const std::string &path)
Load helpers (allocate + parse; false → empty object still returned? prefer nullable).
void update(float dt)
Advance all registered tweens, sprite anims, and spine anims.
AnimTrail * newTrail(int capacity=64)
Motion trail / afterimage (script GC owns returned object). capacity: max retained samples (>= 2).
SpineSkeleton * newSpineSkeleton(SpineSkeletonData *data)
SpriteClip * newSpriteClip(const std::string &name="")
Definition Animation.cpp:90
int getSpriteAnimCount() const
Definition Animation.h:135
AnimSkeleton * newSkeleton()
3D skeletal animation factories (script GC owns returned objects).
ControlAnim * newControlAnim(float frequencyHz=3.f, float dampingZeta=1.f, float response=1.f)
Control-theory procedural animation (second-order / spring / PD). frequencyHz: natural frequency f (H...
void clearAll()
Detach all tweens from the registry (does not delete Tween objects).
AnimSkin * newSkinFromModel(eve::model3d::ModelData *model, int meshIndex, AnimSkeleton *skeleton)
CPU linear-blend skin binding for a skinned mesh on ModelData. meshIndex selects the Assimp mesh; bon...
AnimClip * newClip(const std::string &name="")
SpineAtlas * newSpineAtlas()
Spine (region attachment subset) factories.
Definition Animation.cpp:98
MotionDatabase * newMotionDatabase(AnimSkeleton *skeleton)
SpineSkeletonData * newSpineSkeletonDataFromJson(const std::string &json)
AnimPlayer * newPlayer(AnimSkeleton *skeleton)
AnimClip * newClipFromEvaFile(const std::string &path)
AnimStateMachine * newStateMachine(AnimSkeleton *skeleton)
SpriteAnim * newSpriteAnim()
Definition Animation.cpp:92
SpriteSheet * newSpriteSheet()
2D sprite-sheet animation factories (script GC owns returned objects).
Definition Animation.cpp:88
AnimLattice * newLatticeFromModel(eve::model3d::ModelData *model, int meshIndex, int divX=2, int divY=2, int divZ=2)
newLattice bound to meshIndex of model (Assimp vertices).
int getSpineAnimCount() const
Definition Animation.h:136
SpineSkeletonData * newSpineSkeletonData()
MotionMatcher * newMotionMatcher(AnimSkeleton *skeleton, MotionDatabase *database)
void clearFinished()
Drop finished/stopped entries from the registry (does not delete Tween objects).
SpineAnim * newSpineAnim(SpineSkeleton *skeleton)
AnimSkeleton * newSkeletonFromEvaFile(const std::string &path)
ControlPose * newControlPose(AnimSkeleton *skeleton)
SpineAtlas * newSpineAtlasFromText(const std::string &text)
SpineSkeletonData * newSpineSkeletonDataFromFile(const std::string &path)
Control-theory procedural animation for named scalar properties.
Definition ControlAnim.h:23
float getVelocity(const std::string &name) const
void remove(const std::string &name)
void set(const std::string &name, float value)
Create/update a channel: current value snaps to value, velocity cleared.
void setTarget(const std::string &name, float value)
Move the tracking target (does not snap state). Creates channel if missing.
float get(const std::string &name) const
void setDamping(float dampingZeta)
void setFrequency(float frequencyHz)
bool has(const std::string &name) const
float getTarget(const std::string &name) const
void setResponse(float response)
std::string getIntegrator() const
std::string getPropertyName(int index) const
void setIntegrator(const std::string &kind)
Integrator: "secondOrder" | "spring" | "pd". Invalid → exception.
void update(float dt)
Advance all channels by dt seconds.
void setTargetVelocity(const std::string &name, float velocity)
Optional explicit target velocity (used by secondOrder / pd).
void impulse(const std::string &name, float deltaVelocity)
Inject an instantaneous velocity impulse (procedural “hit”).
Control-theory procedural pose driver: tracks a target AnimPose with per-channel second-order / sprin...
Definition ControlPose.h:21
void setBoneWeight(int boneIndex, float weight)
Per-bone blend weight in [0,1]; 1 = full dynamics, 0 = hard snap to target.
void setDamping(float dampingZeta)
float getBoneWeight(int boneIndex) const
void setTargetPose(const AnimPose *target)
Copy target pose. Channels without prior state snap; existing state keeps momentum.
void snapToTarget()
Snap current state to the last target without changing the target.
std::string getIntegrator() const
void setResponse(float response)
void setFrequency(float frequencyHz)
void setIntegrator(const std::string &kind)
Baked motion-matching feature database from one or more AnimClips. Feature layout per frame: [0....
void setRootBoneByName(const std::string &name)
void addFeatureBone(int boneIndex)
Include bone world position in pose features (by index).
float getFrameTime(int frameIndex) const
void addFeatureBoneByName(const std::string &name)
void bake()
Bake all clips into searchable frames. Call after addClip / feature bones.
int getFeatureBone(int index) const
void setRootBone(int boneIndex)
Bone used for trajectory / velocity features (default 0). Mixamo clips typically want hips (mixamorig...
int getFrameClipIndex(int frameIndex) const
Runtime motion matching player: builds a query feature from current pose + desired trajectory,...
void search()
Force an immediate search (also called periodically from update).
void setBlendTime(float seconds)
void setDesiredYaw(float yaw)
Desired facing yaw (radians, Y-up).
void setDesiredVelocity(float x, float z)
Desired planar velocity in character/world XZ (units/sec).
void setIgnoreRadius(int frames)
Skip rematching the same frame / nearby frames to reduce jitter.
void setSearchInterval(float seconds)
Spine animation player + 2D draw collector (region attachments).
Definition SpineAnim.h:32
void apply()
Apply current animation time to skeleton and update world transforms.
void setPageTexture(int pageIndex, graphics::Texture *texture)
Bind a GPU texture to an atlas page (by index or page image name).
Definition SpineAnim.cpp:35
SpineAtlas * getAtlas() const
Definition SpineAnim.h:43
graphics::Texture * getPageTexture(int pageIndex) const
Definition SpineAnim.cpp:55
float getDrawSlotHeight(int index) const
void setSpeed(float speed)
Definition SpineAnim.cpp:91
void setPageTextureByName(const std::string &pageName, graphics::Texture *texture)
Definition SpineAnim.cpp:44
float getDrawSlotX(int index) const
void setAtlas(SpineAtlas *atlas)
Definition SpineAnim.cpp:29
void setScale(float sx, float sy)
float getScaleX() const
Definition SpineAnim.h:70
SpineSkeleton * getSkeleton() const
Definition SpineAnim.h:40
int getDrawSlotCount() const
Query posed draw slots without textures (for unit tests). Returns number of visible region attachment...
void setLayer(int layer)
Definition SpineAnim.h:72
float getAnimationDuration() const
float getDrawSlotRotation(int index) const
float getDrawSlotY(int index) const
void setLoop(bool loop)
Definition SpineAnim.h:59
bool isFinished() const
Definition SpineAnim.h:78
float getSpeed() const
Definition SpineAnim.h:56
void setPosition(float x, float y)
bool play(const std::string &animationName)
Definition SpineAnim.cpp:60
float getDrawSlotWidth(int index) const
std::string getDrawSlotRegion(int index) const
void setColor(float r, float g, float b, float a=1.f)
float getTime() const
Definition SpineAnim.h:58
void setFlipY(bool flip)
When true (default), Spine Y-up is flipped for screen Y-down draw items.
Definition SpineAnim.h:63
float getScaleY() const
Definition SpineAnim.h:71
std::string getAnimation() const
Definition SpineAnim.h:79
void setTime(float seconds)
Definition SpineAnim.cpp:96
void draw(graphics::Graphics *gfx)
Draw the current pose into an existing frame without clearing or presenting it.
Esoteric Spine .atlas text parser (region rectangles + page metadata). Does not load image pixels — b...
Definition SpineAtlas.h:14
int getRegionY(int index) const
int getPageHeight(int pageIndex) const
std::string getPageName(int pageIndex) const
std::string getRegionName(int index) const
int getPageWidth(int pageIndex) const
bool getRegionRotate(int index) const
int getRegionPage(int index) const
int getRegionWidth(int index) const
int getRegionX(int index) const
int getRegionHeight(int index) const
int findRegion(const std::string &name) const
Spine skeleton JSON data (bones / slots / skins / animations).
float getAnimationDuration(int index) const
int findSkin(const std::string &name) const
std::string getSkinName(int index) const
int findAnimation(const std::string &name) const
std::string getSlotName(int index) const
int findSlot(const std::string &name) const
std::string getBoneName(int index) const
std::string getAnimationName(int index) const
int findBone(const std::string &name) const
Runtime Spine skeleton pose (local + world bone transforms, slot attachments). Script type: SpineSkel...
float getBoneWorldRotation(int index) const
bool setSkin(const std::string &name)
std::string getSlotAttachmentName(int slotIndex) const
float getBoneWorldY(int index) const
SpineSkeletonData * getData() const
void setSlotAttachmentName(int slotIndex, const std::string &name)
float getBoneWorldX(int index) const
2D sprite-sheet clip player.
Definition SpriteAnim.h:23
SpriteSheet * getSheet() const
Definition SpriteAnim.h:33
void bindQuad(graphics::Quad *quad)
Keep this Quad's viewport updated each update/play.
bool update(float dt)
Advance playback. Returns true while still active (playing or paused). Auto-applies to boundQuad when...
void setTime(float seconds)
void play(SpriteClip *clip)
void setSpeed(float speed)
void setSheet(SpriteSheet *sheet)
Optional sheet used by applyToQuad / bindQuad.
int getClipFrame() const
Index inside the current clip (0..clipFrameCount-1), or -1.
Definition SpriteAnim.h:53
graphics::Quad * getBoundQuad() const
Definition SpriteAnim.h:60
void applyToQuad(graphics::Quad *quad) const
Write current sheet frame into quad (requires sheet).
SpriteClip * getClip() const
Definition SpriteAnim.h:51
int getSheetFrame() const
Sheet frame index for the current cell, or -1.
Named 2D frame sequence referencing SpriteSheet frame indices. Script type: SpriteClip.
Definition SpriteClip.h:14
int getSheetFrame(int index) const
float wrapTime(float timeSeconds) const
Local time wrapped or clamped according to loop flag.
std::string getName() const
Definition SpriteClip.h:23
void addFrame(int sheetFrameIndex, float duration=0.1f)
Append one cell: sheetFrameIndex + display duration (seconds).
void setName(const std::string &name)
void addFrameByName(SpriteSheet *sheet, const std::string &frameName, float duration=0.1f)
Resolve name via sheet and append.
void setLoop(bool loop)
Definition SpriteClip.h:25
int frameAtTime(float timeSeconds) const
Map absolute time (seconds) into a clip frame index. When loop is false and t >= duration,...
float getFrameDuration(int index) const
Sprite-sheet / texture-atlas frame table (pixel rects).
Definition SpriteSheet.h:20
int getFrameX(int index) const
int addFrame(const std::string &name, int x, int y, int w, int h)
Append a named frame. Returns frame index. Empty name → "frameN".
int setGrid(int columns, int rows, int frameW, int frameH, int margin=0, int spacing=0, int originX=0, int originY=0)
Generate frames in row-major order from a grid. frameW/frameH are cell sizes; margin is outer padding...
std::string getFrameName(int index) const
int getFrameWidth(int index) const
int getFrameHeight(int index) const
int getFrameY(int index) const
int findFrame(const std::string &name) const
void applyToQuad(graphics::Quad *quad, int frameIndex) const
Write pixel viewport into an existing Quad (does not allocate).
Property tween — interpolates named float properties from → to over time.
Definition Tween.h:21
bool isFinished() const
Definition Tween.h:68
void setFrom(const std::string &name, float value)
Definition Tween.cpp:34
bool isRunning() const
Definition Tween.h:66
void setDelay(float seconds)
Definition Tween.cpp:115
int getRepeat() const
Definition Tween.h:56
void setDeltaAngle(const std::string &name, float deltaRadians)
Definition Tween.cpp:74
bool getYoyo() const
Definition Tween.h:58
void setToAngle(const std::string &name, float radians)
Definition Tween.cpp:66
int getPropertyCount() const
Names of all property tracks (stable order = insertion order).
Definition Tween.h:92
void setEase(const std::string &kind)
Definition Tween.cpp:120
float getDuration() const
Definition Tween.h:45
bool isPaused() const
Definition Tween.h:67
float getEasedProgress() const
Eased progress used for interpolation, [0,1].
Definition Tween.cpp:196
bool update(float dt)
Advance by dt seconds. Returns true while the tween is still active (delayed / running / paused).
Definition Tween.cpp:259
void setFromAngle(const std::string &name, float radians)
Definition Tween.cpp:58
float get(const std::string &name) const
Definition Tween.cpp:84
void setYoyo(bool enabled)
Definition Tween.h:57
bool isDelayed() const
Definition Tween.h:70
bool isActive() const
Definition Tween.h:71
float getProgress() const
Linear progress in the current cycle, [0,1].
Definition Tween.cpp:191
void setDuration(float seconds)
Definition Tween.cpp:110
std::string getPropertyName(int index) const
Definition Tween.cpp:306
float evaluate(const std::string &name, float t) const
Sample property at linear t in [0,1] using current from/to (no state change).
Definition Tween.cpp:293
float getFrom(const std::string &name) const
Definition Tween.cpp:90
float getDelay() const
Definition Tween.h:47
void setRepeat(int count)
Play count: 1 = once (default), N = N cycles, -1 = infinite. Values < -1 are clamped to -1.
Definition Tween.cpp:126
void setDelta(const std::string &name, float delta)
Relative change: end = start + delta (resolved when start() runs).
Definition Tween.cpp:50
float getTo(const std::string &name) const
Definition Tween.cpp:96
void setTo(const std::string &name, float value)
Definition Tween.cpp:42
std::string getEase() const
Definition Tween.h:49
float getDelta(const std::string &name) const
Definition Tween.cpp:103
bool has(const std::string &name) const
Definition Tween.cpp:82
float getElapsed() const
Elapsed time in the current cycle (excludes delay).
Definition Tween.h:76
bool isStopped() const
Definition Tween.h:69
CPU-side decoded 3D model (Assimp scene owned via medialoader::ModelScene). Does not upload to GPU — ...
Definition ModelData.h:23