Beispiel #1
0
        public void Read(EndianBinaryReader r)
        {
            var basePosition = r.Position;

            r.AssertMagicText("anod");

            this.BoneIndex = r.ReadUInt16();

            var isRotationShort = r.ReadUInt16() != 0;

            this.RotationX.AreRotationsShort = isRotationShort;
            this.RotationY.AreRotationsShort = isRotationShort;
            this.RotationZ.AreRotationsShort = isRotationShort;


            var translationXOffset = r.ReadUInt16();
            var translationYOffset = r.ReadUInt16();
            var translationZOffset = r.ReadUInt16();

            var rotationXOffset = r.ReadUInt16();
            var rotationYOffset = r.ReadUInt16();
            var rotationZOffset = r.ReadUInt16();

            var scaleXOffset = r.ReadUInt16();
            var scaleYOffset = r.ReadUInt16();
            var scaleZOffset = r.ReadUInt16();

            r.AssertUInt16(0x00);

            if (translationXOffset != 0)
            {
                r.Subread(basePosition + translationXOffset,
                          sr => this.TranslationX.Read(sr));
            }
            if (translationYOffset != 0)
            {
                r.Subread(basePosition + translationYOffset,
                          sr => this.TranslationY.Read(sr));
            }
            if (translationZOffset != 0)
            {
                r.Subread(basePosition + translationZOffset,
                          sr => this.TranslationZ.Read(sr));
            }

            if (rotationXOffset != 0)
            {
                r.Subread(basePosition + rotationXOffset,
                          sr => this.RotationX.Read(sr));
            }
            if (rotationYOffset != 0)
            {
                r.Subread(basePosition + rotationYOffset,
                          sr => this.RotationY.Read(sr));
            }
            if (rotationZOffset != 0)
            {
                r.Subread(basePosition + rotationZOffset,
                          sr => this.RotationZ.Read(sr));
            }

            if (scaleXOffset != 0)
            {
                r.Subread(basePosition + scaleXOffset,
                          sr => this.ScaleX.Read(sr));
            }
            if (scaleYOffset != 0)
            {
                r.Subread(basePosition + scaleYOffset,
                          sr => this.ScaleY.Read(sr));
            }
            if (scaleZOffset != 0)
            {
                r.Subread(basePosition + scaleZOffset,
                          sr => this.ScaleZ.Read(sr));
            }
        }