public static void LightTiles(int firstX, int lastX, int firstY, int lastY)
{
Main.render = true;
Lighting.oldSkyColor = Lighting.skyColor;
float num1 = (float)Main.tileColor.R / (float)byte.MaxValue;
float num2 = (float)Main.tileColor.G / (float)byte.MaxValue;
float num3 = (float)Main.tileColor.B / (float)byte.MaxValue;
Lighting.skyColor = (float)(((double)num1 + (double)num2 + (double)num3) / 3.0);
if (Lighting.lightMode < 2)
{
Lighting.brightness = 1.2f;
Lighting.offScreenTiles2 = 34;
Lighting.offScreenTiles = 40;
}
else
{
Lighting.brightness = 1f;
Lighting.offScreenTiles2 = 18;
Lighting.offScreenTiles = 23;
}
if (Main.player[Main.myPlayer].blind)
Lighting.brightness = 1f;
Lighting.defBrightness = Lighting.brightness;
Lighting.firstTileX = firstX;
Lighting.lastTileX = lastX;
Lighting.firstTileY = firstY;
Lighting.lastTileY = lastY;
Lighting.firstToLightX = Lighting.firstTileX - Lighting.offScreenTiles;
Lighting.firstToLightY = Lighting.firstTileY - Lighting.offScreenTiles;
Lighting.lastToLightX = Lighting.lastTileX + Lighting.offScreenTiles;
Lighting.lastToLightY = Lighting.lastTileY + Lighting.offScreenTiles;
if (Lighting.firstToLightX < 0)
Lighting.firstToLightX = 0;
if (Lighting.lastToLightX >= Main.maxTilesX)
Lighting.lastToLightX = Main.maxTilesX - 1;
if (Lighting.firstToLightY < 0)
Lighting.firstToLightY = 0;
if (Lighting.lastToLightY >= Main.maxTilesY)
Lighting.lastToLightY = Main.maxTilesY - 1;
++Lighting.lightCounter;
++Main.renderCount;
int num4 = Main.screenWidth / 16 + Lighting.offScreenTiles * 2;
int num5 = Main.screenHeight / 16 + Lighting.offScreenTiles * 2;
Vector2 vector2_1 = Main.screenLastPosition;
if (Main.renderCount < 3)
Lighting.doColors();
if (Main.renderCount == 2)
{
Vector2 vector2_2 = Main.screenPosition;
int num6 = (int)((double)Main.screenPosition.X / 16.0) - Lighting.scrX;
int num7 = (int)((double)Main.screenPosition.Y / 16.0) - Lighting.scrY;
if (num6 > 16)
num6 = 0;
if (num7 > 16)
num7 = 0;
int num8 = 0;
int num9 = num4;
int num10 = 0;
int num11 = num5;
if (num6 < 0)
num8 -= num6;
else
num9 -= num6;
if (num7 < 0)
num10 -= num7;
else
num11 -= num7;
if (Lighting.RGB)
{
for (int index1 = num8; index1 < num4; ++index1)
{
Lighting.LightingState[] lightingStateArray1 = Lighting.states[index1];
Lighting.LightingState[] lightingStateArray2 = Lighting.states[index1 + num6];
for (int index2 = num10; index2 < num11; ++index2)
{
Lighting.LightingState lightingState1 = lightingStateArray1[index2];
Lighting.LightingState lightingState2 = lightingStateArray2[index2 + num7];
lightingState1.r = lightingState2.r2;
lightingState1.g = lightingState2.g2;
lightingState1.b = lightingState2.b2;
}
}
}
else
{
for (int index1 = num8; index1 < num9; ++index1)
{
Lighting.LightingState[] lightingStateArray1 = Lighting.states[index1];
Lighting.LightingState[] lightingStateArray2 = Lighting.states[index1 + num6];
for (int index2 = num10; index2 < num11; ++index2)
{
Lighting.LightingState lightingState1 = lightingStateArray1[index2];
Lighting.LightingState lightingState2 = lightingStateArray2[index2 + num7];
lightingState1.r = lightingState2.r2;
lightingState1.g = lightingState2.r2;
lightingState1.b = lightingState2.r2;
}
}
}
}
else if (!Main.renderNow)
{
int num6 = (int)((double)Main.screenPosition.X / 16.0) - (int)((double)vector2_1.X / 16.0);
if (num6 > 5 || num6 < -5)
num6 = 0;
int num7;
int num8;
int num9;
if (num6 < 0)
{
num7 = -1;
num6 *= -1;
num8 = num4;
num9 = num6;
}
else
{
num7 = 1;
num8 = 0;
num9 = num4 - num6;
}
int num10 = (int)((double)Main.screenPosition.Y / 16.0) - (int)((double)vector2_1.Y / 16.0);
if (num10 > 5 || num10 < -5)
num10 = 0;
int num11;
int num12;
int num13;
if (num10 < 0)
{
num11 = -1;
num10 *= -1;
num12 = num5;
num13 = num10;
}
else
{
num11 = 1;
num12 = 0;
num13 = num5 - num10;
}
if (num6 != 0 || num10 != 0)
{
int index1 = num8;
while (index1 != num9)
{
Lighting.LightingState[] lightingStateArray1 = Lighting.states[index1];
Lighting.LightingState[] lightingStateArray2 = Lighting.states[index1 + num6 * num7];
int index2 = num12;
while (index2 != num13)
{
Lighting.LightingState lightingState1 = lightingStateArray1[index2];
Lighting.LightingState lightingState2 = lightingStateArray2[index2 + num10 * num11];
lightingState1.r = lightingState2.r;
lightingState1.g = lightingState2.g;
lightingState1.b = lightingState2.b;
index2 += num11;
}
index1 += num7;
}
}
if (Netplay.Connection.StatusMax > 0)
Main.mapTime = 1;
if (Main.mapTime == 0 && Main.mapEnabled)
{
if (Main.renderCount == 3)
{
try
{
Main.mapTime = Main.mapTimeMax;
Main.updateMap = true;
Main.mapMinX = Lighting.firstToLightX + Lighting.offScreenTiles;
Main.mapMaxX = Lighting.lastToLightX - Lighting.offScreenTiles;
Main.mapMinY = Lighting.firstToLightY + Lighting.offScreenTiles;
Main.mapMaxY = Lighting.lastToLightY - Lighting.offScreenTiles;
for (int x = Main.mapMinX; x < Main.mapMaxX; ++x)
{
Lighting.LightingState[] lightingStateArray = Lighting.states[x - Lighting.firstTileX + Lighting.offScreenTiles];
for (int y = Main.mapMinY; y < Main.mapMaxY; ++y)
{
Lighting.LightingState lightingState = lightingStateArray[y - Lighting.firstTileY + Lighting.offScreenTiles];
Tile tile = Main.tile[x, y];
float num14 = 0.0f;
if ((double)lightingState.r > (double)num14)
num14 = lightingState.r;
if ((double)lightingState.g > (double)num14)
num14 = lightingState.g;
if ((double)lightingState.b > (double)num14)
num14 = lightingState.b;
if (Lighting.lightMode < 2)
num14 *= 1.5f;
byte light = (byte)Math.Min((float)byte.MaxValue, num14 * (float)byte.MaxValue);
if ((double)y < Main.worldSurface && !tile.active() && ((int)tile.wall == 0 && (int)tile.liquid == 0))
light = (byte)22;
if ((int)light > 18 || (int)Main.Map[x, y].Light > 0)
{
if ((int)light < 22)
light = (byte)22;
Main.Map.UpdateLighting(x, y, light);
}
}
}
}
catch
{
}
}
}
if ((double)Lighting.oldSkyColor != (double)Lighting.skyColor)
{
int num14 = Lighting.firstToLightX;
int num15 = Lighting.firstToLightY;
int num16 = Lighting.lastToLightX;
int num17 = (double)Lighting.lastToLightY < Main.worldSurface ? Lighting.lastToLightY : (int)Main.worldSurface - 1;
if ((double)num15 < Main.worldSurface)
{
for (int index1 = num14; index1 < num16; ++index1)
{
Lighting.LightingState[] lightingStateArray = Lighting.states[index1 - Lighting.firstToLightX];
for (int index2 = num15; index2 < num17; ++index2)
{
Lighting.LightingState lightingState = lightingStateArray[index2 - Lighting.firstToLightY];
Tile tile = Main.tile[index1, index2];
if (tile == null)
{
tile = new Tile();
Main.tile[index1, index2] = tile;
}
if ((!tile.active() || !Main.tileNoSunLight[(int)tile.type]) && ((double)lightingState.r < (double)Lighting.skyColor && (int)tile.liquid < 200) && (Main.wallLight[(int)tile.wall] || (int)tile.wall == 73))
{
lightingState.r = num1;
if ((double)lightingState.g < (double)Lighting.skyColor)
lightingState.g = num2;
if ((double)lightingState.b < (double)Lighting.skyColor)
lightingState.b = num3;
}
}
}
}
}
}
else
Lighting.lightCounter = 0;
if (Main.renderCount <= Lighting.maxRenderCount)
return;
Lighting.PreRenderPhase();
}