Example #1
0
        internal static void ComputeRecursiveShadowcasting(PhysicsMap map, int playerX, int playerY, int maxRadius, bool lightWalls)
        {
            map.ClearVisibility();

            if ( maxRadius == 0 ) 
            {
                int max_radius_x = map.Width - playerX;
                int max_radius_y = map.Height - playerY;
                max_radius_x = Math.Max(max_radius_x, playerX);
                max_radius_y = Math.Max(max_radius_y, playerY);
                maxRadius = (int)(Math.Sqrt(max_radius_x * max_radius_x + max_radius_y * max_radius_y)) + 1;
            }
            int r2 = maxRadius * maxRadius;
            /* recursive shadow casting */
            for (int oct = 0; oct < 8; oct++)
            {
                CastLight(map, playerX, playerY, 1, 1.0f, 0.0f, maxRadius, r2, mult[0,oct], mult[1,oct], mult[2,oct], mult[3,oct], 0, lightWalls);
            }
            map.Cells[playerX, playerY].Visible = true;
        }