private ChunkMeshCluster GetExistingChunkMeshCluster() { availableChunkMeshClusterCount--; ChunkMeshCluster returnChunkMeshCluster = availableChunkMeshClusters.Pop(); return(returnChunkMeshCluster); }
private ChunkMeshCluster CreateNewChunkMeshCluster() { totalChunkMeshClusterCount++; ChunkMeshCluster returnChunkMeshCluster = new ChunkMeshCluster(); return(returnChunkMeshCluster); }
private ChunkMesh GetExistingChunkMesh(ChunkMeshCluster chunkMeshCluster, RendererType rendererType) { availableChunkMeshCount--; ChunkMesh returnChunkMesh = availableChunkMeshes.Pop(); returnChunkMesh.Setup(chunkMeshCluster, rendererType); return(returnChunkMesh); }
public void ReturnChunkMeshCluster(ChunkMeshCluster chunkMeshCluster) { if (chunkMeshCluster == null) { return; } chunkMeshCluster.Clear(); lock (padlock) { availableChunkMeshClusters.Push(chunkMeshCluster); availableChunkMeshClusterCount++; } }
public ChunkMesh GetChunkMesh(ChunkMeshCluster chunkMeshCluster, RendererType rendererType) { lock (padlock) { if (ChunkMeshIsAvailable()) { return(GetExistingChunkMesh(chunkMeshCluster, rendererType)); } else { return(CreateNewChunkMesh(chunkMeshCluster, rendererType)); } } }
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); }
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; }
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); }
public void ClearMeshObject() { ChunkMeshClusterPool.Instance().ReturnChunkMeshCluster(chunkMeshCluster); chunkMeshCluster = null; }