Terraria.Liquid.Update C# (CSharp) Méthode

Update() public méthode

public Update ( ) : void
Résultat void
        public void Update()
        {
            Main.tileSolid[379] = true;
            Tile tile1 = Main.tile[this.x - 1, this.y];
            Tile tile2 = Main.tile[this.x + 1, this.y];
            Tile tile3 = Main.tile[this.x, this.y - 1];
            Tile tile4 = Main.tile[this.x, this.y + 1];
            Tile tile5 = Main.tile[this.x, this.y];
            if (tile5.nactive() && Main.tileSolid[(int)tile5.type] && !Main.tileSolidTop[(int)tile5.type])
            {
                int num = (int)tile5.type;
                this.kill = 9;
            }
            else
            {
                byte num1 = tile5.liquid;
                if (this.y > Main.maxTilesY - 200 && (int)tile5.liquidType() == 0 && (int)tile5.liquid > 0)
                {
                    byte num2 = (byte)2;
                    if ((int)tile5.liquid < (int)num2)
                        num2 = tile5.liquid;
                    tile5.liquid -= num2;
                }
                if ((int)tile5.liquid == 0)
                {
                    this.kill = 9;
                }
                else
                {
                    if (tile5.lava())
                    {
                        Liquid.LavaCheck(this.x, this.y);
                        if (!Liquid.quickFall)
                        {
                            if (this.delay < 5)
                            {
                                ++this.delay;
                                return;
                            }
                            this.delay = 0;
                        }
                    }
                    else
                    {
                        if (tile1.lava())
                            Liquid.AddWater(this.x - 1, this.y);
                        if (tile2.lava())
                            Liquid.AddWater(this.x + 1, this.y);
                        if (tile3.lava())
                            Liquid.AddWater(this.x, this.y - 1);
                        if (tile4.lava())
                            Liquid.AddWater(this.x, this.y + 1);
                        if (tile5.honey())
                        {
                            Liquid.HoneyCheck(this.x, this.y);
                            if (!Liquid.quickFall)
                            {
                                if (this.delay < 10)
                                {
                                    ++this.delay;
                                    return;
                                }
                                this.delay = 0;
                            }
                        }
                        else
                        {
                            if (tile1.honey())
                                Liquid.AddWater(this.x - 1, this.y);
                            if (tile2.honey())
                                Liquid.AddWater(this.x + 1, this.y);
                            if (tile3.honey())
                                Liquid.AddWater(this.x, this.y - 1);
                            if (tile4.honey())
                                Liquid.AddWater(this.x, this.y + 1);
                        }
                    }
                    if ((!tile4.nactive() || !Main.tileSolid[(int)tile4.type] || Main.tileSolidTop[(int)tile4.type]) && (((int)tile4.liquid <= 0 || (int)tile4.liquidType() == (int)tile5.liquidType()) && (int)tile4.liquid < (int)byte.MaxValue))
                    {
                        float num2 = (float)((int)byte.MaxValue - (int)tile4.liquid);
                        if ((double)num2 > (double)tile5.liquid)
                            num2 = (float)tile5.liquid;
                        tile5.liquid -= (byte)num2;
                        tile4.liquid += (byte)num2;
                        tile4.liquidType((int)tile5.liquidType());
                        Liquid.AddWater(this.x, this.y + 1);
                        tile4.skipLiquid(true);
                        tile5.skipLiquid(true);
                        if ((int)tile5.liquid > 250)
                        {
                            tile5.liquid = byte.MaxValue;
                        }
                        else
                        {
                            Liquid.AddWater(this.x - 1, this.y);
                            Liquid.AddWater(this.x + 1, this.y);
                        }
                    }
                    if ((int)tile5.liquid > 0)
                    {
                        bool flag1 = true;
                        bool flag2 = true;
                        bool flag3 = true;
                        bool flag4 = true;
                        if (tile1.nactive() && Main.tileSolid[(int)tile1.type] && !Main.tileSolidTop[(int)tile1.type])
                            flag1 = false;
                        else if ((int)tile1.liquid > 0 && (int)tile1.liquidType() != (int)tile5.liquidType())
                            flag1 = false;
                        else if (Main.tile[this.x - 2, this.y].nactive() && Main.tileSolid[(int)Main.tile[this.x - 2, this.y].type] && !Main.tileSolidTop[(int)Main.tile[this.x - 2, this.y].type])
                            flag3 = false;
                        else if ((int)Main.tile[this.x - 2, this.y].liquid == 0)
                            flag3 = false;
                        else if ((int)Main.tile[this.x - 2, this.y].liquid > 0 && (int)Main.tile[this.x - 2, this.y].liquidType() != (int)tile5.liquidType())
                            flag3 = false;
                        if (tile2.nactive() && Main.tileSolid[(int)tile2.type] && !Main.tileSolidTop[(int)tile2.type])
                            flag2 = false;
                        else if ((int)tile2.liquid > 0 && (int)tile2.liquidType() != (int)tile5.liquidType())
                            flag2 = false;
                        else if (Main.tile[this.x + 2, this.y].nactive() && Main.tileSolid[(int)Main.tile[this.x + 2, this.y].type] && !Main.tileSolidTop[(int)Main.tile[this.x + 2, this.y].type])
                            flag4 = false;
                        else if ((int)Main.tile[this.x + 2, this.y].liquid == 0)
                            flag4 = false;
                        else if ((int)Main.tile[this.x + 2, this.y].liquid > 0 && (int)Main.tile[this.x + 2, this.y].liquidType() != (int)tile5.liquidType())
                            flag4 = false;
                        int num2 = 0;
                        if ((int)tile5.liquid < 3)
                            num2 = -1;
                        if (flag1 && flag2)
                        {
                            if (flag3 && flag4)
                            {
                                bool flag5 = true;
                                bool flag6 = true;
                                if (Main.tile[this.x - 3, this.y].nactive() && Main.tileSolid[(int)Main.tile[this.x - 3, this.y].type] && !Main.tileSolidTop[(int)Main.tile[this.x - 3, this.y].type])
                                    flag5 = false;
                                else if ((int)Main.tile[this.x - 3, this.y].liquid == 0)
                                    flag5 = false;
                                else if ((int)Main.tile[this.x - 3, this.y].liquidType() != (int)tile5.liquidType())
                                    flag5 = false;
                                if (Main.tile[this.x + 3, this.y].nactive() && Main.tileSolid[(int)Main.tile[this.x + 3, this.y].type] && !Main.tileSolidTop[(int)Main.tile[this.x + 3, this.y].type])
                                    flag6 = false;
                                else if ((int)Main.tile[this.x + 3, this.y].liquid == 0)
                                    flag6 = false;
                                else if ((int)Main.tile[this.x + 3, this.y].liquidType() != (int)tile5.liquidType())
                                    flag6 = false;
                                if (flag5 && flag6)
                                {
                                    float num3 = (float)Math.Round((double)((int)tile1.liquid + (int)tile2.liquid + (int)Main.tile[this.x - 2, this.y].liquid + (int)Main.tile[this.x + 2, this.y].liquid + (int)Main.tile[this.x - 3, this.y].liquid + (int)Main.tile[this.x + 3, this.y].liquid + (int)tile5.liquid + num2) / 7.0);
                                    int num4 = 0;
                                    tile1.liquidType((int)tile5.liquidType());
                                    if ((int)tile1.liquid != (int)(byte)num3)
                                    {
                                        tile1.liquid = (byte)num3;
                                        Liquid.AddWater(this.x - 1, this.y);
                                    }
                                    else
                                        ++num4;
                                    tile2.liquidType((int)tile5.liquidType());
                                    if ((int)tile2.liquid != (int)(byte)num3)
                                    {
                                        tile2.liquid = (byte)num3;
                                        Liquid.AddWater(this.x + 1, this.y);
                                    }
                                    else
                                        ++num4;
                                    Main.tile[this.x - 2, this.y].liquidType((int)tile5.liquidType());
                                    if ((int)Main.tile[this.x - 2, this.y].liquid != (int)(byte)num3)
                                    {
                                        Main.tile[this.x - 2, this.y].liquid = (byte)num3;
                                        Liquid.AddWater(this.x - 2, this.y);
                                    }
                                    else
                                        ++num4;
                                    Main.tile[this.x + 2, this.y].liquidType((int)tile5.liquidType());
                                    if ((int)Main.tile[this.x + 2, this.y].liquid != (int)(byte)num3)
                                    {
                                        Main.tile[this.x + 2, this.y].liquid = (byte)num3;
                                        Liquid.AddWater(this.x + 2, this.y);
                                    }
                                    else
                                        ++num4;
                                    Main.tile[this.x - 3, this.y].liquidType((int)tile5.liquidType());
                                    if ((int)Main.tile[this.x - 3, this.y].liquid != (int)(byte)num3)
                                    {
                                        Main.tile[this.x - 3, this.y].liquid = (byte)num3;
                                        Liquid.AddWater(this.x - 3, this.y);
                                    }
                                    else
                                        ++num4;
                                    Main.tile[this.x + 3, this.y].liquidType((int)tile5.liquidType());
                                    if ((int)Main.tile[this.x + 3, this.y].liquid != (int)(byte)num3)
                                    {
                                        Main.tile[this.x + 3, this.y].liquid = (byte)num3;
                                        Liquid.AddWater(this.x + 3, this.y);
                                    }
                                    else
                                        ++num4;
                                    if ((int)tile1.liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                        Liquid.AddWater(this.x - 1, this.y);
                                    if ((int)tile2.liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                        Liquid.AddWater(this.x + 1, this.y);
                                    if ((int)Main.tile[this.x - 2, this.y].liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                        Liquid.AddWater(this.x - 2, this.y);
                                    if ((int)Main.tile[this.x + 2, this.y].liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                        Liquid.AddWater(this.x + 2, this.y);
                                    if ((int)Main.tile[this.x - 3, this.y].liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                        Liquid.AddWater(this.x - 3, this.y);
                                    if ((int)Main.tile[this.x + 3, this.y].liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                        Liquid.AddWater(this.x + 3, this.y);
                                    if (num4 != 6 || (int)tile3.liquid <= 0)
                                        tile5.liquid = (byte)num3;
                                }
                                else
                                {
                                    int num3 = 0;
                                    float num4 = (float)Math.Round((double)((int)tile1.liquid + (int)tile2.liquid + (int)Main.tile[this.x - 2, this.y].liquid + (int)Main.tile[this.x + 2, this.y].liquid + (int)tile5.liquid + num2) / 5.0);
                                    tile1.liquidType((int)tile5.liquidType());
                                    if ((int)tile1.liquid != (int)(byte)num4)
                                    {
                                        tile1.liquid = (byte)num4;
                                        Liquid.AddWater(this.x - 1, this.y);
                                    }
                                    else
                                        ++num3;
                                    tile2.liquidType((int)tile5.liquidType());
                                    if ((int)tile2.liquid != (int)(byte)num4)
                                    {
                                        tile2.liquid = (byte)num4;
                                        Liquid.AddWater(this.x + 1, this.y);
                                    }
                                    else
                                        ++num3;
                                    Main.tile[this.x - 2, this.y].liquidType((int)tile5.liquidType());
                                    if ((int)Main.tile[this.x - 2, this.y].liquid != (int)(byte)num4)
                                    {
                                        Main.tile[this.x - 2, this.y].liquid = (byte)num4;
                                        Liquid.AddWater(this.x - 2, this.y);
                                    }
                                    else
                                        ++num3;
                                    Main.tile[this.x + 2, this.y].liquidType((int)tile5.liquidType());
                                    if ((int)Main.tile[this.x + 2, this.y].liquid != (int)(byte)num4)
                                    {
                                        Main.tile[this.x + 2, this.y].liquid = (byte)num4;
                                        Liquid.AddWater(this.x + 2, this.y);
                                    }
                                    else
                                        ++num3;
                                    if ((int)tile1.liquid != (int)(byte)num4 || (int)tile5.liquid != (int)(byte)num4)
                                        Liquid.AddWater(this.x - 1, this.y);
                                    if ((int)tile2.liquid != (int)(byte)num4 || (int)tile5.liquid != (int)(byte)num4)
                                        Liquid.AddWater(this.x + 1, this.y);
                                    if ((int)Main.tile[this.x - 2, this.y].liquid != (int)(byte)num4 || (int)tile5.liquid != (int)(byte)num4)
                                        Liquid.AddWater(this.x - 2, this.y);
                                    if ((int)Main.tile[this.x + 2, this.y].liquid != (int)(byte)num4 || (int)tile5.liquid != (int)(byte)num4)
                                        Liquid.AddWater(this.x + 2, this.y);
                                    if (num3 != 4 || (int)tile3.liquid <= 0)
                                        tile5.liquid = (byte)num4;
                                }
                            }
                            else if (flag3)
                            {
                                float num3 = (float)Math.Round((double)((int)tile1.liquid + (int)tile2.liquid + (int)Main.tile[this.x - 2, this.y].liquid + (int)tile5.liquid + num2) / 4.0 + 0.001);
                                tile1.liquidType((int)tile5.liquidType());
                                if ((int)tile1.liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                {
                                    tile1.liquid = (byte)num3;
                                    Liquid.AddWater(this.x - 1, this.y);
                                }
                                tile2.liquidType((int)tile5.liquidType());
                                if ((int)tile2.liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                {
                                    tile2.liquid = (byte)num3;
                                    Liquid.AddWater(this.x + 1, this.y);
                                }
                                Main.tile[this.x - 2, this.y].liquidType((int)tile5.liquidType());
                                if ((int)Main.tile[this.x - 2, this.y].liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                {
                                    Main.tile[this.x - 2, this.y].liquid = (byte)num3;
                                    Liquid.AddWater(this.x - 2, this.y);
                                }
                                tile5.liquid = (byte)num3;
                            }
                            else if (flag4)
                            {
                                float num3 = (float)Math.Round((double)((int)tile1.liquid + (int)tile2.liquid + (int)Main.tile[this.x + 2, this.y].liquid + (int)tile5.liquid + num2) / 4.0 + 0.001);
                                tile1.liquidType((int)tile5.liquidType());
                                if ((int)tile1.liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                {
                                    tile1.liquid = (byte)num3;
                                    Liquid.AddWater(this.x - 1, this.y);
                                }
                                tile2.liquidType((int)tile5.liquidType());
                                if ((int)tile2.liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                {
                                    tile2.liquid = (byte)num3;
                                    Liquid.AddWater(this.x + 1, this.y);
                                }
                                Main.tile[this.x + 2, this.y].liquidType((int)tile5.liquidType());
                                if ((int)Main.tile[this.x + 2, this.y].liquid != (int)(byte)num3 || (int)tile5.liquid != (int)(byte)num3)
                                {
                                    Main.tile[this.x + 2, this.y].liquid = (byte)num3;
                                    Liquid.AddWater(this.x + 2, this.y);
                                }
                                tile5.liquid = (byte)num3;
                            }
                            else
                            {
                                float num3 = (float)Math.Round((double)((int)tile1.liquid + (int)tile2.liquid + (int)tile5.liquid + num2) / 3.0 + 0.001);
                                tile1.liquidType((int)tile5.liquidType());
                                if ((int)tile1.liquid != (int)(byte)num3)
                                    tile1.liquid = (byte)num3;
                                if ((int)tile5.liquid != (int)(byte)num3 || (int)tile1.liquid != (int)(byte)num3)
                                    Liquid.AddWater(this.x - 1, this.y);
                                tile2.liquidType((int)tile5.liquidType());
                                if ((int)tile2.liquid != (int)(byte)num3)
                                    tile2.liquid = (byte)num3;
                                if ((int)tile5.liquid != (int)(byte)num3 || (int)tile2.liquid != (int)(byte)num3)
                                    Liquid.AddWater(this.x + 1, this.y);
                                tile5.liquid = (byte)num3;
                            }
                        }
                        else if (flag1)
                        {
                            float num3 = (float)Math.Round((double)((int)tile1.liquid + (int)tile5.liquid + num2) / 2.0 + 0.001);
                            if ((int)tile1.liquid != (int)(byte)num3)
                                tile1.liquid = (byte)num3;
                            tile1.liquidType((int)tile5.liquidType());
                            if ((int)tile5.liquid != (int)(byte)num3 || (int)tile1.liquid != (int)(byte)num3)
                                Liquid.AddWater(this.x - 1, this.y);
                            tile5.liquid = (byte)num3;
                        }
                        else if (flag2)
                        {
                            float num3 = (float)Math.Round((double)((int)tile2.liquid + (int)tile5.liquid + num2) / 2.0 + 0.001);
                            if ((int)tile2.liquid != (int)(byte)num3)
                                tile2.liquid = (byte)num3;
                            tile2.liquidType((int)tile5.liquidType());
                            if ((int)tile5.liquid != (int)(byte)num3 || (int)tile2.liquid != (int)(byte)num3)
                                Liquid.AddWater(this.x + 1, this.y);
                            tile5.liquid = (byte)num3;
                        }
                    }
                    if ((int)tile5.liquid != (int)num1)
                    {
                        if ((int)tile5.liquid == 254 && (int)num1 == (int)byte.MaxValue)
                        {
                            tile5.liquid = byte.MaxValue;
                            ++this.kill;
                        }
                        else
                        {
                            Liquid.AddWater(this.x, this.y - 1);
                            this.kill = 0;
                        }
                    }
                    else
                        ++this.kill;
                }
            }
        }