コード例 #1
0
        void MoveWorld()
        {
            Vector3 cp = Chunk.GetChunkPos((int)transform.position.x, (int)transform.position.y, (int)transform.position.z);

            if (Math.Abs(cp.x) > 2 || Math.Abs(cp.y) > 2 || Math.Abs(cp.z) > 2)
            {
                ChunkGameObjectHandler.UpdateChunkPositions(cp);
            }
        }
コード例 #2
0
        static void CheckCompletedDrawingWork(CompletedSubChunkDrawingWork cscdw)
        {
            AssignedWorkContainer awc;

            AssignedWork.TryGetValue(cscdw.ChunkPos, out awc);
            AssignedJob aj = awc.TryGetAssignedJob(JobType.Draw);

            aj.CompletedCount += 1;
            Chunk c;

            ChunkHandler.TryGetChunk(aj.OwnerChunkPos, out c);

            if (aj.IsCompleted)
            {
                awc.RemoveAssignedJob(JobType.Draw);
                ChunkGameObjectHandler.UpdateMesh(c.ChunkPos, c.GetMesh()).transform.position = c.ChunkPos * Chunk.CHUNKSIZE;
            }
        }
コード例 #3
0
        public static void DrawChunk(Vector3 chunkPos)
        {
            AssignedWorkContainer awc = GetWorkContainer(chunkPos);

            if (!awc.ContainsWork(JobType.Draw))
            {
                Chunk c;
                TryGetChunk(chunkPos, out c);
                ThreadedSubChunkDrawingWork[] workArr = c.GetSubChunksToDraw();
                if (workArr.Length > 0)
                {
                    awc.AddAssignedJob(JobType.Draw, new AssignedJob(chunkPos, JobType.Draw, workArr));
                    ThreadHandler.EnqueuWork(workArr);
                }
                else
                {
                    ChunkGameObjectHandler.UpdateMesh(c.ChunkPos, c.GetMesh()).transform.position = c.ChunkPos * Chunk.CHUNKSIZE;
                }
            }
        }
コード例 #4
0
        static void CheckCompletedViewDistanceUnloaderWork(CompletedThreadedViewDistanceUnloader ctcduw)
        {
            foreach (Vector3 v in ctcduw.DrawnChunksToUnload)
            {
                ChunkGameObjectHandler.PoolChunk(v);
            }
            int prevCount = ChunkCollection.Count;

            foreach (Vector3 v in ctcduw.LoadedChunksToUnload)
            {
                RemoveChunk(v);
                AssignedWork.Remove(v);
            }

            int finalCount = prevCount - ChunkCollection.Count;

            if (finalCount > 0)
            {
                Debug.Log($"Unloaded {finalCount} chunks");
                Debug.Log($"There are currently {ChunkCollection.Count} loaded chunks");
            }

            NonChunkSpecificWork.Remove(JobType.UnloadOutsideViewDistance);
        }