示例#1
0
        public override void Open(HSDReader Reader)
        {
            Type = Reader.ReadInt16();
            int PathPointCount = Reader.ReadInt16();

            Tension = Reader.ReadSingle();
            uint PointTableOffset = Reader.ReadUInt32();

            TotalLength = Reader.ReadSingle();
            uint segmentLengthOffset = Reader.ReadUInt32();

            if (Reader.ReadInt32() != 0)                   // this is a pointer to a float array of length 5?
            {
                Console.WriteLine("Resave not supported"); //throw new NotSupportedException("Dat not supported");
            }
            Reader.Seek(PointTableOffset);
            for (int i = 0; i < PathPointCount; i++)
            {
                Points.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()));
            }

            Reader.Seek(segmentLengthOffset);
            for (int i = 0; i < PathPointCount; i++)
            {
                SegmentLengths.Add(Reader.ReadSingle());
            }
        }
示例#2
0
        private static float[] Read(HSDReader d, GXCompType type, int size)
        {
            switch (type)
            {
            case GXCompType.UInt16: size /= 2; break;

            case GXCompType.Int16: size /= 2; break;

            case GXCompType.Float: size /= 4; break;
            }

            float[] a = new float[size];

            switch (type)
            {
            case GXCompType.UInt8:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadByte();
                }
                break;

            case GXCompType.Int8:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadSByte();
                }
                break;

            case GXCompType.UInt16:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadUInt16();
                }
                break;

            case GXCompType.Int16:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadInt16();
                }
                break;

            case GXCompType.Float:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadSingle();
                }
                break;

            default:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadByte();
                }
                break;
            }

            return(a);
        }
示例#3
0
        public override void Open(HSDReader Reader)
        {
            Vertices.Clear();
            Links.Clear();
            AreaTables.Clear();

            var vertexOffset = Reader.ReadUInt32();
            var vertexCount  = Reader.ReadInt32();
            var linkOffset   = Reader.ReadUInt32();
            var linkCount    = Reader.ReadInt32();

            Unknown1 = Reader.ReadInt32();
            Unknown2 = Reader.ReadInt32();
            Unknown3 = Reader.ReadInt16();
            Unknown4 = Reader.ReadInt16();
            Unknown5 = Reader.ReadInt16();
            Unknown6 = Reader.ReadInt16();
            Unknown7 = Reader.ReadInt32();
            var polyOffset = Reader.ReadUInt32();
            var polyCount  = Reader.ReadInt32();

            Unknown8 = Reader.ReadInt32();

            Reader.Seek(vertexOffset);
            for (int i = 0; i < vertexCount; i++)
            {
                var v = new SBM_GrCollVertex();
                v.Open(Reader);
                Vertices.Add(v);
            }
            Reader.Seek(linkOffset);
            for (int i = 0; i < linkCount; i++)
            {
                var v = new SBM_GrCollLink();
                v.Open(Reader);
                Links.Add(v);
            }
            Reader.Seek(polyOffset);
            for (int i = 0; i < polyCount; i++)
            {
                var v = new SBM_GrCollAreaTable();
                v.Open(Reader);
                AreaTables.Add(v);
            }
        }
示例#4
0
        private static double ReadVal(HSDReader d, GXAnimDataFormat Format, float Scale)
        {
            d.BigEndian = false;
            switch (Format)
            {
            case GXAnimDataFormat.Float:
                return(d.ReadSingle());

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

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

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

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

            default:
                return(0);
            }
        }
示例#5
0
        public override void Open(HSDReader Reader)
        {
            var partitionPointer = Reader.ReadUInt32();
            var partitionCount   = Reader.ReadInt16();

            Reader.ReadInt16();

            {
                var temp = Reader.Position();
                Reader.Seek(partitionPointer);
                uint[] pointers = new uint[partitionCount];
                for (int i = 0; i < partitionCount; i++)
                {
                    pointers[i] = Reader.ReadUInt32();
                }
                for (int i = 0; i < partitionCount; i++)
                {
                    Reader.Seek(pointers[i]);
                    KAR_GrPartition p = new KAR_GrPartition();
                    p.Open(Reader);
                    Partitions.Add(p);
                }
                Reader.Seek(temp);
            }

            // now for a few sections
            // there are 5
            // 1 - collidable triangles
            // 2 - ? related to pads
            // 3 - ?
            // 4 - ?
            // 5 - ?
            // 32 Data Type
            // 32 pointer
            // 16 count
            // 16 padding

            {
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();

                var temp = Reader.Position();
                Reader.Seek(pointer);
                for (int i = 0; i < count; i++)
                {
                    CollidableTriangles.Add(Reader.ReadInt16());
                }
                Reader.Seek(temp);
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();

                var temp = Reader.Position();
                Reader.Seek(pointer);
                for (int i = 0; i < count; i++)
                {
                    UnknownIndices.Add(Reader.ReadInt16());
                }
                Reader.Seek(temp);
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();

                var temp = Reader.Position();
                Reader.Seek(pointer);
                for (int i = 0; i < count; i++)
                {
                    UnknownIndices2.Add(Reader.ReadInt16());
                }
                Reader.Seek(temp);
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();
            }

            if (Reader.ReadInt32() != 0)
            {
                throw new NotSupportedException("Dat format not supported");
            }

            // one more bool section, usually all false?

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();
                var temp = Reader.Position();

                Reader.Seek(pointer);
                // TODO: bit reader
                Reader.Seek(temp);
            }
        }