Beispiel #1
0
        public override void WriteToFile(BinaryWriter writer, VersionsEnumerator version)
        {
            // Material Name doesn't use standard hex serialization.
            writer.Write(MaterialName.Hash);
            writer.WriteString32(MaterialName.String);

            // Unknown Values.
            writer.Write(Unk0);
            writer.Write(Unk1);
            writer.Write(Unk2);
            writer.Write((int)Flags);
            writer.Write(Unk3);
            writer.Write(Unk4);
            writer.Write(Unk5);
            writer.Write(Unk6);
            writer.Write(Unk7);

            // Shader ID and Hash
            writer.Write(ShaderID);
            writer.Write(ShaderHash);

            // Shader Parameters
            writer.Write(Parameters.Count);
            foreach (var param in Parameters)
            {
                param.WriteToFile(writer);
            }

            // Shader Samplers
            writer.Write(Samplers.Count);
            foreach (var shader in Samplers)
            {
                shader.WriteToFile(writer, version);
            }
        }
Beispiel #2
0
 public override void WriteToFile(BinaryWriter writer, VersionsEnumerator version)
 {
     writer.Write(ID.ToCharArray());
     writer.Write(Unk0);
     writer.Write(SamplerStates);
     writer.Write(Unk1);
 }
Beispiel #3
0
 public override void ReadFromFile(BinaryReader reader, VersionsEnumerator version)
 {
     ID            = new string(reader.ReadChars(4));
     Unk0          = reader.ReadInt32();
     SamplerStates = reader.ReadBytes(6);
     Unk1          = reader.ReadInt16();
 }
        public static IMaterial ReadMaterialFromFile(BinaryReader reader, VersionsEnumerator version)
        {
            IMaterial Material = null;

            switch (version)
            {
            case VersionsEnumerator.V_57:
                Material = new Material_v57();
                Material.ReadFromFile(reader, version);
                break;

            case VersionsEnumerator.V_58:
                Material = new Material_v58();
                Material.ReadFromFile(reader, version);
                break;

            case VersionsEnumerator.V_63:
                Material = new Material_v63();
                Material.ReadFromFile(reader, version);
                break;

            default:
                break;
            }

            Debug.Assert(Material != null, string.Format("Failed to read Material Type: {0}", version));
            return(Material);
        }
        public static IMaterial ConstructMaterial(VersionsEnumerator Version)
        {
            IMaterial Material = null;

            switch (Version)
            {
            case VersionsEnumerator.V_57:
                Material = new Material_v57();
                break;

            case VersionsEnumerator.V_58:
                Material = new Material_v58();
                break;

            case VersionsEnumerator.V_63:
                Material = new Material_v63();
                break;

            default:
                break;
            }

            Debug.Assert(Material != null, string.Format("Failed to read Construct Material Type: {0}", Version));
            return(Material);
        }
Beispiel #6
0
 public MaterialLibrary(VersionsEnumerator InVersion)
 {
     name      = "";
     materials = new Dictionary <ulong, IMaterial>();
     unk2      = 0;
     version   = InVersion;
 }
Beispiel #7
0
 public MaterialLibrary()
 {
     name      = "";
     materials = new Dictionary <ulong, IMaterial>();
     unk2      = 0;
     version   = GameStorage.Instance.GetSelectedGame().GameType == GamesEnumerator.MafiaII_DE
         ? VersionsEnumerator.V_58
         : VersionsEnumerator.V_57;
 }
Beispiel #8
0
        public void BuildMaterialLibrary(List <IMaterial> Materials, VersionsEnumerator InVersion)
        {
            version   = InVersion;
            materials = new Dictionary <ulong, IMaterial>();

            foreach (var Material in Materials)
            {
                ulong Hash = Material.MaterialName.Hash;
                materials.Add(Hash, Material);
            }
        }
Beispiel #9
0
        public override void WriteToFile(BinaryWriter writer, VersionsEnumerator version)
        {
            writer.Write(ID.ToCharArray());
            for (int i = 0; i < 4; i++)
            {
                writer.Write(UnkSet0[i]);
            }
            writer.Write(TextureName.Hash);
            writer.Write(TexType);
            writer.Write(UnkZero);
            writer.Write(SamplerStates);

            for (int i = 0; i < 2; i++)
            {
                writer.Write(UnkSet1[i]);
            }
            writer.WriteString32(TextureName.String);
        }
Beispiel #10
0
        public void ReadMatFile(string name)
        {
            materials = new Dictionary <ulong, IMaterial>();
            this.name = name;

            using (BinaryReader reader = new BinaryReader(File.Open(name, FileMode.Open)))
            {
                string header = new string(reader.ReadChars(4));
                version = (VersionsEnumerator)reader.ReadInt32();
                int numMats = reader.ReadInt32();
                unk2 = reader.ReadInt32();

                for (int i = 0; i != numMats; i++)
                {
                    IMaterial mat = MaterialFactory.ReadMaterialFromFile(reader, version);
                    materials.Add(mat.MaterialName.Hash, mat);
                }
            }
        }
Beispiel #11
0
        public override void ReadFromFile(BinaryReader reader, VersionsEnumerator version)
        {
            ulong  materialHash = reader.ReadUInt64();
            string materialName = StringHelpers.ReadString32(reader);

            MaterialName.String = materialName;
            MaterialName.Hash   = materialHash;
            Unk0       = reader.ReadUInt32();
            Unk1       = reader.ReadBytes(2);
            Flags      = (MaterialFlags)reader.ReadInt32();
            Unk2       = reader.ReadBytes(9);
            ShaderID   = reader.ReadUInt64();
            ShaderHash = reader.ReadUInt32();

            int parameterCount = reader.ReadInt32();

            Parameters = new List <MaterialParameter>();
            for (int i = 0; i != parameterCount; i++)
            {
                var param = new MaterialParameter(reader);
                Parameters.Add(param);
            }

            int textureCount = reader.ReadInt32();

            Textures = new List <MaterialTexture>();
            for (int i = 0; i != textureCount; i++)
            {
                var texture = new MaterialTexture();
                texture.ReadFromFile(reader);
                Textures.Add(texture);
            }

            int samplerCount = reader.ReadInt32();

            Samplers = new List <MaterialSampler_v63>();
            for (int i = 0; i != samplerCount; i++)
            {
                var sampler = new MaterialSampler_v63();
                sampler.ReadFromFile(reader, version);
                Samplers.Add(sampler);
            }
        }
Beispiel #12
0
        public override void ReadFromFile(BinaryReader reader, VersionsEnumerator version)
        {
            ID      = new string(reader.ReadChars(4));
            UnkSet0 = new int[4];
            for (int i = 0; i < UnkSet0.Length; i++)
            {
                UnkSet0[i] = reader.ReadInt32();
            }
            ulong TextureHash = reader.ReadUInt64();

            TexType       = reader.ReadByte();
            UnkZero       = reader.ReadByte();
            SamplerStates = reader.ReadBytes(6);
            UnkSet1       = new int[2]; // these can have erratic values
            for (int i = 0; i < 2; i++)
            {
                UnkSet1[i] = reader.ReadInt32();
            }
            TextureName.String = StringHelpers.ReadString32(reader);
            TextureName.Hash   = TextureHash;
        }
Beispiel #13
0
        public override void ReadFromFile(BinaryReader reader, VersionsEnumerator version)
        {
            ulong  materialHash = reader.ReadUInt64();
            string materialName = StringHelpers.ReadString32(reader);

            MaterialName.String = materialName;
            MaterialName.Hash   = materialHash;

            Unk0  = reader.ReadByte();
            Unk1  = reader.ReadByte();
            Unk2  = reader.ReadByte();
            Flags = (MaterialFlags)reader.ReadInt32();
            Unk3  = reader.ReadByte();
            Unk4  = reader.ReadInt32();
            Unk5  = reader.ReadInt32();
            Unk6  = reader.ReadByte();
            Unk7  = reader.ReadSingle();

            ShaderID   = reader.ReadUInt64();
            ShaderHash = reader.ReadUInt32();

            int parameterCount = reader.ReadInt32();

            Parameters = new List <MaterialParameter>();
            for (int i = 0; i != parameterCount; i++)
            {
                var param = new MaterialParameter(reader);
                Parameters.Add(param);
            }

            int samplerCount = reader.ReadInt32();

            Samplers = new List <MaterialSampler_v58>();
            for (int i = 0; i != samplerCount; i++)
            {
                var shader = new MaterialSampler_v58();
                shader.ReadFromFile(reader, version);
                Samplers.Add(shader);
            }
        }
Beispiel #14
0
 public virtual void WriteToFile(BinaryWriter writer, VersionsEnumerator version)
 {
 }
Beispiel #15
0
 public virtual void ReadFromFile(BinaryReader reader, VersionsEnumerator version)
 {
 }