mirror of https://github.com/bjornbytes/lovr.git
Model:getAnimator; Model:setAnimator;
This commit is contained in:
parent
03d3a9f77d
commit
c3749eb9bd
|
@ -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 },
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue