Animator:isLooping; Animator:setLooping;

This commit is contained in:
bjorn 2017-11-04 15:31:04 -07:00
parent 93c6597f09
commit 4f4d95ddec
3 changed files with 35 additions and 0 deletions

View File

@ -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 }

View File

@ -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;

View File

@ -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);