2017-12-10 20:40:37 +00:00
|
|
|
#include "api.h"
|
2019-04-05 11:58:29 +00:00
|
|
|
#include "graphics/animator.h"
|
|
|
|
#include "graphics/material.h"
|
2017-03-11 11:08:07 +00:00
|
|
|
#include "graphics/model.h"
|
2016-10-31 20:54:32 +00:00
|
|
|
|
2019-02-17 22:52:22 +00:00
|
|
|
static int l_lovrModelDraw(lua_State* L) {
|
2016-11-19 08:57:18 +00:00
|
|
|
Model* model = luax_checktype(L, 1, Model);
|
2017-01-20 03:11:42 +00:00
|
|
|
float transform[16];
|
2019-01-31 00:13:44 +00:00
|
|
|
int index = luax_readmat4(L, 2, transform, 1);
|
2018-12-12 06:16:40 +00:00
|
|
|
int instances = luaL_optinteger(L, index, 1);
|
2017-11-26 03:45:44 +00:00
|
|
|
lovrModelDraw(model, transform, instances);
|
2016-10-31 20:54:32 +00:00
|
|
|
return 0;
|
|
|
|
}
|
2016-11-08 22:51:58 +00:00
|
|
|
|
2019-02-17 22:52:22 +00:00
|
|
|
static int l_lovrModelGetAnimator(lua_State* L) {
|
2019-01-13 19:08:06 +00:00
|
|
|
Model* model = luax_checktype(L, 1, Model);
|
2019-06-02 07:20:10 +00:00
|
|
|
luax_pushtype(L, Aniamtor, lovrModelGetAnimator(model));
|
2019-01-13 19:08:06 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2019-02-17 22:52:22 +00:00
|
|
|
static int l_lovrModelSetAnimator(lua_State* L) {
|
2019-01-13 19:08:06 +00:00
|
|
|
Model* model = luax_checktype(L, 1, Model);
|
|
|
|
if (lua_isnoneornil(L, 2)) {
|
|
|
|
lovrModelSetAnimator(model, NULL);
|
|
|
|
} else {
|
|
|
|
Animator* animator = luax_checktype(L, 2, Animator);
|
|
|
|
lovrModelSetAnimator(model, animator);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2019-02-17 22:52:22 +00:00
|
|
|
static int l_lovrModelGetMaterial(lua_State* L) {
|
2019-02-14 07:55:47 +00:00
|
|
|
Model* model = luax_checktype(L, 1, Model);
|
|
|
|
Material* material = lovrModelGetMaterial(model);
|
2019-06-02 07:20:10 +00:00
|
|
|
luax_pushtype(L, Material, material);
|
2019-02-14 07:55:47 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2019-02-17 22:52:22 +00:00
|
|
|
static int l_lovrModelSetMaterial(lua_State* L) {
|
2019-02-14 07:55:47 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2019-02-17 22:52:22 +00:00
|
|
|
static int l_lovrModelGetAABB(lua_State* L) {
|
2019-01-23 18:24:08 +00:00
|
|
|
Model* model = luax_checktype(L, 1, Model);
|
|
|
|
float aabb[6];
|
|
|
|
lovrModelGetAABB(model, aabb);
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
|
|
lua_pushnumber(L, aabb[i]);
|
|
|
|
}
|
|
|
|
return 6;
|
|
|
|
}
|
|
|
|
|
2017-03-11 11:08:07 +00:00
|
|
|
const luaL_Reg lovrModel[] = {
|
|
|
|
{ "draw", l_lovrModelDraw },
|
2019-01-13 19:08:06 +00:00
|
|
|
{ "getAnimator", l_lovrModelGetAnimator },
|
|
|
|
{ "setAnimator", l_lovrModelSetAnimator },
|
2019-02-14 07:55:47 +00:00
|
|
|
{ "getMaterial", l_lovrModelGetMaterial },
|
|
|
|
{ "setMaterial", l_lovrModelSetMaterial },
|
2019-01-23 18:24:08 +00:00
|
|
|
{ "getAABB", l_lovrModelGetAABB },
|
2017-03-11 11:08:07 +00:00
|
|
|
{ NULL, NULL }
|
|
|
|
};
|