示例#1
0
        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);
        }