public Material_v57(IMaterial OtherMaterial) : base(OtherMaterial) { // TODO: I wonder if we could make v57 and v58 use the same interface? if (OtherMaterial.GetMTLVersion() == VersionsEnumerator.V_57) { Material_v57 CastedMaterial = (OtherMaterial as Material_v57); Unk0 = CastedMaterial.Unk0; Unk1 = CastedMaterial.Unk1; Unk3 = CastedMaterial.Unk3; Unk4 = CastedMaterial.Unk4; Unk5 = CastedMaterial.Unk5; } else if (OtherMaterial.GetMTLVersion() == VersionsEnumerator.V_58) { Material_v58 CastedMaterial = (OtherMaterial as Material_v58); Unk0 = CastedMaterial.Unk0; Unk1 = CastedMaterial.Unk1; Unk3 = CastedMaterial.Unk3; Unk4 = CastedMaterial.Unk4; Unk5 = CastedMaterial.Unk5; } else { string message = string.Format("Version {0} cannot be converted from Version {1}", GetMTLVersion(), OtherMaterial.GetMTLVersion()); Console.WriteLine(message); return; } Samplers = new List <MaterialSampler_v57>(); foreach (var Sampler in Samplers) { MaterialSampler_v57 NewSampler = new MaterialSampler_v57(Sampler); Samplers.Add(Sampler); } }
public void WriteMatFile(string name) { this.name = name; // Validate Materials (TODO: Maybe move to validate function?) for (int i = 0; i != materials.Count; i++) { IMaterial Material = materials.ElementAt(i).Value; if (Version == VersionsEnumerator.V_57 || Version == VersionsEnumerator.V_58) { if (Material.GetMTLVersion() == VersionsEnumerator.V_63) { MessageBox.Show("Detected v63 (M1DE/M3 Material). Cannot save this file. Support will be added soon.", "Toolkit"); return; } } } using (BinaryWriter writer = new BinaryWriter(File.Open(name, FileMode.Create))) { writer.Write("MTLB".ToCharArray()); writer.Write((int)version); writer.Write(materials.Count); writer.Write(unk2); // Write Materials for (int i = 0; i != materials.Count; i++) { // Convert material if required. IMaterial Material = materials.ElementAt(i).Value; if (Material.GetMTLVersion() != Version) { Material = MaterialFactory.ConvertMaterial(Version, Material); } Material.WriteToFile(writer, version); } } }