Ejemplo n.º 1
0
        public void ReadFromFile(BinaryReader reader)
        {
            frameRef    = reader.ReadUInt64();
            unk_byte    = reader.ReadByte();
            colType     = (CollisionTypes)reader.ReadByte();
            idHash      = reader.ReadUInt64();
            colMaterial = reader.ReadInt16();
            Matrix      = MatrixExtensions.ReadFromFile(reader);
            unkByte     = reader.ReadByte();

            if (colType == CollisionTypes.Box)
            {
                collision = new CollisionBox(reader);
            }
            else if (colType == CollisionTypes.Sphere)
            {
                collision = new CollisionSphere(reader);
            }
            else if (colType == CollisionTypes.Capsule)
            {
                collision = new CollisionCapsule(reader);
            }
            else if (colType == CollisionTypes.Convex)
            {
                collision = new CollisionConvex(reader);
            }
            else
            {
                Log.WriteLine("Failed to parse collision type " + colType, LoggingTypes.WARNING, LogCategoryTypes.FUNCTION);
            }
        }
Ejemplo n.º 2
0
 public bool ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     Unk01     = stream.ReadInt32(isBigEndian);
     Name1     = stream.ReadString16(isBigEndian);
     Hash1     = stream.ReadUInt64(isBigEndian);
     Hash2     = stream.ReadUInt64(isBigEndian);
     Name2     = stream.ReadString16(isBigEndian);
     Unk02     = stream.ReadInt32(isBigEndian);
     Unk03     = stream.ReadInt32(isBigEndian);
     Unk04     = stream.ReadInt32(isBigEndian);
     Unk05     = stream.ReadByte8();
     Unk06     = stream.ReadInt32(isBigEndian);
     Unk07     = stream.ReadInt32(isBigEndian);
     Transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Unk09     = stream.ReadInt32(isBigEndian);
     Unk10     = stream.ReadInt32(isBigEndian);
     Unk08     = new float[10];
     for (int i = 0; i < 10; i++)
     {
         Unk08[i] = stream.ReadSingle(isBigEndian);
     }
     Unk11 = stream.ReadInt32(isBigEndian);
     Unk12 = stream.ReadInt32(isBigEndian);
     Unk13 = stream.ReadInt16(isBigEndian);
     return(true);
 }
Ejemplo n.º 3
0
        public override void ReadFromFile(MemoryStream stream, bool isBigEndian)
        {
            base.ReadFromFile(stream, isBigEndian);
            Unk05     = stream.ReadByte8();
            Unk06     = stream.ReadInt32(isBigEndian);
            Unk07     = stream.ReadInt32(isBigEndian);
            Transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
            Unk09     = stream.ReadInt32(isBigEndian);
            Unk10     = stream.ReadInt32(isBigEndian);

            if (Unk10 == 0) // Mostly the same as AeOmniLight, but with 12 floats rather than 10.
            {
                // TODO: Why does OmniLight and SpotLight have different array sizes?
                AeLightType0 LightType0 = new AeLightType0();
                LightType0.SetNumFloats(12);
                LightType0.ReadFromFile(stream, isBigEndian);
                LightInfo = LightType0;
            }
            else if (Unk10 == 1) // This is exactly the same as AeOmniLight. Maybe this is apart of some big type for lights?
            {
                LightInfo = new AeLightType1();
                LightInfo.ReadFromFile(stream, isBigEndian);
            }
            else if (Unk10 == 2) // Mostly the same as AeOmniLight, but with 12 floats rather than 10.
            {
                LightInfo = new AeLightType2();
                LightInfo.ReadFromFile(stream, isBigEndian);
            }
            else
            {
                throw new FileFormatException();
            }
        }
Ejemplo n.º 4
0
 public override void ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     base.ReadFromFile(stream, isBigEndian);
     Unk05     = stream.ReadByte8();
     Unk06     = stream.ReadInt32(isBigEndian);
     Unk07     = stream.ReadInt32(isBigEndian);
     Transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Unk09     = stream.ReadInt32(isBigEndian);
     Unk10     = stream.ReadInt32(isBigEndian);
     Unk08     = new float[10];
     for (int i = 0; i < 10; i++)
     {
         Unk08[i] = stream.ReadSingle(isBigEndian);
     }
     Unk11  = stream.ReadInt32(isBigEndian);
     Unk12  = stream.ReadInt32(isBigEndian);
     Name33 = stream.ReadString16(isBigEndian);
     Unk14  = new float[9];
     for (int i = 0; i < 9; i++)
     {
         Unk14[i] = stream.ReadSingle(isBigEndian);
     }
     Unk15 = stream.ReadByte8();
     Unk16 = new float[12];
     for (int i = 0; i < 12; i++)
     {
         Unk16[i] = stream.ReadSingle(isBigEndian);
     }
 }
Ejemplo n.º 5
0
 public bool ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     Unk01      = stream.ReadInt32(isBigEndian);
     Name1      = stream.ReadString16(isBigEndian);
     Hash1      = stream.ReadUInt64(isBigEndian);
     Hash2      = stream.ReadUInt64(isBigEndian);
     Name2      = stream.ReadString16(isBigEndian);
     Unk02      = stream.ReadInt32(isBigEndian);
     Unk03      = stream.ReadInt32(isBigEndian);
     Unk04      = stream.ReadInt32(isBigEndian);
     Unk05      = stream.ReadByte8();
     Unk06      = stream.ReadInt32(isBigEndian);
     Unk07      = stream.ReadInt32(isBigEndian);
     Transform  = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Hash3      = stream.ReadUInt64(isBigEndian);
     Unk08      = stream.ReadSingle(isBigEndian);
     Hash4      = stream.ReadUInt64(isBigEndian);
     Hash5      = stream.ReadUInt64(isBigEndian);
     Name3      = stream.ReadString16(isBigEndian);
     Unk09      = stream.ReadInt32(isBigEndian);
     Unk10      = stream.ReadInt32(isBigEndian);
     Unk11      = stream.ReadInt32(isBigEndian);
     Unk12      = stream.ReadByte8();
     Unk13      = stream.ReadInt32(isBigEndian);
     Unk14      = stream.ReadInt32(isBigEndian);
     Transform1 = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Hash6      = stream.ReadUInt64(isBigEndian);
     return(true);
 }
Ejemplo n.º 6
0
 public override void ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     base.ReadFromFile(stream, isBigEndian);
     Unk06     = stream.ReadByte8();
     Unk07     = stream.ReadUInt64(isBigEndian);
     Transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Name4     = stream.ReadString16(isBigEndian);
 }
Ejemplo n.º 7
0
 public override void ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     base.ReadFromFile(stream, isBigEndian);
     Unk19      = stream.ReadByte8();
     Unk20      = stream.ReadInt32(isBigEndian);
     Unk21      = stream.ReadInt32(isBigEndian);
     Transform1 = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Unk22      = stream.ReadUInt64(isBigEndian);
 }
Ejemplo n.º 8
0
 public virtual void ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     name           = new HashName(stream, isBigEndian);
     secondaryFlags = stream.ReadInt32(isBigEndian);
     localTransform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     unk3           = stream.ReadInt16(isBigEndian);
     parentIndex1   = new ParentStruct(stream.ReadInt32(isBigEndian));
     parentIndex2   = new ParentStruct(stream.ReadInt32(isBigEndian));
     unk6           = stream.ReadInt16(isBigEndian);
 }
Ejemplo n.º 9
0
 public override void ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     base.ReadFromFile(stream, isBigEndian);
     Unk05     = stream.ReadByte8();
     Unk06     = stream.ReadInt32(isBigEndian);
     Unk07     = stream.ReadInt32(isBigEndian);
     Transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Unk08     = stream.ReadSingle(isBigEndian);
     Unk09     = stream.ReadSingle(isBigEndian);
     Unk10     = stream.ReadSingle(isBigEndian);
 }
Ejemplo n.º 10
0
        public void ReadFromFilePart2(MemoryStream stream, bool isBigEndian)
        {
            //do rest matrices.
            restTransform = new Matrix[skeleton.NumBones[0]];
            for (int i = 0; i != restTransform.Length; i++)
            {
                restTransform[i] = MatrixExtensions.ReadFromFile(stream, isBigEndian);
            }


            //unknown transform.
            unkTransform = MatrixExtensions.ReadFromFile(stream, isBigEndian);

            //attachments.
            int length1 = stream.ReadInt32(isBigEndian);

            attachmentReferences = new AttachmentReference[length1];

            for (int i = 0; i != length1; i++)
            {
                attachmentReferences[i] = new AttachmentReference(stream, isBigEndian);
            }

            //unknwon.
            unkFlags      = stream.ReadUInt32(isBigEndian);
            physSplitSize = stream.ReadInt32(isBigEndian);
            hitBoxSize    = stream.ReadInt32(isBigEndian);

            if (physSplitSize > 0)
            {
                nPhysSplits = stream.ReadInt16(isBigEndian);
            }
            else
            {
                nPhysSplits = 0;
            }

            int totalSplits = 0;

            blendMeshSplits = new WeightedByMeshSplit[nPhysSplits];
            for (int i = 0; i != nPhysSplits; i++)
            {
                blendMeshSplits[i] = new WeightedByMeshSplit(stream, isBigEndian);
                int index = blendInfo.BoneIndexInfos[0].IDs[blendMeshSplits[i].BlendIndex];
                blendMeshSplits[i].JointName = skeleton.BoneNames[index].ToString();
                totalSplits += blendMeshSplits[i].Data.Length;
            }

            hitBoxInfo = new HitBoxInfo[totalSplits];
            for (int i = 0; i != hitBoxInfo.Length; i++)
            {
                hitBoxInfo[i] = new HitBoxInfo(stream, isBigEndian);
            }
        }
Ejemplo n.º 11
0
 public bool ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     Unk01     = stream.ReadInt32(isBigEndian);
     Name1     = stream.ReadString16(isBigEndian);
     Hash1     = stream.ReadUInt64(isBigEndian);
     Hash2     = stream.ReadUInt64(isBigEndian);
     Name2     = stream.ReadString16(isBigEndian);
     Unk02     = stream.ReadInt32(isBigEndian);
     Unk03     = stream.ReadInt32(isBigEndian);
     Unk04     = stream.ReadInt32(isBigEndian);
     Unk05     = stream.ReadByte8();
     Unk06     = stream.ReadInt32(isBigEndian);
     Unk07     = stream.ReadInt32(isBigEndian);
     Transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Unk09     = stream.ReadInt32(isBigEndian);
     Unk10     = stream.ReadInt32(isBigEndian);
     Unk08     = new float[12];
     for (int i = 0; i < 12; i++)
     {
         Unk08[i] = stream.ReadSingle(isBigEndian);
     }
     Unk11 = stream.ReadInt32(isBigEndian);
     Unk12 = stream.ReadInt32(isBigEndian);
     Name3 = stream.ReadString16(isBigEndian);
     Unk14 = new float[20];
     for (int i = 0; i < 20; i++)
     {
         Unk14[i] = stream.ReadSingle(isBigEndian);
     }
     Unk15 = new string[3];
     for (int i = 0; i < 3; i++)
     {
         Unk15[i] = stream.ReadString16(isBigEndian);
     }
     Hash4      = stream.ReadUInt64(isBigEndian);
     Hash5      = stream.ReadUInt64(isBigEndian);
     Name4      = stream.ReadString16(isBigEndian);
     Unk16      = stream.ReadInt32(isBigEndian);
     Unk17      = stream.ReadInt32(isBigEndian);
     Unk18      = stream.ReadInt32(isBigEndian);
     Unk19      = stream.ReadByte8();
     Unk20      = stream.ReadInt32(isBigEndian);
     Unk21      = stream.ReadInt32(isBigEndian);
     Transform1 = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     Unk22      = stream.ReadUInt64(isBigEndian);
     return(true);
 }
Ejemplo n.º 12
0
        public override void ReadFromFile(MemoryStream stream, bool isBigEndian)
        {
            base.ReadFromFile(stream, isBigEndian);
            Unk14 = stream.ReadByte8();
            Hash6 = stream.ReadUInt64(isBigEndian);

            if (Hash6 != 0)
            {
                Hash7      = stream.ReadUInt64(isBigEndian);
                Transform1 = MatrixExtensions.ReadFromFile(stream, isBigEndian);
            }
            else
            {
                Transform1 = MatrixExtensions.ReadFromFile(stream, isBigEndian);
                Hash7      = stream.ReadUInt64(isBigEndian);
            }
        }
Ejemplo n.º 13
0
        public virtual void ReadFromFile(MemoryStream stream, bool isBigEndian)
        {
            name           = new Hash(stream, isBigEndian);
            secondaryFlags = stream.ReadInt32(isBigEndian);
            localTransform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
            unk3           = stream.ReadInt16(isBigEndian);
            parentIndex1   = new ParentStruct(stream.ReadInt32(isBigEndian));
            parentIndex2   = new ParentStruct(stream.ReadInt32(isBigEndian));
            unk6           = stream.ReadInt16(isBigEndian);

            if (SceneData.FrameProperties != null)
            {
                if (SceneData.FrameProperties.FrameExtraData.ContainsKey(name.uHash))
                {
                    extraData = SceneData.FrameProperties.FrameExtraData[name.uHash].Data;
                }
            }
        }
Ejemplo n.º 14
0
 public void ReadFromFile(MemoryStream stream, bool isBigEndian)
 {
     transform = MatrixExtensions.ReadFromFile(stream, isBigEndian);
     bounds    = BoundingBoxExtenders.ReadFromFile(stream, isBigEndian);
     isValid   = stream.ReadByte8();
 }
Ejemplo n.º 15
0
        public void ReadFromFile(MemoryStream stream, bool isBigEndian)
        {
            //all the same values?
            for (int i = 0; i != numBones.Length; i++)
            {
                numBones[i] = stream.ReadInt32(isBigEndian);
            }

            numBlendIDs = stream.ReadInt32(isBigEndian);
            numLods     = stream.ReadInt32(isBigEndian);

            //unknown lod data;
            unkLodData = new int[numLods];
            for (int i = 0; i != unkLodData.Length; i++)
            {
                unkLodData[i] = stream.ReadInt32(isBigEndian);
            }

            idType = stream.ReadByte8();

            //Bone Names and LOD data.
            boneNames = new Hash[numBones[0]];
            for (int i = 0; i != boneNames.Length; i++)
            {
                boneNames[i] = new Hash(stream, isBigEndian);
            }

            //Matrices;
            matrices1 = new Matrix[numBones[1]];
            matrices2 = new Matrix[numBones[3]];

            for (int i = 0; i != matrices1.Length; i++)
            {
                matrices1[i] = MatrixExtensions.ReadFromFile(stream, isBigEndian);
            }

            numUnkCount2 = stream.ReadInt32(isBigEndian);
            boneLODUsage = stream.ReadBytes(numUnkCount2);

            for (int i = 0; i != matrices2.Length; i++)
            {
                matrices2[i] = MatrixExtensions.ReadFromFile(stream, isBigEndian);
            }

            //BoneMappings.
            mappingForBlendingInfos = new MappingForBlendingInfo[numLods];
            for (int i = 0; i != mappingForBlendingInfos.Length; i++)
            {
                mappingForBlendingInfos[i].Bounds = new BoundingBox[numBones[2]];

                for (int x = 0; x != mappingForBlendingInfos[i].Bounds.Length; x++)
                {
                    mappingForBlendingInfos[i].Bounds[x] = BoundingBoxExtenders.ReadFromFile(stream, isBigEndian);
                }
                if (stream.ReadByte() != 0)
                {
                    throw new System.Exception("oops");
                }

                mappingForBlendingInfos[i].RefToUsageArray = stream.ReadBytes(numBones[2]);
                mappingForBlendingInfos[i].UsageArray      = stream.ReadBytes(unkLodData[i]);
            }
        }