static void Model_copy (LIScrArgs* args) { int shape_keys = 1; LIMaiProgram* program; LIMdlModel* self; LIScrData* data; /* Get arguments. */ program = liscr_script_get_userdata (args->script, LISCR_SCRIPT_PROGRAM); liscr_args_geti_bool (args, 0, &shape_keys); /* Allocate the model. */ self = limdl_model_new_copy (args->self, shape_keys); if (self == NULL) return; /* Allocate the unique ID. */ if (!limdl_manager_add_model (program->models, self)) { limdl_model_free (self); return; } /* Allocate userdata. */ data = liscr_data_new (args->script, args->lua, self, LISCR_SCRIPT_MODEL, limdl_manager_free_model); if (data == NULL) { limdl_model_free (self); return; } liscr_args_seti_stack (args); }
LIMaiMessage* limai_message_new ( int type, const char* name, const void* data) { LIMaiMessage* self; self = lisys_calloc (1, sizeof (LIMaiMessage)); if (self == NULL) return 0; self->type = type; self->name = lisys_string_dup (name); if (self->name == NULL) { lisys_free (self); return 0; } switch (type) { case LIMAI_MESSAGE_TYPE_EMPTY: break; case LIMAI_MESSAGE_TYPE_MODEL: self->model = limdl_model_new_copy (data); if (self->model == NULL) { lisys_free (self->name); lisys_free (self); return 0; } break; case LIMAI_MESSAGE_TYPE_STRING: self->string = lisys_string_dup (data); if (self->string == NULL) { lisys_free (self->name); lisys_free (self); return 0; } break; default: lisys_free (self->name); lisys_free (self); lisys_assert (0); return 0; } return self; }
static void Terrain_build_chunk_model (LIScrArgs* args) { int grid_x; int grid_z; LIExtTerrain* self; LIExtTerrainModule* module; LIMatVector offset; LIMdlModel* model; LIScrData* data; /* Get the arguments. */ self = args->self; module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_TERRAIN); if (!liscr_args_geti_int (args, 0, &grid_x) || grid_x < 0) return; if (!liscr_args_geti_int (args, 1, &grid_z) || grid_z < 0) return; if (!liscr_args_geti_vector (args, 2, &offset)) offset = limat_vector_init (grid_x * self->grid_size, 0.0f, grid_z * self->grid_size); /* Build the model. */ model = liext_terrain_build_chunk_model (self, grid_x, grid_z, &offset); if (model == NULL) return; /* Copy the model. */ model = limdl_model_new_copy (model, 0); if (model == NULL) return; /* Allocate the unique ID. */ if (!limdl_manager_add_model (module->program->models, model)) { limdl_model_free (model); return; } /* Allocate the userdata. */ data = liscr_data_new (args->script, args->lua, model, LISCR_SCRIPT_MODEL, limdl_manager_free_model); if (data == NULL) { limdl_model_free (model); return; } liscr_args_seti_stack (args); }