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); } }
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 } }