public void TrackVisibleChunks(World gameContext) { Int3 aPos = playerInfo.PositionI.AlignedDown(16); for (int x = -128; x < 144; x += 16) { for (int z = -128; z < 144; z += 16) { Int2 testPoint = new Int2(x + aPos.X, z + aPos.Z); if (gameContext.regionInfos.TryGetValue(testPoint, out var regionInfo)) { for (int y = regionInfo.m_minHeight; y < regionInfo.m_maxHeight; y += 16) { var chunkPosition = new Int3(aPos.X + x, y, aPos.Z + z); //var chunk1 = gameCore.GetExistChunk(chunkPosition.x, chunkPosition.y, chunkPosition.z); //if (playerInfo.visibleChunks.TryGetValue(chunkPosition, out var timeStamp1)) //{ // if (chunk1 != null && chunk1.stamp > timeStamp1) // { // playerInfo.visibleChunks[chunkPosition] = chunk1.stamp; // NetBlock netBlock = netContext.GetNetBlock(1802856547/*'kuhc'*/, Chunk.c_minimumSize); // GUtility.ToNetBlock(chunk1, netBlock); // wrapLayout.SendNetBlock(netBlock); // } //} //else if (chunk1 != null) //{ // playerInfo.visibleChunks[chunkPosition] = chunk1.stamp; // NetBlock netBlock = netContext.GetNetBlock(1802856547/*'kuhc'*/, Chunk.c_minimumSize); // GUtility.ToNetBlock(chunk1, netBlock); // wrapLayout.SendNetBlock(netBlock); //} } playerInfo.visibleRegions[testPoint] = regionInfo.m_recentUpdateTimeStamp; } } } List <Int3> chunkCullResult = new List <Int3>(); foreach (var pair in playerInfo.visibleChunks) { Int3 a = pair.Key - playerInfo.PositionI + new Int3(8, 8, 8); if (Math.Abs(a.X) + Math.Abs(a.Z) > 512) { chunkCullResult.Add(pair.Key); } } for (int j = 0; j < chunkCullResult.Count; j++) { playerInfo.visibleChunks.Remove(chunkCullResult[j]); } }
public void RemoveUnusedChunks() { List <Int3> chunkCullResult = new List <Int3>(); foreach (var pair in visibleChunks) { Int3 a = pair.Key - PositionI + new Int3(8, 8, 8); if (Math.Abs(a.X) + Math.Abs(a.Z) > 512) { chunkCullResult.Add(pair.Key); } } for (int j = 0; j < chunkCullResult.Count; j++) { visibleChunks.Remove(chunkCullResult[j]); } }