Esempio n. 1
0
        protected override void ComputeSingleStep()
        {
            if (i >= toCheck.Length)
            {
                Done = true;
                return;
            }
            Index2 tile = toCheck[i];

            i++;
            Angle angle = ToAngle(lightPosition - tile);

            if (obstacles[tile.X, tile.Y] > 0)
            {
                float increment = MathHelper.TwoPi / (8 * (tile - lightPosition).Length());
                obstructedArea.Add(new AnglePair(angle - 0.5f * increment, angle + 0.5f * increment));
                ComputeSingleStep();
                return;
            }
            if (obstructedArea.ContainsAny(angle))
            {
                ComputeSingleStep();
                return;
            }
            Current = tile;
        }