Beispiel #1
0
        /// <summary>
        /// Initialize Curve manipulation for Rigs
        /// </summary>
        public CurveManipulation(GameObject target, RigGoalController controller, int frame, Transform mouthpiece, AnimationTool.CurveEditMode manipMode, int zoneSize, double tangentContinuity)
        {
            isHuman            = true;
            manipulationMode   = manipMode;
            initialMouthMatrix = mouthpiece.worldToLocalMatrix;
            Frame      = frame;
            Target     = target;
            continuity = tangentContinuity;

            List <AnimationSet> previousSets = new List <AnimationSet>();

            controller.AnimToRoot.ForEach(x =>
            {
                if (null != x)
                {
                    previousSets.Add(new AnimationSet(x));
                }
            });
            humanData = new HumanData()
            {
                Animations      = previousSets,
                Controller      = controller,
                ObjectAnimation = new AnimationSet(controller.Animation),
                InitFrameMatrix = controller.MatrixAtFrame(frame)
            };
            if (manipulationMode == AnimationTool.CurveEditMode.Segment)
            {
                startFrame = frame - zoneSize;
                endFrame   = frame + zoneSize;
                AddSegmentHierarchy(controller, frame);
                AddSegmentKeyframes(frame, controller.Animation);
            }
            if (manipulationMode == AnimationTool.CurveEditMode.Tangents)
            {
                startFrame = humanData.ObjectAnimation.GetCurve(AnimatableProperty.RotationX).GetPreviousKeyFrame(frame);
                endFrame   = humanData.ObjectAnimation.GetCurve(AnimatableProperty.RotationX).GetNextKeyFrame(frame);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Initialize Curve Manipulation for objects
        /// </summary>
        public CurveManipulation(GameObject target, int frame, Transform mouthpiece, AnimationTool.CurveEditMode manipMode, int zoneSize, double tanCont)
        {
            isHuman          = false;
            manipulationMode = manipMode;
            AnimationSet previousSet = GlobalState.Animation.GetObjectAnimation(target);

            initialMouthMatrix = mouthpiece.worldToLocalMatrix;
            Target             = target;
            Frame      = frame;
            continuity = tanCont;


            if (!previousSet.GetCurve(AnimatableProperty.PositionX).Evaluate(frame, out float posx))
            {
                posx = target.transform.localPosition.x;
            }
            if (!previousSet.GetCurve(AnimatableProperty.PositionY).Evaluate(frame, out float posy))
            {
                posy = target.transform.localPosition.y;
            }
            if (!previousSet.GetCurve(AnimatableProperty.PositionZ).Evaluate(frame, out float posz))
            {
                posz = target.transform.localPosition.z;
            }
            if (!previousSet.GetCurve(AnimatableProperty.RotationX).Evaluate(frame, out float rotx))
            {
                rotx = target.transform.localEulerAngles.x;
            }
            if (!previousSet.GetCurve(AnimatableProperty.RotationY).Evaluate(frame, out float roty))
            {
                roty = target.transform.localEulerAngles.y;
            }
            if (!previousSet.GetCurve(AnimatableProperty.RotationZ).Evaluate(frame, out float rotz))
            {
                rotz = target.transform.localEulerAngles.z;
            }
            if (!previousSet.GetCurve(AnimatableProperty.ScaleX).Evaluate(frame, out float scax))
            {
                scax = target.transform.localScale.x;
            }
            if (!previousSet.GetCurve(AnimatableProperty.ScaleY).Evaluate(frame, out float scay))
            {
                scay = target.transform.localScale.y;
            }
            if (!previousSet.GetCurve(AnimatableProperty.ScaleZ).Evaluate(frame, out float scaz))
            {
                scaz = target.transform.localScale.z;
            }

            Vector3    initialPosition = new Vector3(posx, posy, posz);
            Quaternion initialRotation = Quaternion.Euler(rotx, roty, rotz);
            Vector3    initialScale    = new Vector3(scax, scay, scaz);

            objectData = new ObjectData()
            {
                Animation                       = new AnimationSet(previousSet),
                InitialParentMatrix             = target.transform.parent.localToWorldMatrix,
                InitialParentMatrixWorldToLocal = target.transform.parent.worldToLocalMatrix,
                InitialTRS                      = Matrix4x4.TRS(initialPosition, initialRotation, initialScale),
                ScaleIndice                     = 1f
            };
            if (manipulationMode == AnimationTool.CurveEditMode.Zone)
            {
                startFrame = frame - zoneSize;
                endFrame   = frame + zoneSize;
            }
            if (manipulationMode == AnimationTool.CurveEditMode.Segment)
            {
                startFrame = frame - zoneSize;
                endFrame   = frame + zoneSize;
                AddSegmentKeyframes(frame, previousSet);
            }
            if (manipMode == AnimationTool.CurveEditMode.Tangents)
            {
                startFrame = objectData.Animation.GetCurve(AnimatableProperty.PositionX).GetPreviousKeyFrame(frame);
                endFrame   = objectData.Animation.GetCurve(AnimatableProperty.PositionX).GetNextKeyFrame(frame);
            }
        }