mirror of https://github.com/bjornbytes/lovr.git
Animator:isPlaying; Looping fixes;
This commit is contained in:
parent
4f4d95ddec
commit
c469d1ca19
|
@ -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 },
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue