Exemple #1
0
        private void PathReader(BinaryReaderExt reader)
        {
            reader.ReadInt32();                  // v11
            reader.ReadInt32();                  // v12
            reader.ReadInt32();                  // type
            reader.ReadSingle();                 // startPosTime
            reader.ReadSingle();                 // endPosTime
            reader.ReadSingle();                 // maxSpeed
            reader.ReadSingle();                 // stopRDist
            reader.ReadSingle();                 // cruiseDist
            reader.ReadSingle();                 // totalDist
            reader.ReadInt32();                  // timeKeyDataId
            reader.ReadInt32();                  // iDec
            reader.ReadInt32();                  // iInc
            reader.ReadInt32();                  // bType
            reader.ReadInt32();                  // bId
            reader.ReadInt32();                  // nType
            reader.ReadInt32();                  // nId
            var signalSize = reader.ReadInt32(); // signalSize

            for (var i = 0; i < signalSize; i++)
            {
                reader.ReadInt32(); // id
            }
        }
Exemple #2
0
        private void TimeKeyDataReader(BinaryReaderExt reader)
        {
            reader.ReadInt32();               // id
            var keySize = reader.ReadInt32(); // keySize

            for (var i = 0; i < keySize; i++)
            {
                reader.ReadSingle();  // time0
                reader.ReadVector3(); // pos
                reader.ReadVector3(); // right
                reader.ReadVector3(); // dir
                reader.ReadVector3(); // normal
                reader.ReadVector4(); // quat
            }
        }
Exemple #3
0
        private static double ParseFloat(BinaryReaderExt d, GXAnimDataFormat Format, float Scale)
        {
            d.BigEndian = false;
            switch (Format)
            {
            case GXAnimDataFormat.HSD_A_FRAC_FLOAT:
                return(d.ReadSingle());

            case GXAnimDataFormat.HSD_A_FRAC_S16:
                return(d.ReadInt16() / (double)Scale);

            case GXAnimDataFormat.HSD_A_FRAC_U16:
                return(d.ReadUInt16() / (double)Scale);

            case GXAnimDataFormat.HSD_A_FRAC_S8:
                return(d.ReadSByte() / (double)Scale);

            case GXAnimDataFormat.HSD_A_FRAC_U8:
                return(d.ReadByte() / (double)Scale);

            default:
                return(0);
            }
        }
Exemple #4
0
        public void Read(BinaryReaderExt r)
        {
            r.ReadByte();
            Type = (LVDShapeType)r.ReadInt32();
            X    = r.ReadSingle();
            Y    = r.ReadSingle();
            Z    = r.ReadSingle();
            W    = r.ReadSingle();

            r.ReadByte();

            r.ReadByte();
            int pointCount = r.ReadInt32();

            for (int i = 0; i < pointCount; i++)
            {
                r.Skip(1);
                Points.Add(new LVDVector2(r.ReadSingle(), r.ReadSingle()));
            }
        }
Exemple #5
0
            /// <summary>
            ///
            /// </summary>
            /// <returns></returns>
            public object[] Decode(byte code, BinaryReaderExt r)
            {
                var output = new List <object>(Parameters.Length);

                for (int i = 0; i < Parameters.Length; i++)
                {
                    var k = Parameters[i];

                    switch (k)
                    {
                    case 'e':
                        // extended byte
                        int e = r.ReadByte();

                        if ((e & 0x80) > 0)
                        {
                            e = ((e & 0x7F) << 8 | r.ReadByte());
                        }

                        output.Add((short)e);
                        break;

                    case 'b':
                        output.Add(r.ReadByte());
                        break;

                    case 'f':
                        output.Add(r.ReadSingle());
                        break;

                    case 's':
                        output.Add(r.ReadInt16());
                        break;

                    case 'c':
                    {
                        // custom parameters
                        //var behavior = code >> 4;
                        var param_count = code & 0xF;

                        for (int j = 0; j < 4; j++)
                        {
                            if (((param_count >> i) & 1) == 1)
                            {
                                output.Add(r.ReadByte());
                            }
                        }
                    }
                    break;

                    case 'p':
                    case 'v':
                    {
                        if ((code & 0x01) != 0)
                        {
                            output.Add(r.ReadSingle());
                        }
                        else
                        {
                            output.Add(0);
                        }

                        if ((code & 0x02) != 0)
                        {
                            output.Add(r.ReadSingle());
                        }
                        else
                        {
                            output.Add(0);
                        }

                        if ((code & 0x04) != 0)
                        {
                            output.Add(r.ReadSingle());
                        }
                        else
                        {
                            output.Add(0);
                        }
                    }
                    break;

                    case 'r':
                    {
                        var behavior = r.ReadByte();

                        output.Add((behavior & 0x10) != 0);
                        output.Add((behavior & 0x20) != 0);

                        output.Add(r.ReadByte());

                        if ((behavior & 0x01) != 0)
                        {
                            output.Add(r.ReadByte());
                        }
                        else
                        {
                            output.Add(0);
                        }

                        if ((behavior & 0x02) != 0)
                        {
                            output.Add(r.ReadByte());
                        }
                        else
                        {
                            output.Add(0);
                        }

                        if ((behavior & 0x04) != 0)
                        {
                            output.Add(r.ReadByte());
                        }
                        else
                        {
                            output.Add(0);
                        }

                        if ((behavior & 0x08) != 0)
                        {
                            output.Add(r.ReadByte());
                        }
                        else
                        {
                            output.Add(0);
                        }
                    }
                    break;

                    case 'm':
                    {
                        var behavior = r.ReadByte();

                        if ((behavior & 0x01) != 0)
                        {
                            output.Add(r.ReadByte());
                        }
                        else
                        {
                            output.Add(0);
                        }

                        if ((behavior & 0x08) != 0)
                        {
                            output.Add(r.ReadByte());
                        }
                        else
                        {
                            output.Add(0);
                        }
                    }
                    break;
                    }
                }

                return(output.ToArray());
            }
Exemple #6
0
        public void Read(BinaryReaderExt r, int VersionMinor)
        {
            base.Read(r);

            Flag1       = r.ReadBoolean();
            Rigged      = r.ReadBoolean();
            Flag3       = r.ReadBoolean();
            PassThrough = r.ReadBoolean();

            r.ReadByte();
            int vertCount = r.ReadInt32();

            for (int i = 0; i < vertCount; i++)
            {
                r.ReadByte();
                Vertices.Add(new LVDVector2(r.ReadSingle(), r.ReadSingle()));
            }

            r.ReadByte();
            int normalCount = r.ReadInt32();

            for (int i = 0; i < normalCount; i++)
            {
                r.ReadByte();
                Normals.Add(new LVDVector2(r.ReadSingle(), r.ReadSingle()));
            }

            r.ReadByte();
            int cliffCount = r.ReadInt32();

            for (int i = 0; i < cliffCount; i++)
            {
                var cliff = new LVDCollisionCliff();
                cliff.Read(r);
                Cliffs.Add(cliff);
            }

            r.ReadByte();
            int materialCount = r.ReadInt32();

            for (int i = 0; i < materialCount; i++)
            {
                var material = new LVDCollisionMaterial();
                material.Read(r);
                Materials.Add(material);
            }

            // Ultimate Only?

            if (VersionMinor > 10)
            {
                r.ReadByte();
                var vecCount = r.ReadInt32();
                for (int i = 0; i < vecCount; i++)
                {
                    var vec = new LVDCollisionCurve();
                    vec.Read(r);
                    Curves.Add(vec);
                }
            }
        }
Exemple #7
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);
            r.ReadByte();
            Vector1 = new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
            r.ReadByte();
            Vector2 = new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
            r.ReadByte();

            int vec3Count = r.ReadInt32();

            for (int i = 0; i < vec3Count; i++)
            {
                r.ReadByte();
                Vectors.Add(new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle()));
            }

            r.ReadByte();
            Mat4x4_1 = new float[16];
            for (int i = 0; i < 16; i++)
            {
                Mat4x4_1[i] = r.ReadSingle();
            }

            r.ReadByte();
            Mat4x4_2 = new float[16];
            for (int i = 0; i < 16; i++)
            {
                Mat4x4_2[i] = r.ReadSingle();
            }
        }
Exemple #8
0
        public static KAR_grCollisionNode KCLtoKAR(string kclFile, out KAR_grCollisionTree tree)
        {
            KAR_grCollisionNode node = new KAR_grCollisionNode();

            List <KAR_CollisionTriangle> tris  = new List <KAR_CollisionTriangle>();
            List <GXVector3>             verts = new List <GXVector3>();

            using (FileStream f = new FileStream(kclFile, FileMode.Open))
                using (BinaryReaderExt r = new BinaryReaderExt(f))
                {
                    r.BigEndian = true;

                    var posOffset  = r.ReadInt32();
                    var nrmOffset  = r.ReadInt32();
                    var triOffset  = r.ReadInt32() + 0x10;
                    var partOffste = r.ReadInt32();

                    var triCount = (partOffste - triOffset) / 0x10;
                    for (int i = 0; i < triCount; i++)
                    {
                        r.Seek((uint)(triOffset + i * 0x10));

                        var length = r.ReadSingle();
                        var pi     = r.ReadUInt16();
                        var di     = r.ReadUInt16();
                        var n1     = r.ReadUInt16();
                        var n2     = r.ReadUInt16();
                        var n3     = r.ReadUInt16();
                        var fl     = r.ReadUInt16();

                        r.Seek((uint)(posOffset + pi * 0xC));
                        var position = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());

                        r.Seek((uint)(nrmOffset + di * 0xC));
                        var direction = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());

                        r.Seek((uint)(nrmOffset + n1 * 0xC));
                        var normalA = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());

                        r.Seek((uint)(nrmOffset + n2 * 0xC));
                        var normalB = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());

                        r.Seek((uint)(nrmOffset + n3 * 0xC));
                        var normalC = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());

                        var crossA  = Vector3.Cross(normalA, direction);
                        var crossB  = Vector3.Cross(normalB, direction);
                        var vertex1 = position;
                        var vertex2 = position + crossB * (length / Vector3.Dot(crossB, normalC));
                        var vertex3 = position + crossA * (length / Vector3.Dot(crossA, normalC));

                        tris.Add(new KAR_CollisionTriangle()
                        {
                            Flags = 0x81,
                            V1    = verts.Count + 2,
                            V2    = verts.Count + 1,
                            V3    = verts.Count
                        });

                        // scale
                        vertex1 *= Scale;
                        vertex2 *= Scale;
                        vertex3 *= Scale;

                        vertex1.Y += YTrans;
                        vertex2.Y += YTrans;
                        vertex3.Y += YTrans;

                        verts.Add(new GXVector3()
                        {
                            X = vertex1.X, Y = vertex1.Y, Z = vertex1.Z
                        });
                        verts.Add(new GXVector3()
                        {
                            X = vertex2.X, Y = vertex2.Y, Z = vertex2.Z
                        });
                        verts.Add(new GXVector3()
                        {
                            X = vertex3.X, Y = vertex3.Y, Z = vertex3.Z
                        });
                    }
                }

            {
                var height = verts.Min(e => e.Y) - 10;

                var v1 = new Vector3(-10000, height, -10000);
                var v2 = new Vector3(10000, height, -10000);
                var v3 = new Vector3(10000, height, 10000);
                var v4 = new Vector3(-10000, height, 10000);

                tris.Add(new KAR_CollisionTriangle()
                {
                    Flags = 0x81,
                    V1    = verts.Count,
                    V2    = verts.Count + 1,
                    V3    = verts.Count + 2
                });

                verts.Add(new GXVector3()
                {
                    X = v1.X, Y = v1.Y, Z = v1.Z
                });
                verts.Add(new GXVector3()
                {
                    X = v2.X, Y = v2.Y, Z = v2.Z
                });
                verts.Add(new GXVector3()
                {
                    X = v3.X, Y = v3.Y, Z = v3.Z
                });

                tris.Add(new KAR_CollisionTriangle()
                {
                    Flags = 0x81,
                    V1    = verts.Count,
                    V2    = verts.Count + 1,
                    V3    = verts.Count + 2
                });

                verts.Add(new GXVector3()
                {
                    X = v1.X, Y = v1.Y, Z = v1.Z
                });
                verts.Add(new GXVector3()
                {
                    X = v3.X, Y = v3.Y, Z = v3.Z
                });
                verts.Add(new GXVector3()
                {
                    X = v4.X, Y = v4.Y, Z = v4.Z
                });
            }

            node.Triangles = tris.ToArray();
            node.Vertices  = verts.ToArray();
            node.Joints    = new KAR_CollisionJoint[]
            {
                new KAR_CollisionJoint()
                {
                    VertexStart = 0,
                    VertexSize  = verts.Count,
                    FaceStart   = 0,
                    FaceSize    = tris.Count
                }
            };

            tree = BucketGen.GenerateBucketPartition(node);

            return(node);
        }
Exemple #9
0
        private static void ReadTrack(BinaryReaderExt r, int frameCount, int type, FOBJ_Player track, uint dataOffset, AnimNode node)
        {
            var offset = r.ReadUInt32() + dataOffset;
            var temp   = r.Position;

            r.Seek(offset);

            int   fCount = -1;
            float scale  = 0;

            float[] frame = null, step = null, tan = null;

            if (type == 0x1)
            {
                fCount = r.ReadUInt16();
                r.Skip(2);
                scale = r.ReadSingle();
                float stepb = r.ReadSingle();
                float base2 = r.ReadSingle();

                frame = new float[fCount];
                step  = new float[fCount];
                tan   = new float[fCount];

                for (int i = 0; i < fCount; i++)
                {
                    var v = r.ReadInt32();
                    frame[i] = (v >> 24) & 0xFF;
                    int th = v & 0xFFFFFF;
                    step[i] = base2 + ((th >> 12) & 0xfff) * stepb;
                    tan[i]  = (Sign12Bit(th & 0xfff) / 32f);

                    track.Keys.Add(new FOBJKey()
                    {
                        Frame = frame[i], Value = step[i], Tan = tan[i], InterpolationType = GXInterpolationType.HSD_A_OP_SPL
                    });
                }
            }

            if (type == 0x2)
            {
                fCount = r.ReadUInt16();
                r.Skip(2);
                scale = r.ReadSingle();
                float stepb = r.ReadSingle();
                float base2 = r.ReadSingle();

                frame = new float[fCount];
                step  = new float[fCount];
                tan   = new float[fCount];

                for (int i = 0; i < fCount; i++)
                {
                    frame[i] = r.ReadUInt16() / 32f;
                    step[i]  = base2 + r.ReadUInt16() * stepb;
                    tan[i]   = (r.ReadInt16() / 256f);

                    track.Keys.Add(new FOBJKey()
                    {
                        Frame = frame[i], Value = step[i], Tan = tan[i], InterpolationType = GXInterpolationType.HSD_A_OP_SPL
                    });
                }
            }

            if (type == 0x3)
            {
                fCount = r.ReadUInt16();
                r.Skip(2);
                scale = r.ReadSingle();

                frame = new float[fCount];
                step  = new float[fCount];
                tan   = new float[fCount];

                for (int i = 0; i < fCount; i++)
                {
                    frame[i] = r.ReadSingle();
                    step[i]  = r.ReadSingle();
                    tan[i]   = r.ReadSingle();

                    track.Keys.Add(new FOBJKey()
                    {
                        Frame = frame[i], Value = step[i], Tan = tan[i], InterpolationType = GXInterpolationType.HSD_A_OP_SPL
                    });
                }
            }

            if (type == 0x4)
            {
                float stepb = r.ReadSingle();
                float base2 = r.ReadSingle();
                for (int i = 0; i < frameCount; i++)
                {
                    float v = base2 + stepb * (r.ReadByte());

                    track.Keys.Add(new FOBJKey()
                    {
                        Frame = i, Value = v, InterpolationType = GXInterpolationType.HSD_A_OP_LIN
                    });
                }
            }

            if (type == 0x6)
            {
                for (int i = 0; i < frameCount; i++)
                {
                    float v = r.ReadSingle();

                    track.Keys.Add(new FOBJKey()
                    {
                        Frame = i, Value = v, InterpolationType = GXInterpolationType.HSD_A_OP_LIN
                    });
                }
            }

            r.Seek(temp);
        }
Exemple #10
0
        private static void ReadKeys(BinaryReaderExt r, AnimNode node, int frameCount, FOBJ_Player xtrack, FOBJ_Player ytrack, FOBJ_Player ztrack, bool isIsotrophic, bool isXFixed, bool isYFixed, bool isZFixed, int type, uint dataOffset)
        {
            if (isIsotrophic)
            {
                var temp = r.Position + 4;
                if (!isXFixed && !isYFixed && !isZFixed)
                {
                    var offset = r.ReadUInt32() + r.Position;
                    r.Seek(offset);
                }
                float iss = r.ReadSingle();
                xtrack.Keys.Add(new FOBJKey()
                {
                    Frame = 0, Value = iss, InterpolationType = GXInterpolationType.HSD_A_OP_KEY
                });
                ytrack.Keys.Add(new FOBJKey()
                {
                    Frame = 0, Value = iss, InterpolationType = GXInterpolationType.HSD_A_OP_KEY
                });
                ztrack.Keys.Add(new FOBJKey()
                {
                    Frame = 0, Value = iss, InterpolationType = GXInterpolationType.HSD_A_OP_KEY
                });
                r.Seek(temp);
            }
            else
            {
                if (isXFixed)
                {
                    xtrack.Keys.Add(new FOBJKey()
                    {
                        Frame = 0, Value = r.ReadSingle(), InterpolationType = GXInterpolationType.HSD_A_OP_KEY
                    });
                }
                else
                {
                    ReadTrack(r, frameCount, type, xtrack, dataOffset, node);
                }

                if (isYFixed)
                {
                    ytrack.Keys.Add(new FOBJKey()
                    {
                        Frame = 0, Value = r.ReadSingle(), InterpolationType = GXInterpolationType.HSD_A_OP_KEY
                    });
                }
                else
                {
                    ReadTrack(r, frameCount, type, ytrack, dataOffset, node);
                }

                if (isZFixed)
                {
                    ztrack.Keys.Add(new FOBJKey()
                    {
                        Frame = 0, Value = r.ReadSingle(), InterpolationType = GXInterpolationType.HSD_A_OP_KEY
                    });
                }
                else
                {
                    ReadTrack(r, frameCount, type, ztrack, dataOffset, node);
                }
            }
        }
Exemple #11
0
        public void UserAuthAnswerPacket()
        {
            var packet = new UserAuthAnswerPacket();
            var bytes  = packet.GetBytes();

            using (var ms = new MemoryStream(bytes))
            {
                using (var bs = new BinaryReaderExt(ms))
                {
                    var ticket = bs.ReadUInt32();
                    Assert.AreEqual(packet.Ticket, ticket);

                    var result = bs.ReadInt32();
                    Assert.AreEqual(packet.Result, result);

                    var time = bs.ReadInt32();
                    Assert.AreEqual(packet.Time, time);

                    bs.ReadBytes(64); // Filler

                    var serverListId = bs.ReadUInt16();
                    Assert.AreEqual(packet.ServerListId, serverListId);

                    var serverCount = bs.ReadInt32();
                    Assert.AreEqual(packet.ServerCount, serverCount);

                    // Normally we could read all servers, but for tests only the first
                    // is interesting
                    var serverName = bs.ReadUnicodeStatic(32);
                    StringAssert.AreEqualIgnoringCase(serverName, packet.Servers[0].ServerName);

                    var serverId = bs.ReadUInt32();
                    Assert.AreEqual(packet.Servers[0].ServerId, serverId);

                    var playerCount = bs.ReadSingle();
                    Assert.AreEqual(packet.Servers[0].PlayerCount, playerCount);

                    var maxPlayers = bs.ReadSingle();
                    Assert.AreEqual(packet.Servers[0].MaxPlayers, maxPlayers);

                    var serverState = bs.ReadInt32();
                    Assert.AreEqual(packet.Servers[0].ServerState, serverState);

                    var gameTime = bs.ReadInt32();
                    Assert.AreEqual(packet.Servers[0].GameTime, gameTime);

                    var lobbyTime = bs.ReadInt32();
                    Assert.AreEqual(packet.Servers[0].LobbyTime, lobbyTime);

                    var area1Time = bs.ReadInt32();
                    Assert.AreEqual(packet.Servers[0].Area1Time, area1Time);

                    var area2Time = bs.ReadInt32();
                    Assert.AreEqual(packet.Servers[0].Area2Time, area2Time);

                    var rankingUpdateTime = bs.ReadInt32();
                    Assert.AreEqual(packet.Servers[0].RankingUpdateTime, rankingUpdateTime);

                    var gameServerIp = bs.ReadBytes(4);
                    Assert.AreEqual(packet.Servers[0].GameServerIp, gameServerIp);

                    var lobbyServerIp = bs.ReadBytes(4);
                    Assert.AreEqual(packet.Servers[0].LobbyServerIp, lobbyServerIp);

                    var areaServer1Ip = bs.ReadBytes(4);
                    Assert.AreEqual(packet.Servers[0].AreaServer1Ip, areaServer1Ip);

                    var areaServer2Ip = bs.ReadBytes(4);
                    Assert.AreEqual(packet.Servers[0].AreaServer2Ip, areaServer2Ip);

                    var rankingServerIp = bs.ReadBytes(4);
                    Assert.AreEqual(packet.Servers[0].RankingServerIp, rankingServerIp);

                    var gameServerPort = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].GameServerPort, gameServerPort);

                    var lobbyServerPort = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].LobbyServerPort, lobbyServerPort);

                    var areaServerPort = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].AreaServerPort, areaServerPort);

                    var areaServer2Port = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].AreaServer2Port, areaServer2Port);

                    var areaServerUdpPort = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].AreaServerUdpPort, areaServerUdpPort);

                    var areaServer2UdpPort = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].AreaServer2UdpPort, areaServer2UdpPort);

                    var rankingServerPort = bs.ReadUInt16();
                    Assert.AreEqual(packet.Servers[0].RankingServerPort, rankingServerPort);
                }
            }
        }
Exemple #12
0
            public void Parse(BinaryReaderExt r)
            {
                r.BigEndian = true;

                var start = r.Position;

                var sectionCount        = r.ReadInt32();
                var sectionHeaderLength = r.ReadInt32();

                PlaySpeed = r.ReadSingle();
                EndTime   = r.ReadSingle();

                for (int j = 0; j < sectionCount; j++)
                {
                    Joint joint = new Joint();

                    Joints.Add(joint);

                    joint.Flag1  = r.ReadByte();
                    joint.Flag2  = r.ReadByte();
                    joint.Flag3  = r.ReadUInt16();
                    joint.BoneID = r.ReadInt16();
                    var floatCount = r.ReadInt16();

                    joint.MaxTime = r.ReadSingle();
                    joint.Unknown = r.ReadInt32();

                    var offset1 = r.ReadUInt32() + start;
                    var offset2 = r.ReadUInt32() + start;
                    var offset3 = r.ReadUInt32() + start;
                    var offset4 = r.ReadUInt32() + start;

                    if (offset3 != start)
                    {
                        throw new NotSupportedException("Section 3 detected");
                    }

                    if (offset4 != start)
                    {
                        throw new NotSupportedException("Section 4 detected");
                    }

                    var temp = r.Position;
                    for (uint k = 0; k < floatCount; k++)
                    {
                        Key key = new Key();

                        r.Seek(offset1 + 4 * k);
                        key.Time = r.ReadSingle();

                        if (offset2 != start)
                        {
                            r.Seek(offset2 + 8 * k);

                            key.X = BitConverter.ToSingle(BitConverter.GetBytes(((r.ReadByte() & 0xFF) << 24) | ((r.ReadByte() & 0xFF) << 16)), 0);
                            key.Y = BitConverter.ToSingle(BitConverter.GetBytes(((r.ReadByte() & 0xFF) << 24) | ((r.ReadByte() & 0xFF) << 16)), 0);
                            key.Z = BitConverter.ToSingle(BitConverter.GetBytes(((r.ReadByte() & 0xFF) << 24) | ((r.ReadByte() & 0xFF) << 16)), 0);
                            key.W = BitConverter.ToSingle(BitConverter.GetBytes(((r.ReadByte() & 0xFF) << 24) | ((r.ReadByte() & 0xFF) << 16)), 0);
                        }

                        joint.Keys.Add(key);
                    }


                    r.Seek(temp);
                }
            }
Exemple #13
0
        private void LoadSinglePath(BinaryReaderExt reader)
        {
            /*
             * if ( v3 < 20061102 )
             *  XiReadBTCF::Scanf((XiReadBTCF *)&this->m_Input.vfptr, "%d%d%f", &pathID, &to, &pathDist);
             * else
             *  XiReadBTCF::Scanf((XiReadBTCF *)&this->m_Input.vfptr, "%d%d%d%f\n", &pathID, &from1, &to, &pathDist);
             */
            reader.ReadInt32();  // PathID
            reader.ReadInt32();  // From1
            reader.ReadInt32();  // to
            reader.ReadSingle(); // PathDist

            reader.ReadSingle(); // weight
            reader.ReadInt32();  // roadtype
            reader.ReadSingle(); // minSpeed
            reader.ReadSingle(); // maxSpeed


            if (FileVersion < 20061102)
            {
                reader.ReadInt32(); // dataType
            }
            //if ( v2->m_iVersion < 20061102 )
            // dataType


            /*
             * if ( v2->m_iVersion < 20080327 )
             * {
             *  XiReadBTCF::Scanf((XiReadBTCF *)&v2->m_Input.vfptr, "%f", &width4Road, &"|ü÷ܱG Dzҕ Ǹ");
             *  XiReadBTCF::Scanf((XiReadBTCF *)&v2->m_Input.vfptr, "%f", &width4Side, "?ێƍ ࠞЫҦҮ¶G Ǹ");
             *  hitWidth = 4.0;
             *  v4 = (width4Side - width4Road) * 0.5;
             *  lsw.fSideWay = v4;
             *  rsw.fSideWay = v4;
             * }else
             */
            if (FileVersion < 20080327)
            {
                reader.ReadSingle(); // width4Road
                reader.ReadSingle(); // width4Side
            }
            else
            {
                reader.ReadSingle(); // hitWidth
                reader.ReadSingle(); // lsw
                reader.ReadSingle(); // lsw.fWalkW
                reader.ReadSingle(); // lsw.fWalkH

                reader.ReadSingle(); // rsw
                reader.ReadSingle(); // rsw.fWalkW
                reader.ReadSingle(); // rsw.fWalkH
            }

            reader.ReadSingle();               // laneWidth
            reader.ReadSingle();               // middleWidth
            reader.ReadInt32();                // rCount
            reader.ReadInt32();                // lCount
            reader.ReadInt32();                // bOneWay
            reader.ReadSingle();               // fStart
            reader.ReadSingle();               // fEnd
            var dataSize = reader.ReadInt32(); // dataSize

            for (var i = 0; i < dataSize; i++)
            {
                reader.ReadSingle(); // pos
                reader.ReadSingle(); // posXYZ
                reader.ReadSingle(); // posRGB
                reader.ReadSingle(); // rDist
                reader.ReadSingle(); // lDist
            }
        }
Exemple #14
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(1);
            Type = (LVDDamageShapeType)r.ReadInt32();
            if (!Enum.IsDefined(typeof(LVDDamageShapeType), Type))
            {
                throw new NotImplementedException($"Unknown damage shape type {Type} at offset {r.BaseStream.Position - 4}");
            }

            X = r.ReadSingle();
            Y = r.ReadSingle();
            Z = r.ReadSingle();
            if (Type == LVDDamageShapeType.Sphere)
            {
                Radius = r.ReadSingle();
                Dx     = r.ReadSingle();
                Dy     = r.ReadSingle();
                Dz     = r.ReadSingle();
            }
            if (Type == LVDDamageShapeType.Capsule)
            {
                Dx     = r.ReadSingle();
                Dy     = r.ReadSingle();
                Dz     = r.ReadSingle();
                Radius = r.ReadSingle();
            }
            Unknown1 = r.ReadByte();
            Unknown2 = r.ReadInt32();
        }