예제 #1
0
        private void BlitFadedCircle(Rect r, float val)
        {
            r.halfHeight = r.halfWidth;
            Point min = new Point {
                x = r.centreX - r.halfWidth, y = r.centreY - r.halfHeight
            };
            Point max = new Point {
                x = r.centreX + r.halfWidth, y = r.centreY + r.halfHeight
            };
            float maxDistSqr = r.halfWidth * r.halfWidth;

            for (int y = min.y; y < max.y; ++y)
            {
                for (int x = min.x; x < max.x; ++x)
                {
                    if (!GridUtilities.IsGridPosSafe(x, y, _width, _height))
                    {
                        continue;
                    }
                    float distSqr = GridUtilities.DistanceSqr(r.centreX, r.centreY, x, y);
                    float scale   = 1 - (distSqr / maxDistSqr);
                    if (scale < 0)
                    {
                        continue;
                    }
                    float addition = val * scale;
                    _map[GridUtilities.GridPosToIndex(x, y, _width)] += addition;
                }
            }
        }
예제 #2
0
        public int QueueQueryForBestZero(int originX, int originY)
        {
            Point best = new Point {
                x = originX, y = originY
            };
            float bestDistSqr = 9999;

            for (int y = 0; y < _height; ++y)
            {
                for (int x = 0; x < _width; ++x)
                {
                    if (x == originX && y == originY)
                    {
                        continue;
                    }
                    float queryDistSqr = GridUtilities.DistanceSqr(originX, originY, x, y);
                    if (queryDistSqr < bestDistSqr)
                    {
                        best.x      = x;
                        best.y      = y;
                        bestDistSqr = queryDistSqr;
                    }
                }
            }
            QueueSetPixel(best.x, best.y, 5.55f);
            return(0);
        }
예제 #3
0
 public int QueueSetPixel(int x, int y, float val)
 {
     if (!GridUtilities.IsGridPosSafe(x, y, _width, _height))
     {
         return(0);
     }
     _map[GridUtilities.GridPosToIndex(x, y, _width)] = val;
     return(0);
 }
예제 #4
0
        private void BlitSolidRect(Rect r, float val)
        {
            Point min = new Point {
                x = r.centreX - r.halfWidth, y = r.centreY - r.halfHeight
            };
            Point max = new Point {
                x = r.centreX + r.halfWidth, y = r.centreY + r.halfHeight
            };

            for (int y = min.y; y < max.y; ++y)
            {
                for (int x = min.x; x < max.x; ++x)
                {
                    if (!GridUtilities.IsGridPosSafe(x, y, _width, _height))
                    {
                        continue;
                    }
                    _map[GridUtilities.GridPosToIndex(x, y, _width)] += val;
                }
            }
        }
예제 #5
0
        public string DebugPrint()
        {
            StringBuilder sb = new StringBuilder(2048);

            for (int y = 0; y < _height; ++y)
            {
                for (int x = 0; x < _width; ++x)
                {
                    int   i   = GridUtilities.GridPosToIndex(x, y, _width);
                    float val = _map[i];
                    if (val != 0)
                    {
                        sb.Append(val.ToString("0.00"));
                    }
                    else
                    {
                        sb.Append("    ");
                    }
                    sb.Append(", ");
                }
                sb.Append("\n");
            }
            return(sb.ToString());
        }