private int CalculateSkyLights(World level, ChunkColumn[] chunks) { var calcCount = 0; var calcTime = new Stopwatch(); var lastCount = 0; foreach (var chunk in chunks) { if (!_visitedColumns.TryAdd(chunk, true)) { continue; } if (chunk == null) { continue; } if (chunk.isAllAir) { continue; } calcTime.Restart(); if (RecalcSkyLight(chunk, level)) { calcCount++; var elapsedMilliseconds = calcTime.ElapsedMilliseconds; var c = Visits.Sum(pair => pair.Value); if (elapsedMilliseconds > 0) { Log.Debug($"Recalc skylight for #{calcCount} (air={chunk.isAllAir}) chunks. Time {elapsedMilliseconds}ms and {c - lastCount} visits"); } lastCount = c; //PrintVisits(); } } Log.Debug($"Recalc skylight for #{calcCount} chunk."); return(calcCount); }