Animator:isPlaying; Looping fixes;

This commit is contained in:
bjorn 2017-11-04 15:48:52 -07:00
parent 4f4d95ddec
commit c469d1ca19
3 changed files with 24 additions and 1 deletions

View File

@ -91,6 +91,14 @@ int l_lovrAnimatorGetDuration(lua_State* L) {
return 1;
}
int l_lovrAnimatorIsPlaying(lua_State* L) {
Animator* animator = luax_checktype(L, 1, Animator);
const char* animation = luaL_checkstring(L, 2);
bool playing = lovrAnimatorIsPlaying(animator, animation);
lua_pushboolean(L, playing);
return 1;
}
int l_lovrAnimatorIsLooping(lua_State* L) {
Animator* animator = luax_checktype(L, 1, Animator);
const char* animation = luaL_checkstring(L, 2);
@ -145,6 +153,7 @@ const luaL_Reg lovrAnimator[] = {
{ "seek", l_lovrAnimatorSeek },
{ "tell", l_lovrAnimatorTell },
{ "getDuration", l_lovrAnimatorGetDuration },
{ "isPlaying", l_lovrAnimatorIsPlaying },
{ "isLooping", l_lovrAnimatorIsLooping },
{ "setLooping", l_lovrAnimatorSetLooping },
{ "getSpeed", l_lovrAnimatorGetSpeed },

View File

@ -1,4 +1,5 @@
#include "graphics/animator.h"
#include "math/math.h"
#include <math.h>
static Track* lovrAnimatorEnsureTrack(Animator* animator, const char* animation) {
@ -45,6 +46,9 @@ void lovrAnimatorUpdate(Animator* animator, float dt) {
if (track->looping) {
track->time = fmodf(track->time, track->animation->duration);
} else if (track->time > track->animation->duration) {
track->time = 0;
track->playing = false;
}
}
}
@ -99,6 +103,10 @@ void lovrAnimatorResume(Animator* animator, const char* animation) {
void lovrAnimatorSeek(Animator* animator, const char* animation, float time) {
Track* track = lovrAnimatorEnsureTrack(animator, animation);
track->time = time;
if (!track->looping) {
track->time = MIN(track->time, track->animation->duration);
track->time = MAX(track->time, 0);
}
}
float lovrAnimatorTell(Animator* animator, const char* animation) {
@ -111,6 +119,11 @@ float lovrAnimatorGetDuration(Animator* animator, const char* animation) {
return track->animation->duration;
}
bool lovrAnimatorIsPlaying(Animator* animator, const char* animation) {
Track* track = lovrAnimatorEnsureTrack(animator, animation);
return track->playing;
}
bool lovrAnimatorIsLooping(Animator* animator, const char* animation) {
Track* track = lovrAnimatorEnsureTrack(animator, animation);
return track->looping;

View File

@ -28,13 +28,14 @@ void lovrAnimatorUpdate(Animator* animator, float dt);
void lovrAnimatorReset(Animator* animator);
int lovrAnimatorGetAnimationCount(Animator* animator);
const char* lovrAnimatorGetAnimationName(Animator* animator, int index);
float lovrAnimatorGetDuration(Animator* animator, const char* animation);
void lovrAnimatorPlay(Animator* animator, const char* animation);
void lovrAnimatorStop(Animator* animator, const char* animation);
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);
float lovrAnimatorGetDuration(Animator* animator, const char* animation);
bool lovrAnimatorIsPlaying(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);