Beispiel #1
0
        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);
                }
            }
        }
Beispiel #2
0
        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
        }