public void AddColumnMesh(GeneratedDataInfo <MeshData[]> meshData) { if (_columns.TryGetValue(meshData.coord.XZ(), out ChunkColumn column)) { column.SetMeshData(meshData); } }
public void AddColumn(GeneratedDataInfo <MapData[]> mapData) { ChunkColumn column = _columnsForRecycling.Dequeue(); column.SetMapData(mapData); _columns.Add(mapData.coord.XZ(), column); }
public void SetMeshData(GeneratedDataInfo <MeshData[]> meshData) { for (int i = 0; i < _worldHeight; i++) { Chunks[i].SetMesh(meshData.data[i]); } HasMesh = true; }
public void SetMapData(GeneratedDataInfo <MapData[]> mapData) { Coord = new Vector2Int(mapData.coord.x, mapData.coord.z); for (int i = 0; i < _worldHeight; i++) { Chunks[i].SetBlocks(mapData.data[i].blocks); Chunks[i].SetCoord(new Vector3Int(mapData.coord.x, i, mapData.coord.z)); } HasMesh = false; }
private void OnColumnMeshDataRecieved(GeneratedDataInfo <MeshData[]> meshData) { Vector2Int coord = meshData.coord.XZ(); if (ExistingChunks.TryGetValue(coord, out ChunkColumn column)) { column.SetMeshData(meshData); column.SetVisibility(IsVisible(coord)); } }
// Recieves map data from generator, assignes it for recycled chunk and triggers mesh generation private void OnMapDataReceived(GeneratedDataInfo <MapData[]> mapData) { Vector2Int coord = new Vector2Int(mapData.coord.x, mapData.coord.z); if (IsInsideBorders(coord) && !ExistingChunks.ContainsKey(coord)) { ExistingChunks.AddColumn(mapData); TriggerMeshGeneration(coord); } }
public void ManageRequests() { // Return generated data if (_mapDataQueue.Count > 0) { for (int i = 0; i < _mapDataQueue.Count; i++) { GeneratedDataInfo <MapData[]> mapData = _mapDataQueue.Dequeue(); _dataCallback(mapData); } } }
// Recieves mesh from generator and requests another one if chunk is dirty private void OnChunkMeshDataReceived(GeneratedDataInfo <MeshData> meshData) { if (ExistingChunks.TryGetValue(meshData.coord, out Chunk chunk)) { chunk.SetMesh(meshData.data); if (chunk.IsDirty) { RequestMesh(chunk); chunk.IsDirty = (false); } else { chunk.IsWaitingMesh = (false); } } }