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