diff options
Diffstat (limited to 'src/import/import.c')
-rw-r--r-- | src/import/import.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/import/import.c b/src/import/import.c index d58de0f..400f1d9 100644 --- a/src/import/import.c +++ b/src/import/import.c @@ -4,7 +4,7 @@ #include "import.h" -void push_vector(lua_State *L, struct aiVector3D vec) +static void push_vector(lua_State *L, struct aiVector3D vec) { hs_create_table(L, hs_str_num("x", vec.x), @@ -14,7 +14,7 @@ void push_vector(lua_State *L, struct aiVector3D vec) } -void push_face(lua_State *L, struct aiFace face) +static void push_face(lua_State *L, struct aiFace face) { lua_createtable(L, face.mNumIndices, 0); int tbl = lua_gettop(L); @@ -27,7 +27,7 @@ void push_face(lua_State *L, struct aiFace face) } -void push_aistring(lua_State *L, struct aiString str) +static void push_aistring(lua_State *L, struct aiString str) { lua_pushstring(L, str.data); } @@ -57,7 +57,7 @@ void push_aistring(lua_State *L, struct aiString str) * mPrimitiveTypes * mTextureCoordsNames */ -void push_mesh(lua_State *L, struct aiMesh mesh) +static void push_mesh(lua_State *L, struct aiMesh mesh) { /* --=== create mesh table ===-- */ lua_createtable(L, 0, 1); @@ -196,3 +196,32 @@ void push_mesh(lua_State *L, struct aiMesh mesh) /* --=== clean up ===-- */ lua_pop(L, pop_count); } + + +static void push_node(lua_State *L, struct aiNode *node) +{ + lua_createtable(L, 0, 0); + int nodetbl = lua_gettop(L); + + int pop_count = 0; + + if (node->mMeshes != NULL) { + lua_createtable(L, node->mNumMeshes, 0); + int meshes = lua_gettop(L); + for (int i=0; i<node->mNumMeshes; i++) { + lua_pushinteger(L, node->mMeshes[i]+1); + lua_rawseti(L, meshes, i+1); + } + lua_setfield(L, nodetbl, "meshes"); + } + + if (node->mChildren != NULL) { + lua_createtable(L, node->mNumChildren, 0); + int children = lua_gettop(L); + for (int i=0; i<node->mNumChildren; i++) { + push_node(L, node->mChildren[i]); + lua_rawseti(L, children, i+1); + } + lua_setfield(L, nodetbl, "children"); + } +} |