private void add_material_inspector(DataFormats.JSRF.MDLB.material mat = null) { Material_Inspector mat_inspector = new Material_Inspector(); mat_inspector.Location = new Point(0, mat_inspector_list.Count * 90); Materials.color c = new Materials.color(255, 255, 255, 255); // add control panel_materials.Controls.Add(mat_inspector); // set properties values for (int x = 0; x <= panel_materials.Controls.Count - 1; x++) { Control ct = panel_materials.Controls[x]; if (ct is Material_Inspector && x == mat_inspector_list.Count) { ((Material_Inspector)ct).id = mat_inspector_list.Count; // if no input material is defined, load values from last material inspector if (mat == null) { Material_Inspector mi_last = mat_inspector_list[mat_inspector_list.Count - 1]; // set material inspector values taken from last material inspector ((Material_Inspector)ct).set_values(mi_last.get_color(), mi_last.get_shader_type(), mi_last.get_unk_id(), mi_last.get_hb()); } else { // set material inspector values from input Material (mat) Materials.color color = new Materials.color(mat.color.R, mat.color.G, mat.color.B, mat.color.A); ((Material_Inspector)ct).set_values(color, mat.shader_id, mat.unk_id2, mat.HB); } mat_inspector_list.Add((Material_Inspector)ct); } } }
private void load_materials() { /* * // adds material based on the triangle groups (for this model part) * // this method is wrong, should take all Main.model.materials_List instead, and write the material id (0 ,1, 2 ,3 etc) in the triangle group * if (Main.model.Model_Parts_header_List[20].triangle_groups_List.Count > 0) * { * List<DataFormats.JSRF.MDLB.triangle_group> tg = Main.model.Model_Parts_header_List[20].triangle_groups_List; * * for (int i = 0; i < tg.Count; i++) * { * add_material_inspector(Main.model.materials_List[tg[i].material_ID]); * } * }*/ // load materials list from original model (last part) for (int i = 0; i < Main.current_model.materials_List.Count; i++) { add_material_inspector(Main.current_model.materials_List[i]); } // if model hast materials after triangle groups return; if (Main.current_model.materials_List.Count > 0) { return; } /* * * * int vtx_mat_count = 0; * // TODO * if(Main.model.header.materials_count == 0) * { * List<DataFormats.JSRF.MDLB.material> mats = Main.model.Model_Parts_header_List[Main.model.Model_Parts_header_List.Count - 1].vtx_buffer_materials; * * foreach (var m in mats) * { * vtx_mat_count++; * add_material_inspector(m); * } * * } * */ //int vtx_mat_count = 0; // TODO if (Main.current_model.header.materials_count == 0) { List <DataFormats.JSRF.MDLB.material> mats = Main.current_model.Model_Parts_header_List[Main.current_model.Model_Parts_header_List.Count - 1].vtx_buffer_materials; foreach (var m in mats) { // vtx_mat_count++; add_material_inspector(m); } } // if (vtx_mat_count > 0) { return; } // TODO if Main.model.materials_List.Count == 0 // load materials after vtx_tri_headers #region load materials from SMD // else load materials list from SMD (last part) // if original model doesn't have a materials list after the triangles groups // materials are stored after vertex_triangles_buffers_header // so we get those original materials and try to find matching materials from the SMD mat_id to the original's //List<DataFormats.JSRF.MDLB.material> mat_list_ori = Main.model.Model_Parts_header_List[Main.model.Model_Parts_header_List.Count - 1].vtx_buffer_materials; return; SMD main_smd = new SMD(main_SMD_filepath); DataFormats.JSRF.MDLB.material mat = null; // for each material/triangles group in SMD (last part) file for (int i = 0; i < main_smd.mat_groups_list.Count; i++) { mat = null; // get material number (mat_x) for this material group int mat_num = 0; if (main_smd.mat_groups_list[i].material_name.Contains("mat_")) { string[] args = main_smd.mat_groups_list[i].material_name.Split('_'); if (args.Length > 1) { mat_num = Convert.ToInt32(args[1]); } } /* * // if material number inferior original model materials count * // set material * if(mat_num < mat_list_ori.Count) * { * mat = mat_list_ori[mat_num]; * } */ // if material not found // add generic material if (mat == null) { add_material_inspector(); continue; } // else add corresponding material by id add_material_inspector(mat); } #endregion }