mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-04 13:33:34 +00:00
Animator:isLooping; Animator:setLooping;
This commit is contained in:
parent
93c6597f09
commit
4f4d95ddec
|
@ -91,6 +91,22 @@ int l_lovrAnimatorGetDuration(lua_State* L) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int l_lovrAnimatorIsLooping(lua_State* L) {
|
||||||
|
Animator* animator = luax_checktype(L, 1, Animator);
|
||||||
|
const char* animation = luaL_checkstring(L, 2);
|
||||||
|
bool looping = lovrAnimatorIsLooping(animator, animation);
|
||||||
|
lua_pushboolean(L, looping);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int l_lovrAnimatorSetLooping(lua_State* L) {
|
||||||
|
Animator* animator = luax_checktype(L, 1, Animator);
|
||||||
|
const char* animation = luaL_checkstring(L, 2);
|
||||||
|
bool looping = lua_toboolean(L, 3);
|
||||||
|
lovrAnimatorSetLooping(animator, animation, looping);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int l_lovrAnimatorGetSpeed(lua_State* L) {
|
int l_lovrAnimatorGetSpeed(lua_State* L) {
|
||||||
Animator* animator = luax_checktype(L, 1, Animator);
|
Animator* animator = luax_checktype(L, 1, Animator);
|
||||||
if (lua_type(L, 2) == LUA_TSTRING) {
|
if (lua_type(L, 2) == LUA_TSTRING) {
|
||||||
|
@ -129,6 +145,8 @@ const luaL_Reg lovrAnimator[] = {
|
||||||
{ "seek", l_lovrAnimatorSeek },
|
{ "seek", l_lovrAnimatorSeek },
|
||||||
{ "tell", l_lovrAnimatorTell },
|
{ "tell", l_lovrAnimatorTell },
|
||||||
{ "getDuration", l_lovrAnimatorGetDuration },
|
{ "getDuration", l_lovrAnimatorGetDuration },
|
||||||
|
{ "isLooping", l_lovrAnimatorIsLooping },
|
||||||
|
{ "setLooping", l_lovrAnimatorSetLooping },
|
||||||
{ "getSpeed", l_lovrAnimatorGetSpeed },
|
{ "getSpeed", l_lovrAnimatorGetSpeed },
|
||||||
{ "setSpeed", l_lovrAnimatorSetSpeed },
|
{ "setSpeed", l_lovrAnimatorSetSpeed },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "graphics/animator.h"
|
#include "graphics/animator.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
static Track* lovrAnimatorEnsureTrack(Animator* animator, const char* animation) {
|
static Track* lovrAnimatorEnsureTrack(Animator* animator, const char* animation) {
|
||||||
Track* track = map_get(&animator->timeline, animation);
|
Track* track = map_get(&animator->timeline, animation);
|
||||||
|
@ -41,6 +42,10 @@ void lovrAnimatorUpdate(Animator* animator, float dt) {
|
||||||
while ((key = map_next(&animator->timeline, &iter)) != NULL) {
|
while ((key = map_next(&animator->timeline, &iter)) != NULL) {
|
||||||
Track* track = map_get(&animator->timeline, key);
|
Track* track = map_get(&animator->timeline, key);
|
||||||
track->time += dt * track->speed * animator->speed;
|
track->time += dt * track->speed * animator->speed;
|
||||||
|
|
||||||
|
if (track->looping) {
|
||||||
|
track->time = fmodf(track->time, track->animation->duration);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,6 +111,16 @@ float lovrAnimatorGetDuration(Animator* animator, const char* animation) {
|
||||||
return track->animation->duration;
|
return track->animation->duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool lovrAnimatorIsLooping(Animator* animator, const char* animation) {
|
||||||
|
Track* track = lovrAnimatorEnsureTrack(animator, animation);
|
||||||
|
return track->looping;
|
||||||
|
}
|
||||||
|
|
||||||
|
void lovrAnimatorSetLooping(Animator* animator, const char* animation, bool looping) {
|
||||||
|
Track* track = lovrAnimatorEnsureTrack(animator, animation);
|
||||||
|
track->looping = looping;
|
||||||
|
}
|
||||||
|
|
||||||
float lovrAnimatorGetSpeed(Animator* animator, const char* animation) {
|
float lovrAnimatorGetSpeed(Animator* animator, const char* animation) {
|
||||||
if (!animation) {
|
if (!animation) {
|
||||||
return animator->speed;
|
return animator->speed;
|
||||||
|
|
|
@ -35,5 +35,7 @@ void lovrAnimatorPause(Animator* animator, const char* animation);
|
||||||
void lovrAnimatorResume(Animator* animator, const char* animation);
|
void lovrAnimatorResume(Animator* animator, const char* animation);
|
||||||
void lovrAnimatorSeek(Animator* animator, const char* animation, float time);
|
void lovrAnimatorSeek(Animator* animator, const char* animation, float time);
|
||||||
float lovrAnimatorTell(Animator* animator, const char* animation);
|
float lovrAnimatorTell(Animator* animator, const char* animation);
|
||||||
|
bool lovrAnimatorIsLooping(Animator* animator, const char* animation);
|
||||||
|
void lovrAnimatorSetLooping(Animator* animator, const char* animation, bool looping);
|
||||||
float lovrAnimatorGetSpeed(Animator* animator, const char* animation);
|
float lovrAnimatorGetSpeed(Animator* animator, const char* animation);
|
||||||
void lovrAnimatorSetSpeed(Animator* animator, const char* animation, float speed);
|
void lovrAnimatorSetSpeed(Animator* animator, const char* animation, float speed);
|
||||||
|
|
Loading…
Reference in a new issue