public SoundPathPoint(EndianReader reader)
 {
     X = reader.ReadSingle();
     reader.Skip(4); // Unknown
     Y = reader.ReadSingle();
     Duration = reader.ReadInt32();
 }
示例#2
0
        public float unk11; //almost always 1

        #endregion Fields

        #region Constructors

        public Block_0A03(EndianReader reader)
            : base(reader, 0x0A03)
        {
            unk11 = reader.ReadSingle();
        }
示例#3
0
        public Vector Data; //relative position coords

        #endregion Fields

        #region Constructors

        public PosBlock_FA02(EndianReader reader)
            : base(reader, 0xFA02)
        {
            Data = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
        }
示例#4
0
        public MatrixBlock_F900(EndianReader reader)
            : base(reader, 0xF900)
        {
            var m11 = reader.ReadSingle();
            var m12 = reader.ReadSingle();
            var m13 = reader.ReadSingle();
            reader.ReadSingle(); //0.0f

            var m21 = reader.ReadSingle();
            var m22 = reader.ReadSingle();
            var m23 = reader.ReadSingle();
            reader.ReadSingle(); //0.0f

            var m31 = reader.ReadSingle();
            var m32 = reader.ReadSingle();
            var m33 = reader.ReadSingle();
            reader.ReadSingle(); //0.0f

            var m41 = reader.ReadSingle();
            var m42 = reader.ReadSingle();
            var m43 = reader.ReadSingle();
            reader.ReadSingle(); //1.0f

            Data = new Matrix4x3(
                m11, m12, m13,
                m21, m22, m23,
                m31, m32, m33,
                m41, m42, m43);
        }
示例#5
0
        public int DataCount; //always 1

        #endregion Fields

        #region Constructors

        public BoundsBlock_1D01(EndianReader reader)
            : base(reader, 0x1D01)
        {
            DataCount = reader.ReadInt32();
            var min = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
            var max = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());

            Data.XBounds = new Range<float>(min.X, max.X);
            Data.YBounds = new Range<float>(min.Y, max.Y);
            Data.ZBounds = new Range<float>(min.Z, max.Z);
        }
示例#6
0
        public BoneBlock_E902(EndianReader reader)
            : base(reader, 0xE902)
        {
            unk00 = reader.ReadSingle();

            _FA02 = new PosBlock_FA02(reader);

            if (reader.PeekUInt16() == 0xEA02)
                _EA02 = new unkBlock_XXXX(reader, 0xEA02);

            _FB02 = new Block_FB02(reader);

            if (reader.PeekUInt16() == 0xEB02)
                _EB02 = new unkBlock_XXXX(reader, 0xEB02);

            _FC02 = new Block_FC02(reader);

            if (reader.PeekUInt16() == 0xEC02)
                _EC02 = new unkBlock_XXXX(reader, 0xEC02);

            _0A03 = new Block_0A03(reader);

            if (reader.PeekUInt16() == 0xED02)
                _ED02 = new unkBlock_XXXX(reader, 0xED02);

            //technically not part of the block
            reader.ReadInt16(); //0100
            reader.ReadInt32(); //address
        }
示例#7
0
        public float unk08, unk09, unk10; //almost always 1/1/1

        #endregion Fields

        #region Constructors

        public Block_FC02(EndianReader reader)
            : base(reader, 0xFC02)
        {
            unk08 = reader.ReadSingle();
            unk09 = reader.ReadSingle();
            unk10 = reader.ReadSingle();
        }
示例#8
0
        public Block_2002(EndianReader reader)
            : base(reader, 0x2002)
        {
            unk0 = reader.ReadInt32(); // ]
            unk1 = reader.ReadInt32(); // ] unknown purpose, often all 60
            unk2 = reader.ReadInt32(); // ]

            var min = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
            var max = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
            Bounds = new BoundingBox()
            {
                XBounds = new Range<float>(min.X, max.X),
                YBounds = new Range<float>(min.Y, max.Y),
                ZBounds = new Range<float>(min.Z, max.Z),
            };
            unkPos0 = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
        }
示例#9
0
        public Block_0503(EndianReader reader)
            : base(reader, 0x0503)
        {
            reader.ReadInt16(); //0D03
            reader.ReadInt32(); //EOB

            DataCount = reader.ReadInt32();
            unk0 = reader.ReadInt16(); //always 3
            unk1 = reader.ReadByte(); //0, 2 or 3

            if (unk1 != 3)
            {
                for (int i = 0; i < DataCount; i++)
                {
                    var m11 = reader.ReadSingle();
                    var m12 = reader.ReadSingle();
                    var m13 = reader.ReadSingle();
                    reader.ReadSingle(); //0.0f

                    var m21 = reader.ReadSingle();
                    var m22 = reader.ReadSingle();
                    var m23 = reader.ReadSingle();
                    reader.ReadSingle(); //0.0f

                    var m31 = reader.ReadSingle();
                    var m32 = reader.ReadSingle();
                    var m33 = reader.ReadSingle();
                    reader.ReadSingle(); //0.0f

                    var m41 = reader.ReadSingle();
                    var m42 = reader.ReadSingle();
                    var m43 = reader.ReadSingle();
                    reader.ReadSingle(); //1.0f

                    Data.Add(
                        new Matrix4x3(
                            m11, m12, m13,
                            m21, m22, m23,
                            m31, m32, m33,
                            m41, m42, m43));
                }
            }

            //technically not part of the block
            reader.ReadInt16(); //0100
            reader.ReadInt32(); //address
        }
示例#10
0
        public float[] unkf = new float[8]; //material related

        #endregion Fields

        #region Constructors

        public Block_2001(EndianReader reader)
            : base(reader, 0x2001)
        {
            for (int i = 0; i < 8; i++)
                unkf[i] = reader.ReadSingle();
        }
示例#11
0
        public float unkf0, unkf1; //material related

        #endregion Fields

        #region Constructors

        public Block_1C01(EndianReader reader)
            : base(reader, 0x1C01)
        {
            unkf0 = reader.ReadSingle();
            unkf1 = reader.ReadSingle();
        }
示例#12
0
        public VertexBlock_F100(EndianReader reader, bool loadMesh, int geomUnk01)
            : base(reader, 0xF100)
        {
            DataCount = reader.ReadInt32();
            Data = new Vertex[DataCount];
            if (DataCount == 0) return;

            if (geomUnk01 != 134 && geomUnk01 != 142)
            {
                CentreX = reader.ReadInt16();
                CentreY = reader.ReadInt16();
                CentreZ = reader.ReadInt16();
                RadiusX = reader.ReadInt16();
                RadiusY = reader.ReadInt16();
                RadiusZ = reader.ReadInt16();
            }

            if (!loadMesh) reader.SeekTo(EOBOffset);
            else for (int i = 0; i < DataCount; i++)
            {
                Vertex v;

                if (geomUnk01 == 134 || geomUnk01 == 142)
                {
                    v = new Vertex() { FormatName = "S3D_World" };
                    var data = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                    v.Values.Add(new VertexValue(data, VertexValue.ValueType.Float32_3, "position", 0));
                }
                else
                {
                    v = new Vertex() { FormatName = "S3D_Compressed" };
                    var data = new Vector(reader.ReadInt16(), reader.ReadInt16(), reader.ReadInt16(), reader.ReadInt16());
                    v.Values.Add(new VertexValue(data, VertexValue.ValueType.Int16_N4, "position", 0));
                }
                Data[i] = v;
            }
        }
 public SoundPathRandomRange(EndianReader reader)
 {
     HorizontalRange = reader.ReadSingle();
     VerticalRange = reader.ReadSingle();
 }
示例#14
0
 public RTPCPoint(EndianReader reader)
 {
     X = reader.ReadSingle();
     Y = reader.ReadSingle();
     CurveShape = (RTPCCurveShape)reader.ReadInt32();
 }
示例#15
0
        public VertexValue(XmlNode Node, EndianReader reader)
        {
            if (Convert.ToInt32(Node.Attributes["stream"].Value) > 0) throw new NotSupportedException("Multi-streamed vertices not supported");
            Type = (ValueType)Enum.Parse(typeof(ValueType), Node.Attributes["type"].Value);
            Usage = Node.Attributes["usage"].Value;
            UsageIndex = Convert.ToInt32(Node.Attributes["usageIndex"].Value);
            
            switch (Type)
            {
                case ValueType.Float32_2:
                    Data = new Vector(reader.ReadSingle(), reader.ReadSingle());
                    break;

                case ValueType.Float32_3:
                    Data = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                    break;

                case ValueType.Float32_4:
                    Data = new Vector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                    break;

                case ValueType.Int8_N4:
                    Data = new Vector((float)reader.ReadByte() / (float)0x7F, (float)reader.ReadByte() / (float)0x7F, (float)reader.ReadByte() / (float)0x7F, (float)reader.ReadByte() / (float)0x7F);
                    break;

                case ValueType.UInt8_2:
                    Data = new Vector(reader.ReadByte(), reader.ReadByte(), 0, 0);
                    break;

                case ValueType.UInt8_3:
                    Data = new Vector(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), 0);
                    break;

                case ValueType.UInt8_4:
                    Data = Vector.FromUByte4(reader.ReadUInt32());
                    break;

                case ValueType.UInt8_N2:
                    Data = new Vector((float)reader.ReadByte() / (float)0xFF, (float)reader.ReadByte() / (float)0xFF, 0, 0);
                    break;

                case ValueType.UInt8_N3:
                    Data = new Vector((float)reader.ReadByte() / (float)0xFF, (float)reader.ReadByte() / (float)0xFF, (float)reader.ReadByte() / (float)0xFF, 0);
                    break;

                case ValueType.UInt8_N4:
                    Data = Vector.FromUByteN4(reader.ReadUInt32());
                    break;

                case ValueType.Int16_N3:
                    Data = new Vector(((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF, ((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF, ((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF, 0);
                    break;

                case ValueType.Int16_N4:
                    Data = new Vector(((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF, ((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF, ((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF, ((float)reader.ReadInt16() + (float)0x7FFF) / (float)0xFFFF);
                    break;

                case ValueType.UInt16_2:
                    Data = new Vector(reader.ReadUInt16(), reader.ReadUInt16());
                    break;

                case ValueType.UInt16_4:
                    Data = new Vector(reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16());
                    break;

                case ValueType.UInt16_N2:
                    Data = new Vector((float)reader.ReadUInt16() / (float)0xFFFF, (float)reader.ReadUInt16() / (float)0xFFFF);
                    break;

                case ValueType.UInt16_N4:
                    Data = new Vector((float)reader.ReadUInt16() / (float)0xFFFF, (float)reader.ReadUInt16() / (float)0xFFFF, (float)reader.ReadUInt16() / (float)0xFFFF, (float)reader.ReadUInt16() / (float)0xFFFF);
                    break;

                case ValueType.DecN4:
                    Data = Vector.FromDecN4(reader.ReadUInt32());
                    break;

                case ValueType.UDecN4:
                    Data = Vector.FromUDecN4(reader.ReadUInt32());
                    break;

                case ValueType.DHenN3:
                    Data = Vector.FromDHenN3(reader.ReadUInt32());
                    break;

                case ValueType.UDHenN3:
                    Data = Vector.FromUDHenN3(reader.ReadUInt32());
                    break;

                case ValueType.HenDN3:
                    Data = Vector.FromHenDN3(reader.ReadUInt32());
                    break;

                case ValueType.UHenDN3:
                    Data = Vector.FromUHenDN3(reader.ReadUInt32());
                    break;

                case ValueType.Float16_2:
                    Data = new Vector(Half.ToHalf(reader.ReadUInt16()), Half.ToHalf(reader.ReadUInt16()));
                    break;

                case ValueType.Float16_4:
                    Data = new Vector(Half.ToHalf(reader.ReadUInt16()), Half.ToHalf(reader.ReadUInt16()), Half.ToHalf(reader.ReadUInt16()), Half.ToHalf(reader.ReadUInt16()));
                    break;

                case ValueType.D3DColour:
                    reader.ReadUInt32();
                    break;
            }
        }