Terraria.Lighting.LightTiles C# (CSharp) Method

LightTiles() public static method

public static LightTiles ( int firstX, int lastX, int firstY, int lastY ) : void
firstX int
lastX int
firstY int
lastY int
return void
        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();
        }