Example #1
0
        public static IEnumerable <(int x, int y, uint value)> GetValues(this HeatMap heatMap, ulong tileId, uint resolution = 256)
        {
            var(xTile, yTile, scaledResolution) = heatMap.GetTilePosition(tileId);

            if (scaledResolution < resolution)
            {
                throw new NotSupportedException("Upscaling of heatmap not supported.");
            }

            if (scaledResolution > resolution)
            {
                var factor = scaledResolution / resolution;
                for (var x = 0; x < resolution; x++)
                {
                    for (var y = 0; y < resolution; y++)
                    {
                        var xScaled = x * factor;
                        var yScaled = y * factor;
                        var count   = 0U;
                        for (var dx = 0; dx < factor; dx++)
                        {
                            for (var dy = 0; dy < factor; dy++)
                            {
                                count += heatMap[xTile + xScaled + dx, yTile + yScaled + dy];
                            }
                        }
                        if (count != 0)
                        {
                            yield return(x, y, count);
                        }
                    }
                }
            }

            for (var x = 0; x < resolution; x++)
            {
                for (var y = 0; y < resolution; y++)
                {
                    var count = heatMap[xTile + x, yTile + y];
                    if (count != 0)
                    {
                        yield return(x, y, count);
                    }
                }
            }
        }