Model:getAnimator; Model:setAnimator;

This commit is contained in:
bjorn 2017-11-05 13:41:47 -08:00
parent 03d3a9f77d
commit c3749eb9bd
6 changed files with 53 additions and 21 deletions

View File

@ -1,6 +1,12 @@
#include "api/lovr.h"
#include "graphics/animator.h"
int l_lovrAnimatorReset(lua_State* L) {
Animator* animator = luax_checktype(L, 1, Animator);
lovrAnimatorReset(animator);
return 0;
}
int l_lovrAnimatorUpdate(lua_State* L) {
Animator* animator = luax_checktype(L, 1, Animator);
float dt = luaL_checknumber(L, 2);
@ -8,12 +14,6 @@ int l_lovrAnimatorUpdate(lua_State* L) {
return 0;
}
int l_lovrAnimatorReset(lua_State* L) {
Animator* animator = luax_checktype(L, 1, Animator);
lovrAnimatorReset(animator);
return 0;
}
int l_lovrAnimatorGetAnimationCount(lua_State* L) {
Animator* animator = luax_checktype(L, 1, Animator);
lua_pushnumber(L, lovrAnimatorGetAnimationCount(animator));
@ -174,8 +174,8 @@ int l_lovrAnimatorSetSpeed(lua_State* L) {
}
const luaL_Reg lovrAnimator[] = {
{ "update", l_lovrAnimatorUpdate },
{ "reset", l_lovrAnimatorReset },
{ "update", l_lovrAnimatorUpdate },
{ "getAnimationCount", l_lovrAnimatorGetAnimationCount },
{ "getAnimationNames", l_lovrAnimatorGetAnimationNames },
{ "play", l_lovrAnimatorPlay },

View File

@ -18,6 +18,24 @@ int l_lovrModelGetAABB(lua_State* L) {
return 6;
}
int l_lovrModelGetAnimator(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
Animator* animator = lovrModelGetAnimator(model);
luax_pushtype(L, Animator, animator);
return 1;
}
int l_lovrModelSetAnimator(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
if (lua_isnil(L, 2)) {
lovrModelSetAnimator(model, NULL);
} else {
Animator* animator = luax_checktype(L, 2, Animator);
lovrModelSetAnimator(model, animator);
}
return 0;
}
int l_lovrModelGetMesh(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
Mesh* mesh = lovrModelGetMesh(model);
@ -28,6 +46,8 @@ int l_lovrModelGetMesh(lua_State* L) {
const luaL_Reg lovrModel[] = {
{ "draw", l_lovrModelDraw },
{ "getAABB", l_lovrModelGetAABB },
{ "getAnimator", l_lovrModelGetAnimator },
{ "setAnimator", l_lovrModelGetAnimator },
{ "getMesh", l_lovrModelGetMesh },
{ NULL, NULL }
};

View File

@ -38,6 +38,19 @@ void lovrAnimatorDestroy(const Ref* ref) {
free(animator);
}
void lovrAnimatorReset(Animator* animator) {
map_iter_t iter = map_iter(&animator->timeline);
const char* key;
while ((key = map_next(&animator->timeline, &iter)) != NULL) {
Track* track = map_get(&animator->timeline, key);
track->time = 0;
track->speed = 1;
track->playing = true;
track->looping = false;
}
animator->speed = 1;
}
void lovrAnimatorUpdate(Animator* animator, float dt) {
map_iter_t iter = map_iter(&animator->timeline);
const char* key;
@ -54,19 +67,6 @@ void lovrAnimatorUpdate(Animator* animator, float dt) {
}
}
void lovrAnimatorReset(Animator* animator) {
map_iter_t iter = map_iter(&animator->timeline);
const char* key;
while ((key = map_next(&animator->timeline, &iter)) != NULL) {
Track* track = map_get(&animator->timeline, key);
track->time = 0;
track->speed = 1;
track->playing = true;
track->looping = false;
}
animator->speed = 1;
}
int lovrAnimatorGetAnimationCount(Animator* animator) {
return animator->animationData->animations.length;
}

View File

@ -26,8 +26,8 @@ typedef struct {
Animator* lovrAnimatorCreate(AnimationData* animationData);
void lovrAnimatorDestroy(const Ref* ref);
void lovrAnimatorUpdate(Animator* animator, float dt);
void lovrAnimatorReset(Animator* animator);
void lovrAnimatorUpdate(Animator* animator, float dt);
int lovrAnimatorGetAnimationCount(Animator* animator);
const char* lovrAnimatorGetAnimationName(Animator* animator, int index);
void lovrAnimatorPlay(Animator* animator, const char* animation);

View File

@ -97,6 +97,14 @@ void lovrModelDraw(Model* model, mat4 transform) {
lovrGraphicsPop();
}
Animator* lovrModelGetAnimator(Model* model) {
return model->animator;
}
void lovrModelSetAnimator(Model* model, Animator* animator) {
model->animator = animator;
}
Mesh* lovrModelGetMesh(Model* model) {
return model->mesh;
}

View File

@ -1,4 +1,5 @@
#include "loaders/model.h"
#include "graphics/animator.h"
#include "graphics/material.h"
#include "graphics/mesh.h"
#include "graphics/texture.h"
@ -14,6 +15,7 @@ typedef struct {
ModelData* modelData;
Mesh* mesh;
Material** materials;
Animator* animator;
float aabb[6];
bool aabbDirty;
} Model;
@ -21,5 +23,7 @@ typedef struct {
Model* lovrModelCreate(ModelData* modelData);
void lovrModelDestroy(const Ref* ref);
void lovrModelDraw(Model* model, mat4 transform);
Animator* lovrModelGetAnimator(Model* model);
void lovrModelSetAnimator(Model* model, Animator* animator);
Mesh* lovrModelGetMesh(Model* model);
const float* lovrModelGetAABB(Model* model);