mirror of https://github.com/bjornbytes/lovr.git
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
Animator* animator = luax_checktype(L, 1, Animator);
|
||||
if (lua_type(L, 2) == LUA_TSTRING) {
|
||||
|
@ -129,6 +145,8 @@ const luaL_Reg lovrAnimator[] = {
|
|||
{ "seek", l_lovrAnimatorSeek },
|
||||
{ "tell", l_lovrAnimatorTell },
|
||||
{ "getDuration", l_lovrAnimatorGetDuration },
|
||||
{ "isLooping", l_lovrAnimatorIsLooping },
|
||||
{ "setLooping", l_lovrAnimatorSetLooping },
|
||||
{ "getSpeed", l_lovrAnimatorGetSpeed },
|
||||
{ "setSpeed", l_lovrAnimatorSetSpeed },
|
||||
{ NULL, NULL }
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "graphics/animator.h"
|
||||
#include <math.h>
|
||||
|
||||
static Track* lovrAnimatorEnsureTrack(Animator* animator, const char* 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) {
|
||||
Track* track = map_get(&animator->timeline, key);
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
if (!animation) {
|
||||
return animator->speed;
|
||||
|
|
|
@ -35,5 +35,7 @@ void lovrAnimatorPause(Animator* animator, const char* animation);
|
|||
void lovrAnimatorResume(Animator* animator, const char* animation);
|
||||
void lovrAnimatorSeek(Animator* animator, const char* animation, float time);
|
||||
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);
|
||||
void lovrAnimatorSetSpeed(Animator* animator, const char* animation, float speed);
|
||||
|
|
Loading…
Reference in New Issue