Exemple #1
0
 public static void Lerp(ref PoseData buffor, PoseData first, PoseData next, float factor)
 {
     for (int i = 0; i < first.Count; i++)
     {
         buffor.SetBone(BoneData.Lerp(first.GetBoneData(i), next.GetBoneData(i), factor), i);
     }
 }
Exemple #2
0
        public float CalculateCost(PoseData toPose, PoseCostType type)
        {
            float cost = 0f;

            for (int i = 0; i < Count; i++)
            {
                cost += bones[i].CalculateCost(toPose.GetBoneData(i), type);
            }
            return(cost);
        }
        protected override void Enter(PoseData currentPose, Trajectory previouStateGoal, List <float2> whereCanFindingBestPose)
        {
            NativeArray <float2>       findingIntervals    = new NativeArray <float2>(whereCanFindingBestPose.ToArray(), Allocator.TempJob);
            NativeArray <FrameContact> contactPointsNative = new NativeArray <FrameContact>(logicLayer.contactPoints.Count, Allocator.TempJob);

            //making native contactsl
            for (int i = 0; i < logicLayer.contactPoints.Count; i++)
            {
                contactPointsNative[i] = logicLayer.contactPoints[i].frameContact;
            }
            // Geting native pose
            for (int i = 0; i < currentPose.Count; i++)
            {
                logicLayer.nativePose[i] = currentPose.GetBoneData(i);
            }

            //Geting natve trajectory
            for (int i = 0; i < previouStateGoal.Length; i++)
            {
                logicLayer.nativeTrajectory[i] = previouStateGoal.GetPoint(i);
            }

            ImpactAnimationFinding(
                logicLayer.nativePose,
                findingIntervals,
                contactPointsNative,
                logicLayer.nativeTrajectory
                );

            findingIntervals.Dispose();
            contactPointsNative.Dispose();

            currentDataIndex     = logicLayer.bestPoseInfo.clipIndex;
            currentClipLocalTime = (float)logicLayer.bestPoseInfo.localTime;

            playableGraph.CreateBlendMotionMatchingAnimation(
                dataState.motionDataGroups[currentMotionDataGroupIndex].animationData[currentDataIndex],
                currentDataIndex,
                stateMixer,
                currentClipLocalTime,
                1f,
                blendingSpeeds,
                currentWeights,
                animationsSequences,
                this.logicLayer.GetPassIK(),
                this.logicLayer.GetFootPassIK(),
                1f
                );
            currentPlayedClipsIndexes.Add(currentDataIndex);
        }
        protected override void Enter(PoseData currentPose, Trajectory previouStateGoal, List <float2> whereCanFindingBestPose)
        {
            for (int i = 0; i < currentPose.Count; i++)
            {
                logicLayer.nativePose[i] = currentPose.GetBoneData(i);
            }

            for (int i = 0; i < previouStateGoal.Length; i++)
            {
                logicLayer.nativeTrajectory[i] = previouStateGoal.GetPoint(i);
            }

            if (this.dataState.sectionsDependencies != null)
            {
                SetCurrentSection(this.dataState.startSection);
            }

            SwitchMotionDataGroup();
            GetCurrentClipsInfo();
            MotionMatchingFinding(
                logicLayer.nativePose,
                logicLayer.nativeTrajectory
                );
            JobHandle.ScheduleBatchedJobs();
            JobHandle.CompleteAll(jobsHandle);
            JoinJobsOutput();

            currentDataIndex = logicLayer.bestPoseInfo.clipIndex;
            currentPlayedClipsIndexes.Add(currentDataIndex);
            playableGraph.CreateBlendMotionMatchingAnimation(
                dataState.motionDataGroups[currentMotionDataGroupIndex].animationData[currentDataIndex],
                logicLayer.bestPoseInfo.clipIndex,
                stateMixer,
                logicLayer.bestPoseInfo.localTime,
                this.dataState.mmFeatures.blendTime,
                blendingSpeeds,
                currentWeights,
                animationsSequences,
                this.logicLayer.GetPassIK(),
                this.logicLayer.GetFootPassIK(),
                1.0f,
                this.dataState.mmFeatures.minWeightToAchive
                );

            //CreateMMAnimation(this.dataState.mmFeatures.blendTime, 1f);
        }
        protected override void Enter(
            PoseData currentPose,
            Trajectory previouStateGoal,
            List <float2> whereCanFindingBestPose
            )
        {
            NativeArray <float2> findingIntervals = new NativeArray <float2>(whereCanFindingBestPose.ToArray(), Allocator.TempJob);

            for (int i = 0; i < currentPose.Count; i++)
            {
                logicLayer.nativePose[i] = currentPose.GetBoneData(i);
            }

            for (int i = 0; i < previouStateGoal.Length; i++)
            {
                logicLayer.nativeTrajectory[i] = previouStateGoal.GetPoint(i);
            }

            SingleAnimationFinding(
                logicLayer.nativePose,
                logicLayer.nativeTrajectory,
                findingIntervals
                );

            findingIntervals.Dispose();

            currentDataIndex     = logicLayer.bestPoseInfo.clipIndex;
            currentClipLocalTime = (float)logicLayer.bestPoseInfo.localTime;

            playableGraph.CreateBlendMotionMatchingAnimation(
                dataState.motionDataGroups[currentMotionDataGroupIndex].animationData[currentDataIndex],
                currentDataIndex,
                stateMixer,
                currentClipLocalTime,
                dataState.saFeatures.blendTime,
                blendingSpeeds,
                currentWeights,
                animationsSequences,
                this.logicLayer.GetPassIK(),
                this.logicLayer.GetFootPassIK(),
                1f
                );

            currentPlayedClipsIndexes.Add(currentDataIndex);
        }
        protected override void Enter(
            PoseData currentPose,
            Trajectory previouStateGoal,
            List <float2> whereCanFindingBestPose
            )
        {
            // valus initzialization
            gettingAdaptedPoints    = true;
            targetContactPointIndex = 0;

            NativeArray <float2>       findingIntervals    = new NativeArray <float2>(whereCanFindingBestPose.ToArray(), Allocator.TempJob);
            NativeArray <FrameContact> contactPointsNative = new NativeArray <FrameContact>(logicLayer.contactPoints.Count, Allocator.TempJob);

            //making native contactsl
            for (int i = 0; i < logicLayer.contactPoints.Count; i++)
            {
                contactPointsNative[i] = logicLayer.contactPoints[i].frameContact;
            }

            // making native pose
            for (int i = 0; i < currentPose.Count; i++)
            {
                logicLayer.nativePose[i] = currentPose.GetBoneData(i);
            }


            for (int i = 0; i < previouStateGoal.Length; i++)
            {
                logicLayer.nativeTrajectory[i] = previouStateGoal.GetPoint(i);
            }

            ContactAnimationFinding(
                logicLayer.nativePose,
                findingIntervals,
                contactPointsNative,
                logicLayer.nativeTrajectory
                );

            findingIntervals.Dispose();
            contactPointsNative.Dispose();


            currentDataIndex     = logicLayer.bestPoseInfo.clipIndex;
            currentClipLocalTime = (float)logicLayer.bestPoseInfo.localTime;

            playableGraph.CreateBlendMotionMatchingAnimation(
                dataState.motionDataGroups[currentMotionDataGroupIndex].animationData[currentDataIndex],
                currentDataIndex,
                stateMixer,
                currentClipLocalTime,
                1f,
                blendingSpeeds,
                currentWeights,
                animationsSequences,
                this.logicLayer.GetPassIK(),
                this.logicLayer.GetFootPassIK(),
                1f
                );

            currentPlayedClipsIndexes.Add(currentDataIndex);

            if (dataState.csFeatures.contactStateType == ContactStateType.NormalContacts)
            {
                switch (this.contactType)
                {
                case ContactStateMovemetType.StartContact:
                    SC_Enter();
                    break;

                case ContactStateMovemetType.ContactLand:
                    CL_Enter();
                    break;

                case ContactStateMovemetType.StartContactLand:
                    SCL_Enter();
                    break;

                case ContactStateMovemetType.StartLand:
                    SL_Enter();
                    break;

                case ContactStateMovemetType.Contact:
                    CL_Enter();
                    break;
                }

                if (dataState.csFeatures.rotateToStart)
                {
                    Vector3 dir = logicLayer.contactPoints[1].frameContact.position - logicLayer.contactPoints[0].frameContact.position;
                    dir = Vector3.ProjectOnPlane(dir, Vector3.up);
                    dir = this.GetCurrentMMData().fromFirstToSecondContactRot *dir;

                    rotationToContact = Quaternion.LookRotation(dir, Vector3.up);

                    float rotationTime = (this.GetCurrentMMData().GetContactStartTime(0) - currentClipLocalTime) / dataState.speedMultiplier;

                    if (rotationTime == 0)
                    {
                        rotationTime = 0.00001f;
                    }
                    else if (rotationTime < 0)
                    {
                        rotationTime = Mathf.Abs(rotationTime);
                    }

                    degreeSpeed = Quaternion.Angle(this.Transform.rotation, rotationToContact) / rotationTime;
                }

#if UNITY_EDITOR
                startTime  = currentClipLocalTime;
                previewPos = Transform.position;
#else
                if (dataState.csFeatures.postionCorrection == ContactPointPositionCorrectionType.LerpPosition)
                {
                    startTime  = currentClipLocalTime;
                    previewPos = Transform.position;
                }
#endif
            }
        }