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; }