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; }
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); }