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)); } }