mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-02 12:33:52 +00:00
Model:getAnimator; Model:setAnimator;
This commit is contained in:
parent
03d3a9f77d
commit
c3749eb9bd
|
@ -1,6 +1,12 @@
|
||||||
#include "api/lovr.h"
|
#include "api/lovr.h"
|
||||||
#include "graphics/animator.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) {
|
int l_lovrAnimatorUpdate(lua_State* L) {
|
||||||
Animator* animator = luax_checktype(L, 1, Animator);
|
Animator* animator = luax_checktype(L, 1, Animator);
|
||||||
float dt = luaL_checknumber(L, 2);
|
float dt = luaL_checknumber(L, 2);
|
||||||
|
@ -8,12 +14,6 @@ int l_lovrAnimatorUpdate(lua_State* L) {
|
||||||
return 0;
|
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) {
|
int l_lovrAnimatorGetAnimationCount(lua_State* L) {
|
||||||
Animator* animator = luax_checktype(L, 1, Animator);
|
Animator* animator = luax_checktype(L, 1, Animator);
|
||||||
lua_pushnumber(L, lovrAnimatorGetAnimationCount(animator));
|
lua_pushnumber(L, lovrAnimatorGetAnimationCount(animator));
|
||||||
|
@ -174,8 +174,8 @@ int l_lovrAnimatorSetSpeed(lua_State* L) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const luaL_Reg lovrAnimator[] = {
|
const luaL_Reg lovrAnimator[] = {
|
||||||
{ "update", l_lovrAnimatorUpdate },
|
|
||||||
{ "reset", l_lovrAnimatorReset },
|
{ "reset", l_lovrAnimatorReset },
|
||||||
|
{ "update", l_lovrAnimatorUpdate },
|
||||||
{ "getAnimationCount", l_lovrAnimatorGetAnimationCount },
|
{ "getAnimationCount", l_lovrAnimatorGetAnimationCount },
|
||||||
{ "getAnimationNames", l_lovrAnimatorGetAnimationNames },
|
{ "getAnimationNames", l_lovrAnimatorGetAnimationNames },
|
||||||
{ "play", l_lovrAnimatorPlay },
|
{ "play", l_lovrAnimatorPlay },
|
||||||
|
|
|
@ -18,6 +18,24 @@ int l_lovrModelGetAABB(lua_State* L) {
|
||||||
return 6;
|
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) {
|
int l_lovrModelGetMesh(lua_State* L) {
|
||||||
Model* model = luax_checktype(L, 1, Model);
|
Model* model = luax_checktype(L, 1, Model);
|
||||||
Mesh* mesh = lovrModelGetMesh(model);
|
Mesh* mesh = lovrModelGetMesh(model);
|
||||||
|
@ -28,6 +46,8 @@ int l_lovrModelGetMesh(lua_State* L) {
|
||||||
const luaL_Reg lovrModel[] = {
|
const luaL_Reg lovrModel[] = {
|
||||||
{ "draw", l_lovrModelDraw },
|
{ "draw", l_lovrModelDraw },
|
||||||
{ "getAABB", l_lovrModelGetAABB },
|
{ "getAABB", l_lovrModelGetAABB },
|
||||||
|
{ "getAnimator", l_lovrModelGetAnimator },
|
||||||
|
{ "setAnimator", l_lovrModelGetAnimator },
|
||||||
{ "getMesh", l_lovrModelGetMesh },
|
{ "getMesh", l_lovrModelGetMesh },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,6 +38,19 @@ void lovrAnimatorDestroy(const Ref* ref) {
|
||||||
free(animator);
|
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) {
|
void lovrAnimatorUpdate(Animator* animator, float dt) {
|
||||||
map_iter_t iter = map_iter(&animator->timeline);
|
map_iter_t iter = map_iter(&animator->timeline);
|
||||||
const char* key;
|
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) {
|
int lovrAnimatorGetAnimationCount(Animator* animator) {
|
||||||
return animator->animationData->animations.length;
|
return animator->animationData->animations.length;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ typedef struct {
|
||||||
|
|
||||||
Animator* lovrAnimatorCreate(AnimationData* animationData);
|
Animator* lovrAnimatorCreate(AnimationData* animationData);
|
||||||
void lovrAnimatorDestroy(const Ref* ref);
|
void lovrAnimatorDestroy(const Ref* ref);
|
||||||
void lovrAnimatorUpdate(Animator* animator, float dt);
|
|
||||||
void lovrAnimatorReset(Animator* animator);
|
void lovrAnimatorReset(Animator* animator);
|
||||||
|
void lovrAnimatorUpdate(Animator* animator, float dt);
|
||||||
int lovrAnimatorGetAnimationCount(Animator* animator);
|
int lovrAnimatorGetAnimationCount(Animator* animator);
|
||||||
const char* lovrAnimatorGetAnimationName(Animator* animator, int index);
|
const char* lovrAnimatorGetAnimationName(Animator* animator, int index);
|
||||||
void lovrAnimatorPlay(Animator* animator, const char* animation);
|
void lovrAnimatorPlay(Animator* animator, const char* animation);
|
||||||
|
|
|
@ -97,6 +97,14 @@ void lovrModelDraw(Model* model, mat4 transform) {
|
||||||
lovrGraphicsPop();
|
lovrGraphicsPop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Animator* lovrModelGetAnimator(Model* model) {
|
||||||
|
return model->animator;
|
||||||
|
}
|
||||||
|
|
||||||
|
void lovrModelSetAnimator(Model* model, Animator* animator) {
|
||||||
|
model->animator = animator;
|
||||||
|
}
|
||||||
|
|
||||||
Mesh* lovrModelGetMesh(Model* model) {
|
Mesh* lovrModelGetMesh(Model* model) {
|
||||||
return model->mesh;
|
return model->mesh;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "loaders/model.h"
|
#include "loaders/model.h"
|
||||||
|
#include "graphics/animator.h"
|
||||||
#include "graphics/material.h"
|
#include "graphics/material.h"
|
||||||
#include "graphics/mesh.h"
|
#include "graphics/mesh.h"
|
||||||
#include "graphics/texture.h"
|
#include "graphics/texture.h"
|
||||||
|
@ -14,6 +15,7 @@ typedef struct {
|
||||||
ModelData* modelData;
|
ModelData* modelData;
|
||||||
Mesh* mesh;
|
Mesh* mesh;
|
||||||
Material** materials;
|
Material** materials;
|
||||||
|
Animator* animator;
|
||||||
float aabb[6];
|
float aabb[6];
|
||||||
bool aabbDirty;
|
bool aabbDirty;
|
||||||
} Model;
|
} Model;
|
||||||
|
@ -21,5 +23,7 @@ typedef struct {
|
||||||
Model* lovrModelCreate(ModelData* modelData);
|
Model* lovrModelCreate(ModelData* modelData);
|
||||||
void lovrModelDestroy(const Ref* ref);
|
void lovrModelDestroy(const Ref* ref);
|
||||||
void lovrModelDraw(Model* model, mat4 transform);
|
void lovrModelDraw(Model* model, mat4 transform);
|
||||||
|
Animator* lovrModelGetAnimator(Model* model);
|
||||||
|
void lovrModelSetAnimator(Model* model, Animator* animator);
|
||||||
Mesh* lovrModelGetMesh(Model* model);
|
Mesh* lovrModelGetMesh(Model* model);
|
||||||
const float* lovrModelGetAABB(Model* model);
|
const float* lovrModelGetAABB(Model* model);
|
||||||
|
|
Loading…
Reference in a new issue