// NOTE: we must renounce chunk computing in the display thread // to ensure that we don't scuttle the buffers with overlapping compute calls public async Task <ColumnAndHeightMap <ChunkGenData> > ComputeColumnAtAsync(Column <ChunkGenData> column, Func <IntVector3, ChunkGenData> GetFromMemory) { //...Set data for the heightmap ColumnAndHeightMap <ChunkGenData> cah = new ColumnAndHeightMap <ChunkGenData>(); cah.column = column; cah.heightMap = new HeightMap(vGenConfig.ColumnFootprint); var keys = cah.column.Keys.ToArray(); int dbugComputedCount = 0; for (int i = 0; i < keys.Length; ++i) { var data = GetFromMemory(cah.column.position.ToIntVector3XZWithY(keys[i])); if (data == null) { dbugComputedCount++; data = (ChunkGenData)(await ComputeGenData(cah.column.position.ToIntVector3XZWithY(keys[i]))); } cah.column[keys[i]] = data; } //TODO: set height map data //int[] heights = CVoxelMapFormat.BufferCountArgs.GetData<int>(cvoxelMapData.MapHeights); //TODO: fill with actual data //FAKENESS int[] heights = FakeChunkData.FakeHeights(vGenConfig.ChunkSize, keys.OrderByDescending((k) => k).ToArray()[0]); cah.heightMap.setData(heights); return(cah); }
IEnumerator ComputeGenDataFAKE(IntVector3 chunkPos) { ChunkGenData c = FakeChunkData.StairsGenData(chunkPos, vGenConfig.ChunkSize, 5); yield return(new WaitForEndOfFrame()); yield return(new WaitForSeconds(.05f)); yield return(c); }
public static void TestWriteCGD() { var cgd = FakeChunkData.StairsGenData(IntVector3.zero, new IntVector3(64)); Debug.Log("aboud to write"); DBUGFirstFew(cgd); WriteAsyncDebug(cgd, GenDataFullPath(cgd.chunkPos), () => { var reCGD = Read(cgd.chunkPos); DBUGFirstFew(reCGD); bool eq = DBUGEqual(reCGD, cgd); Debug.Log("Are they equal (read and written)? : " + eq); }); Debug.Log("This gets called on main thread"); }
private void FakeInit() { Init(IntVector3.zero, FakeChunkData.Stairs(vGenConfig.ChunkSize)); }