Esempio n. 1
0
 public void AddBoneKeyFrame(PmxBoneData bone, VmdMotionFrameData frame)
 {
     if (frame.FrameTime >= 0)
     {
         BoneFrameDict[bone].Add(frame);
     }
 }
Esempio n. 2
0
        public void AddBoneKeyFrame(PmxBoneData bone, Vector3 pos, Quaternion rot, CubicBezierCurve curve, int frameOffset = 0, int priority = 0)
        {
            var frame = new VmdMotionFrameData(bone.BoneName, World.FrameCount + World.FrameOffset + frameOffset, pos, rot);

            frame.InterpolationPointX1 = frame.InterpolationPointY1 = frame.InterpolationPointZ1 = curve.P1;
            frame.InterpolationPointX2 = frame.InterpolationPointY2 = frame.InterpolationPointZ2 = curve.P2;
            World.VmdSequence.AddBoneKeyFrame(frame, priority);
        }
Esempio n. 3
0
 public override PmxBoneData[] CreateBones(World wolrd, ShotProperty prop)
 {
     PmxBoneData[] result = new PmxBoneData[Data.BoneArray.Length];
     for (int i = 0; i < result.Length; i++)
     {
         result[i] = CloneUtil.Clone(Data.BoneArray[i]);
     }
     return(result);
 }
Esempio n. 4
0
        public void Init(PmxBoneData data, PmxBones bones)
        {
            TargetBone = bones[data.IkTargetId];

            Childs = new PmxIKChild[data.IkChilds.Length];
            for (int i = 0; i < Childs.Length; i++)
            {
                var childData = data.IkChilds[i];
                Childs[i] = new PmxIKChild(bones[childData.ChildId], childData.AngleMin, childData.AngleMax);
            }
        }
Esempio n. 5
0
        public CurtainFireModel(World world)
        {
            World = world;

            PmxBoneData centerBone = new PmxBoneData()
            {
                BoneName = "センター",
                ParentId = -1,
                Flag     = 0x0002 | 0x0004 | 0x0008 | 0x0010
            };

            BoneList.Add(centerBone);
        }
        public ModelBoneCollection(World world)
        {
            World = world;

            PmxBoneData centerBone = new PmxBoneData()
            {
                BoneName = "センター",
                ParentId = -1,
                Flag     = BoneFlags.ROTATE | BoneFlags.MOVE | BoneFlags.VISIBLE | BoneFlags.OP,
            };

            BoneList.Add(centerBone);
        }
Esempio n. 7
0
        public PmxBone(PmxBoneData data)
        {
            BoneName   = data.BoneName;
            Depth      = data.Depth;
            Flag       = data.Flag;
            LinkWeight = data.LinkWeight;

            OffsetPos  = data.Pos;
            InvInitMat = new Matrix4(Matrix3.Identity, -OffsetPos);

            if (Flag.HasFlag(BoneFlags.IK))
            {
                IK = new PmxIK(this, data);
            }
        }
Esempio n. 8
0
        public void Init(PmxBoneData data, PmxBones bones)
        {
            if (0 <= data.ParentId && data.ParentId < bones.Count)
            {
                ParentBone = bones[data.ParentId];
                OffsetPos  = (Vector4)OffsetPos * ParentBone.InvInitMat;
            }

            if (Flag.HasFlag(BoneFlags.MOVE_LINK) | Flag.HasFlag(BoneFlags.ROTATE_LINK))
            {
                LinkParent = bones[data.LinkParentId];
            }

            if (Flag.HasFlag(BoneFlags.IK))
            {
                IK.Init(data, bones);
            }
        }
Esempio n. 9
0
        private void SetupBone(ShotModelData data, params PmxBoneData[] bones)
        {
            for (int i = 0; i < bones.Length; i++)
            {
                PmxBoneData bone = bones[i];

                bone.BoneName = data.Property.Type.Name[0] + (BoneList.Count - 1).ToString();
                bone.Flag     = 0x0002 | 0x0004 | 0x0010;
                bone.BoneId   = BoneList.Count + i;

                if (-1 < bone.ParentId && bone.ParentId < bones.Length)
                {
                    bone.ParentId = BoneList.IndexOf(bones[bone.ParentId]);
                }
                else
                {
                    bone.ParentId = 0;
                }
                BoneList.Add(bone);
            }
        }
        public void SetupBone(ShotModelData data, params PmxBoneData[] bones)
        {
            for (int i = 0; i < bones.Length; i++)
            {
                PmxBoneData bone = bones[i];

                bone.BoneName = $"B_{(BoneList.Count - 1).ToString()}";
                bone.Flag     = BoneFlags.ROTATE | BoneFlags.MOVE | BoneFlags.OP;
                bone.BoneId   = BoneList.Count + i;

                if (-1 < bone.ParentId && bone.ParentId < bones.Length)
                {
                    bone.ParentId = BoneList.IndexOf(bones[bone.ParentId]);
                }
                else
                {
                    bone.ParentId = 0;
                }
                BoneList.Add(bone);
            }
        }
Esempio n. 11
0
 public PmxIK(PmxBone bone, PmxBoneData data)
 {
     IKBone     = bone;
     Depth      = data.Depth;
     LimitAngle = data.AngleLimit;
 }