1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-12 00:43:34 +00:00
lovr/src/api/types/model.c
2017-12-10 12:41:43 -08:00

93 lines
2.4 KiB
C

#include "api.h"
#include "graphics/model.h"
int l_lovrModelDrawInstanced(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
int instances = luaL_checkinteger(L, 2);
float transform[16];
luax_readtransform(L, 3, transform, 1);
lovrModelDraw(model, transform, instances);
return 0;
}
int l_lovrModelDraw(lua_State* L) {
lua_pushinteger(L, 1);
lua_insert(L, 2);
return l_lovrModelDrawInstanced(L);
}
int l_lovrModelGetAABB(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
const float* aabb = lovrModelGetAABB(model);
for (int i = 0; i < 6; i++) {
lua_pushnumber(L, aabb[i]);
}
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_lovrModelGetAnimationCount(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
lua_pushinteger(L, lovrModelGetAnimationCount(model));
return 1;
}
int l_lovrModelGetMaterial(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
Material* material = lovrModelGetMaterial(model);
if (material) {
luax_pushtype(L, Material, material);
} else {
lua_pushnil(L);
}
return 1;
}
int l_lovrModelSetMaterial(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
if (lua_isnoneornil(L, 2)) {
lovrModelSetMaterial(model, NULL);
} else {
Material* material = luax_checktype(L, 2, Material);
lovrModelSetMaterial(model, material);
}
return 0;
}
int l_lovrModelGetMesh(lua_State* L) {
Model* model = luax_checktype(L, 1, Model);
Mesh* mesh = lovrModelGetMesh(model);
luax_pushtype(L, Mesh, mesh);
return 1;
}
const luaL_Reg lovrModel[] = {
{ "drawInstanced", l_lovrModelDrawInstanced },
{ "draw", l_lovrModelDraw },
{ "getAABB", l_lovrModelGetAABB },
{ "getAnimator", l_lovrModelGetAnimator },
{ "setAnimator", l_lovrModelSetAnimator },
{ "getAnimationCount", l_lovrModelGetAnimationCount },
{ "getMaterial", l_lovrModelGetMaterial },
{ "setMaterial", l_lovrModelSetMaterial },
{ "getMesh", l_lovrModelGetMesh },
{ NULL, NULL }
};