public void StartCrossfade(SnapshotMeshFrameData fromFrame, SnapshotMeshFrameData toFrame) { Reset(false); isReset = false; this.fromFrame = fromFrame; this.toFrame = toFrame; int vertexLength = fromFrame.verts.Length; if (positionJobs == null) { positionJobs = AllocatedArray <LerpVector3Job> .Get(framesNeeded); } if (boundsJobs == null) { boundsJobs = AllocatedArray <CalculateBoundsJob> .Get(framesNeeded); } if (positionJobHandles == null) { positionJobHandles = AllocatedArray <JobHandle> .Get(framesNeeded); } if (boundsJobHandles == null) { boundsJobHandles = AllocatedArray <JobHandle> .Get(framesNeeded); } if (output == null) { output = AllocatedArray <NativeArray <Vector3> > .Get(framesNeeded); } from = new NativeArray <Vector3>(vertexLength, Allocator.Persistent); to = new NativeArray <Vector3>(vertexLength, Allocator.Persistent); from.CopyFrom(fromFrame.verts); to.CopyFrom(toFrame.verts); for (int i = 0; i < framesNeeded; i++) { output[i] = new NativeArray <Vector3>(vertexLength, Allocator.Persistent); float delta = i / (float)framesNeeded; var lerpJob = new LerpVector3Job() { from = from, to = to, output = output[i], delta = delta }; positionJobs[i] = lerpJob; positionJobHandles[i] = lerpJob.Schedule(vertexLength, 64); var boundsJob = new CalculateBoundsJob() { positions = output[i] }; boundsJobs[i] = boundsJob; boundsJobHandles[i] = boundsJob.Schedule(positionJobHandles[i]); } }
public void Reset(bool destroying) { if (!isReset) { ReturnFrame(destroying); isFading = false; endTime = 0; currentFrame = 0; framesNeeded = 0; fromFrame = null; toFrame = null; isReset = true; } }
public override bool Equals(object obj) { if (obj is SnapshotMeshFrameData) { SnapshotMeshFrameData other = (SnapshotMeshFrameData)obj; if (other.verts.Length != verts.Length) { return(false); } for (int i = 0; i < other.verts.Length; i++) { if (verts[i] != other.verts[i]) { return(false); } } return(true); } return(base.Equals(obj)); }
public override void SetFrameData(int frame, MeshFrameDataBase frameData) { var snapshotData = new SnapshotMeshFrameData(); snapshotData.exposedTransforms = frameData.exposedTransforms; snapshotData.rootMotionPosition = frameData.rootMotionPosition; snapshotData.rootMotionRotation = frameData.rootMotionRotation; var tempData = decompressedFrameData; if (tempData == null) { tempData = new SnapshotMeshFrameData[frame + 1]; } if (tempData.Length <= frame) { System.Array.Resize(ref tempData, frame + 1); } tempData[frame] = snapshotData; decompressedFrameData = tempData; }
public override void CreateBakedAssets(string path, List <List <Vector3> > meshFramePositions, List <List <Vector3> > frameNormals) { if (decompressedFrameData == null) { decompressedFrameData = new SnapshotMeshFrameData[meshFramePositions.Count]; } else if (decompressedFrameData.Length != meshFramePositions.Count) { System.Array.Resize(ref decompressedFrameData, meshFramePositions.Count); } for (int i = 0; i < meshFramePositions.Count; i++) { if (decompressedFrameData[i] == null) { decompressedFrameData[i] = new SnapshotMeshFrameData(); } decompressedFrameData[i].SetVerts(meshFramePositions[i].ToArray()); if (meshNormalMode == MeshNormalMode.Baked) { decompressedFrameData[i].normals = frameNormals[i].ToArray(); } } compressedFrameData = decompressedFrameData; }