public SM3DLCollisionPicker(MaterialSetForm parentForm)
        {
            InitializeComponent();

            ParentEditor = parentForm;

            foreach (string val in FloorCodes)
            {
                floorCodeCB.Items.Add(val);
            }

            foreach (string val in WallCodes)
            {
                wallCodeCB.Items.Add(val);
            }

            foreach (string val in SoundCodes)
            {
                soundCodeCB.Items.Add(val);
            }

            unknownCodeUD.Value      = 0;
            chkCameraThrough.Checked = false;
            floorCodeCB.SelectedItem = FloorCodes[0];
            wallCodeCB.SelectedItem  = WallCodes[0];
            soundCodeCB.SelectedItem = SoundCodes[0];
        }
        public SM3DWCollisionPicker(MaterialSetForm parentForm)
        {
            InitializeComponent();

            ParentEditor = parentForm;

            foreach (string val in CameraCodes.Keys)
            {
                cameraCodeCB.Items.Add(val);
            }

            foreach (string val in FloorCodes.Keys)
            {
                floorCodeCB.Items.Add(val);
            }

            foreach (string val in WallCodes.Keys)
            {
                wallCodeCB.Items.Add(val);
            }

            foreach (string val in MaterialCodes.Keys)
            {
                materialCodeCB.Items.Add(val);
            }

            cameraCodeCB.SelectedItem   = "NoThrough";
            floorCodeCB.SelectedItem    = "Ground";
            wallCodeCB.SelectedItem     = "Wall";
            materialCodeCB.SelectedItem = "NoCode";
        }
        public static MaterialSetForm ShowForm(string[] materials, string[] meshes)
        {
            MaterialSetForm f = new MaterialSetForm(materials, meshes);

            f.ShowDialog();
            return(f);
        }
        public static KclResult CreateCollisionFromObject(Form parent, string fileName)
        {
            var objectFile = new ObjModel(fileName);
            var materials  = objectFile.GetMaterialNameList();
            var meshes     = objectFile.GetMeshNameList();

            MaterialSetForm form = new MaterialSetForm(materials, meshes);

            if (form.ShowDialog() != DialogResult.OK)
            {
                return(new KclResult());
            }

            LoadConsole(parent);

            var kclFile = ImportObjectFile(form, objectFile).Result;

            return(kclFile);
        }
 public MaterialCollisionPicker(MaterialSetForm parentForm)
 {
     InitializeComponent();
     ParentEditor = parentForm;
 }
Esempio n. 6
0
        public MaterialGridView(MaterialSetForm parentForm)
        {
            InitializeComponent();

            ParentEditor = parentForm;
        }
        static async Task <KclResult> ImportObjectFile(MaterialSetForm form, ObjModel objectFile)
        {
            KclResult kcl = new KclResult();
            await Task.Run(() =>
            {
                var matDictionary = form.Result;
                var endianness    = form.GetEndianness;
                var version       = form.GetVersion;
                var preset        = MaterialSetForm.ActiveGamePreset;
                //A small quick hack
                if (preset.GameTitle.Contains("Mario Galaxy"))
                {
                    version = FileVersion.VersionGC;
                }

                var settings = new CollisionImportSettings()
                {
                    SphereRadius       = preset.SphereRadius,
                    PrismThickness     = preset.PrismThickness,
                    PaddingMax         = new Vector3(preset.PaddingMax),
                    PaddingMin         = new Vector3(preset.PaddingMin),
                    MaxRootSize        = preset.MaxRootSize,
                    MinRootSize        = preset.MinRootSize,
                    MinCubeSize        = preset.MinCubeSize,
                    MaxTrianglesInCube = preset.MaxTrianglesInCube,
                };

                foreach (var mesh in objectFile.Meshes)
                {
                    for (int f = 0; f < mesh.Faces.Count; f++)
                    {
                        if (form.UseObjectMaterials)
                        {
                            if (matDictionary.ContainsKey(mesh.Faces[f].Material))
                            {
                                mesh.Faces[f] = new ObjFace(mesh.Faces[f], matDictionary[mesh.Faces[f].Material]);
                            }
                        }
                        else if (matDictionary.ContainsKey(mesh.Name))
                        {
                            mesh.Faces[f] = new ObjFace(mesh.Faces[f], matDictionary[mesh.Name]);
                        }
                    }
                }

                var triangles = objectFile.ToTriangles();
                //Important that we update attribute data after triangles are setup
                //Some attribute files require the triangles for configuring.
                form.UpdateMaterialAttributes(triangles, endianness);
                kcl.AttributeFile = form.MaterialAttributeFile;

                if (version != FileVersion.Version2 && triangles.Count > ushort.MaxValue / 4)
                {
                    MessageBox.Show($"Version 1 KCL (Wii, GC, DS, 3DS) must be below {ushort.MaxValue / 4} polys! Poly Count: {triangles.Count}");
                }
                else
                {
                    kcl.KclFie = new KCLFile(triangles, version, endianness, settings);
                }
            });

            return(kcl);
        }