Ejemplo n.º 1
0
            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]);
                }
            }
Ejemplo n.º 2
0
 public void Reset(bool destroying)
 {
     if (!isReset)
     {
         ReturnFrame(destroying);
         isFading     = false;
         endTime      = 0;
         currentFrame = 0;
         framesNeeded = 0;
         fromFrame    = null;
         toFrame      = null;
         isReset      = true;
     }
 }
Ejemplo n.º 3
0
 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));
 }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 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;
 }