Exemplo n.º 1
0
 public PmxBone()
 {
     this.Position        = new[] { 0f, 0, 0 };
     this.ParentBone      = this.ConnectToBone = -1;
     this.ConnectToOffset = new[] { 0f, 0, 0 };
     this.FixedAxis       = new[] { 0f, 0, 0 };
     this.LocalVectorX    = new[] { 0f, 0, 0 };
     this.LocalVectorZ    = new[] { 0f, 0, 0 };
     this.IK = new PmxIK();
 }
Exemplo n.º 2
0
        public static PmxBone Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxBone
            {
                Name         = doc.ReadString(br),
                EnglishName  = doc.ReadString(br),
                Position     = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                ParentBone   = doc.ReadIndex(br, PmxIndexKind.Bone),
                Priority     = br.ReadInt32(),
                Capabilities = (PmxBoneCapabilities)br.ReadUInt16(),
            };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.ConnectToBone))
            {
                rt.ConnectToBone = doc.ReadIndex(br, PmxIndexKind.Bone);
            }
            else
            {
                rt.ConnectToOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }
            };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.RotationAffected) ||
                rt.Capabilities.HasFlag(PmxBoneCapabilities.MovementAffected))
            {
                rt.AffectedBone  = doc.ReadIndex(br, PmxIndexKind.Bone);
                rt.AffectionRate = br.ReadSingle();
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.FixedAxis))
            {
                rt.FixedAxis = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }
            }
            ;

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.LocalAxis))
            {
                rt.LocalVectorX = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
                rt.LocalVectorZ = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.TransformByExternalParent))
            {
                rt.ExternalParentKey = br.ReadInt32();
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.IK))
            {
                rt.IK = PmxIK.Parse(br, doc);
            }

            return(rt);
        }