Beispiel #1
0
        List <MotionPosState> GetIntermediatePos()
        {
            List <MotionPosState> res = new List <MotionPosState>();
            int nowFrame = 0;

            for (int i = 0; i < tackPoints_.Count; i++)
            {
                var       nowTack  = tackPoints_[i];
                TackPoint prevTack = (i > 0)
                                        ? tackPoints_[i - 1]
                                        : new TackPoint();

                for (int i2 = 0; i2 < nowTack.span_; i2++)
                {
                    var intermediate = MotionPos.MakeIntermediate2(
                        prevTack.motionData_.mPos,
                        nowTack.motionData_.mPos,
                        nowTack.start_, nowTack.span_, nowFrame);
                    res.Add(intermediate);
                    nowFrame++;
                }
            }

            return(res);
        }
        ////タックのデータをサブウインドウに移す
        // void SetHoldPartsData(enPartsType partsType, Vector2Int pos, PartsTransformState partsTransform, MotionHoldState motionHold)
        //{
        //	//この段階でエディタ用のパーツごとの位置補正がされるので、全体反転や全体回転もここで加味する
        //	//反転が入っている場合は左右があるパーツは、X位置を反転させ、逆側の基礎位置を使用する
        //	if (motionHold.mirror) pos.x = -pos.x;
        //	//回転が入っている場合は基礎位置設定後、原点パーツが原点になるように移動させ、原点を中心に回転し、移動させた分をそのまま戻す

        //	pos += BasePosition.GetPosEdit(partsType, motionHold.mirror);
        //	//HOLDは足下原点ではなく、ボディ原点にする
        //	pos -= BasePosition.GetPosEdit(enPartsType.Body, false);
        //	Vector2Int tempPos = pos;
        //	switch ((enPartsRotate)motionHold.rotate)
        //	{
        //		case enPartsRotate.Rotate0:
        //			break;
        //		case enPartsRotate.Rotate90:
        //			pos.x = -tempPos.y;
        //			pos.y = tempPos.x;
        //			break;
        //		case enPartsRotate.Rotate180:
        //			pos.x = -tempPos.x;
        //			pos.y = -tempPos.y;
        //			break;
        //		case enPartsRotate.Rotate270:
        //			pos.x = tempPos.y;
        //			pos.y = -tempPos.x;
        //			break;
        //	}
        //	//pos += BasePosition.GetPosEdit(enPartsType.Body, false);
        //	partsTransform.rotate = ((partsTransform.rotate + motionHold.rotate) % 360);

        //}

        void SetupPartsPos()
        {
            //Pos
            var selectedFrameAndPrevPos = parent_.GetActiveScore().GetSelectedFrameAndPrevPos(selectedFrame_);

            if (selectedFrameAndPrevPos.Count == 0)
            {
                return;
            }

            TackPoint prevTack = (selectedFrameAndPrevPos.Count == 2)
                                ? selectedFrameAndPrevPos[1]
                                : new TackPoint(); //最初のタックは前がないのでニュートラル

            TackPoint selectedTack = selectedFrameAndPrevPos[0];

            //中間モーション生成
            var intermediate = MotionPos.MakeIntermediate2(
                prevTack.motionData_.mPos,
                selectedTack.motionData_.mPos,
                selectedTack.start_, selectedTack.span_, selectedFrame_);

            sendMotion_.stPos = intermediate;
        }