Esempio n. 1
0
        private ChunkMeshCluster GetExistingChunkMeshCluster()
        {
            availableChunkMeshClusterCount--;
            ChunkMeshCluster returnChunkMeshCluster = availableChunkMeshClusters.Pop();

            return(returnChunkMeshCluster);
        }
Esempio n. 2
0
        private ChunkMeshCluster CreateNewChunkMeshCluster()
        {
            totalChunkMeshClusterCount++;
            ChunkMeshCluster returnChunkMeshCluster = new ChunkMeshCluster();

            return(returnChunkMeshCluster);
        }
Esempio n. 3
0
        private ChunkMesh GetExistingChunkMesh(ChunkMeshCluster chunkMeshCluster, RendererType rendererType)
        {
            availableChunkMeshCount--;
            ChunkMesh returnChunkMesh = availableChunkMeshes.Pop();

            returnChunkMesh.Setup(chunkMeshCluster, rendererType);
            return(returnChunkMesh);
        }
Esempio n. 4
0
        public void ReturnChunkMeshCluster(ChunkMeshCluster chunkMeshCluster)
        {
            if (chunkMeshCluster == null)
            {
                return;
            }
            chunkMeshCluster.Clear();

            lock (padlock) {
                availableChunkMeshClusters.Push(chunkMeshCluster);
                availableChunkMeshClusterCount++;
            }
        }
Esempio n. 5
0
 public ChunkMesh GetChunkMesh(ChunkMeshCluster chunkMeshCluster, RendererType rendererType)
 {
     lock (padlock) {
         if (ChunkMeshIsAvailable())
         {
             return(GetExistingChunkMesh(chunkMeshCluster, rendererType));
         }
         else
         {
             return(CreateNewChunkMesh(chunkMeshCluster, rendererType));
         }
     }
 }
Esempio n. 6
0
        public void GenerateMesh(Chunk northChunk, Chunk southChunk,
                                 Chunk westChunk, Chunk eastChunk,
                                 Chunk aboveChunk, Chunk belowChunk)
        {
            if (chunkMeshCluster == null)
            {
                chunkMeshCluster = ChunkMeshClusterPool.Instance().GetChunkMeshCluster();
            }

            SetLoadState(ChunkLoadState.MeshCalculating);
            needsMeshUpdate = false;
            chunkMeshCluster.Setup(this);
            chunkMeshCluster.Generate(northChunk, southChunk, westChunk, eastChunk, aboveChunk, belowChunk);
        }
Esempio n. 7
0
        public Chunk(ChunkSpacePosition worldPosition)
        {
            padlock = new object();

            unload  = false;
            visible = true;
            dirty   = true;

            models = new List <Model>();
            generatingModelsLock = new object();

            worldGenerator   = new WorldGenerator();
            isShorelineCache = new bool[SIZE, SIZE];

            generateBlocksWorkFunction = new BatchProcessor.WorkFunction(GenerateBlocksThread);

            chunkMeshCluster = null;

            SetLoadState(ChunkLoadState.LoadingFromDisk);
            needsMeshUpdate = false;

            lights           = new List <BlockLight>();
            modificationList = new Queue <BlockModification>();
            adjacentTransparencyModificationList = new Queue <AdjacentTransparencyModification>(2000);

            // Get the instance variables ready
            blocks = new Block[SIZE, SIZE, SIZE];
            int xIttr, yIttr, zIttr;

            for (xIttr = 0; xIttr < SIZE; xIttr++)
            {
                for (yIttr = 0; yIttr < SIZE; yIttr++)
                {
                    for (zIttr = 0; zIttr < SIZE; zIttr++)
                    {
                        blocks[xIttr, yIttr, zIttr] = new Block(BlockType.Air);
                    }
                }
            }
            this.worldPosition = worldPosition;

            isInChunkProcessingList = false;
        }
Esempio n. 8
0
        private ChunkMesh CreateNewChunkMesh(ChunkMeshCluster chunkMeshCluster, RendererType rendererType)
        {
            totalChunkMeshCount++;
            Vector3 position;

            if (chunkMeshCluster != null && chunkMeshCluster.chunk != null)
            {
                position.x = chunkMeshCluster.chunk.WorldPosition().x *Chunk.SIZE;
                position.y = chunkMeshCluster.chunk.WorldPosition().y *Chunk.SIZE;
                position.z = chunkMeshCluster.chunk.WorldPosition().z *Chunk.SIZE;
            }
            else
            {
                position = Vector3.zero;
            }
            GameObject chunkMeshPrefab = UnityEngine.Object.Instantiate(World.Instance().getChunkMeshPrefab(), position, Quaternion.identity) as GameObject;
            ChunkMesh  returnChunkMesh = chunkMeshPrefab.GetComponent("ChunkMesh") as ChunkMesh;

            returnChunkMesh.Setup(chunkMeshCluster, rendererType);
            return(returnChunkMesh);
        }
Esempio n. 9
0
 public void ClearMeshObject()
 {
     ChunkMeshClusterPool.Instance().ReturnChunkMeshCluster(chunkMeshCluster);
     chunkMeshCluster = null;
 }