struct model *luaL_checkmodel(lua_State *L, int index) { int n, i; struct mesh *group; vector offset; struct model *m; n = lua_objlen(L, index); if (n <= 0) { luaL_error(L, "invalid table length at index %d", index); } m = model_create(NULL); for (i=0; i<n; i++) { lua_getfieldi(L, index, i+1); group = luaL_checkmesh(L, -1); lua_getfield(L, -1, "offset"); if (lua_isvector(L, -1)) lua_tovector(L, -1, &offset); else offset.x = offset.y = offset.z = 0.0f; lua_pop(L, 2); model_addgroup(m, group, &offset); mesh_destroy(group); } return m; }
model_t * model_dummy_create(const char *name) { model_dummy_t *dummy = malloc(sizeof(model_dummy_t)); if (!dummy) return NULL; return model_create(model_dummy_exec, model_dummy_delete, name, (void *)dummy); }
} END_TEST /** * The function reset error buffer before the test. */ static void test_generic_setup(void) { COLOR_SETUP_START; view_generic = view_create(VIEW_NONE); model_generic1 = model_create(MODEL_NONE); model_generic2 = model_create(MODEL_NONE); cntl_generic1 = cntl_create(CNTL_NONE); cntl_generic2 = cntl_create(CNTL_NONE); error_reset(); COLOR_SETUP_END; return ; }
} END_TEST /** * The function reset error buffer before the test and creates instance of model * to run tests over it. */ static void model_setup(void) { COLOR_SETUP_START; model_generic = model_create(MODEL_APPLICATION); if ( error_is_error() ) { ERROR_LOG(); } COLOR_SETUP_END; return ; }
int load_level(const char *filename) { struct mesh *m; const char *err; int ret; DEBUG(1, "game: load_level(\"%s\")\n", filename); ret = luaL_dofile(L1, filename); if (ret) { err = lua_tostring(L1, -1); ERROR("error while loading level: %s", err); lua_pop(L1, 1); return 1; } lua_getfield(L1, -1, "vertices"); if (!lua_istable(L1, -1)) { ERROR("expected `vertices' field in Lua level data table"); lua_pop(L1, 2); return 1; } clear_level(); m = mesh_create(); mesh_addluaverts(m, L1, -1); lua_pop(L1, 1); lua_getfield(L1, -1, "faces"); if (!lua_istable(L1, -1)) { mesh_destroy(m); ERROR("expected `faces' field in Lua level data table"); return 1; } mesh_addluafaces(m, L1, -1); lua_pop(L1, 1); lua_setglobal(L1, "level"); level = model_create(m); /* m is no longer needed. */ mesh_destroy(m); gfx_prepmodel(level); gfx->set_level(level); return 0; }