Exemplo n.º 1
0
        public static MaterialEntry BuildMatEntry(BinaryReader MBR, MaterialEntry MATEntry)
        {
            //Header variables.
            MATEntry.Magic          = ByteUtilitarian.BytesToStringL2R(MBR.ReadBytes(4).ToList(), MATEntry.Magic);
            MATEntry.SomethingCount = MBR.ReadInt32();
            MATEntry.MaterialCount  = MBR.ReadInt32();
            MATEntry.TextureCount   = MBR.ReadInt32();
            MATEntry.WeirdHash      = ByteUtilitarian.BytesToStringL2R(MBR.ReadBytes(4).ToList(), MATEntry.Magic);
            MATEntry.Field14        = MBR.ReadInt32();
            MATEntry.TextureOffset  = MBR.ReadInt32();
            MBR.BaseStream.Position = MBR.BaseStream.Position + 4;
            MATEntry.MaterialOffset = MBR.ReadInt32();
            MBR.BaseStream.Position = MBR.BaseStream.Position + 4;

            //For the Texture References.
            MATEntry.Textures       = new List <MaterialTextureReference>();
            MBR.BaseStream.Position = MATEntry.TextureOffset;
            for (int i = 0; i < MATEntry.TextureCount; i++)
            {
                MaterialTextureReference TexTemp = new MaterialTextureReference();
                TexTemp = TexTemp.FillMaterialTexReference(MATEntry, i, MBR, TexTemp);
                MATEntry.Textures.Add(TexTemp);
            }

            //Now for the Materials themselves.

            MATEntry.Materials = new List <MaterialMaterialEntry>();
            byte[] ShadeTemp  = new byte[4];
            int    PrevOffset = Convert.ToInt32(MBR.BaseStream.Position);

            //uint ShadeUInt;
            //byte[] NameHashBytes;
            //uint NameTemp;


            //Part 1 of Materials.
            for (int i = 0; i < MATEntry.MaterialCount; i++)
            {
                MaterialMaterialEntry MMEntry = new MaterialMaterialEntry();
                MMEntry = MMEntry.FIllMatMatEntryPropertiesPart1(MMEntry, MATEntry, MBR, PrevOffset, i);
                MMEntry = MMEntry.FIllMatMatEntryPropertiesPart2(MMEntry, MATEntry, MBR, PrevOffset, i);

                MATEntry.Materials.Add(MMEntry);
                PrevOffset = PrevOffset + 72;
                MBR.BaseStream.Position = PrevOffset;
            }

            return(MATEntry);
        }
        public MaterialTextureReference FillMaterialTexReference(MaterialEntry Mat, int ID, BinaryReader bnr, MaterialTextureReference texref)
        {
            //Typehash.
            texref.TypeHash       = ByteUtilitarian.BytesToStringL2R(bnr.ReadBytes(4).ToList(), texref.TypeHash);
            texref.UnknownParam04 = bnr.ReadInt32();
            texref.UnknownParam08 = bnr.ReadInt32();
            texref.UnknownParam0C = bnr.ReadInt32();
            texref.UnknownParam10 = bnr.ReadInt32();
            texref.UnknownParam14 = bnr.ReadInt32();
            //Name.
            texref.FullTexName = Encoding.ASCII.GetString(bnr.ReadBytes(64)).Trim('\0');
            texref.Index       = ID + 1;

            return(texref);
        }