Exemplo n.º 1
0
        public override void PreUpdate()
        {
            /*
             * count++;
             * if(count >= 100)
             * {
             *      count = 0;
             *      Main.NewText(Liquid.numLiquid +","+ LiquidBuffer.numLiquidBuffer + "," + LiquidBuffer2.numLiquidBuffer);
             * }
             */

            if (quickSwitch)
            {
                Liquid.cycles       = 1;
                Liquid.panicCounter = 0;

                while (LiquidBuffer.numLiquidBuffer > 5000 && LiquidBuffer2.numLiquidBuffer != 100000 - 1)
                {
                    LiquidBuffer2.AddBuffer(Main.liquidBuffer[LiquidBuffer.numLiquidBuffer - 1].x, Main.liquidBuffer[LiquidBuffer.numLiquidBuffer - 1].y);
                    LiquidBuffer.DelBuffer(LiquidBuffer.numLiquidBuffer - 1);
                }
                while (LiquidBuffer.numLiquidBuffer < 5000 && LiquidBuffer2.numLiquidBuffer != 0)
                {
                    //LiquidBuffer.AddBuffer(liquidBuffer2[LiquidBuffer2.numLiquidBuffer].x,liquidBuffer2[LiquidBuffer2.numLiquidBuffer].y);
                    Main.liquidBuffer[LiquidBuffer.numLiquidBuffer].x = liquidBuffer2[LiquidBuffer2.numLiquidBuffer - 1].x;
                    Main.liquidBuffer[LiquidBuffer.numLiquidBuffer].y = liquidBuffer2[LiquidBuffer2.numLiquidBuffer - 1].y;
                    LiquidBuffer.numLiquidBuffer++;

                    LiquidBuffer2.DelBuffer(LiquidBuffer2.numLiquidBuffer - 1);
                }

                Liquid.UpdateLiquid();
            }
        }
Exemplo n.º 2
0
        public override void PreUpdate()
        {
            if (quickSwitch)
            {
                count++;
                if (count >= 100)
                {
                    count = 0;
                    //Main.NewText(Liquid.numLiquid +","+ LiquidBuffer.numLiquidBuffer +","+ Liquid2.numLiquid);
                }

                Liquid.cycles       = 1;
                Liquid.panicCounter = 0;
                Liquid.UpdateLiquid();

                while (LiquidBuffer.numLiquidBuffer > 0 && Liquid2.numLiquid != 1000000 - 1)
                {
                    //Liquid2.AddWater(Main.liquidBuffer[LiquidBuffer.numLiquidBuffer -1].x,Main.liquidBuffer[LiquidBuffer.numLiquidBuffer -1].y);
                    //LiquidBuffer.DelBuffer(LiquidBuffer.numLiquidBuffer -1);
                    Main.tile[Main.liquidBuffer[0].x, Main.liquidBuffer[0].y].checkingLiquid(false);
                    Liquid2.AddWater(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y);
                    LiquidBuffer.DelBuffer(0);
                }
                Liquid2.cycles       = 1;
                Liquid2.panicCounter = 0;
                Liquid2.UpdateLiquid();
            }
        }
        public static void SendWater(int x, int y)
        {
            if (disableLiquidUpdates)
            {
                return;
            }

            if (useLiquidUpdateBuffer)
            {
                //LiquidUpdateBuffer.QueueUpdate(x, y);
                LiquidBuffer.AddBuffer(x, y);
                return;
            }

            byte[] bytes = null;

            for (int i = 0; i < 255; i++)
            {
                var slot = Terraria.Netplay.Clients[i] as ServerSlot;
                if (slot.state >= SlotState.PLAYING && slot.Connected)
                {
                    int X = x / 200;
                    int Y = y / 150;
                    if (X < (Main.maxTilesX / 200) && Y < (Main.maxTilesY / 150))
                    {
                        if (Terraria.Netplay.Clients[i].TileSections[X, Y])
                        {
                            if (bytes == null)
                            {
                                var msg = NewNetMessage.PrepareThreadInstance();
                                msg.FlowLiquid(x, y);
                                bytes = msg.Output;
                            }
                            slot.Send(bytes);
                        }
                    }
                    else
                    {
                        ProgramLog.Log("Water Index out of Bounds:");
                        ProgramLog.Log(string.Format("X: {0} Y: {1}, Axis: {2}, {3}", X, Y, Main.maxTilesX, Main.maxTilesY));
                    }
                }
            }
        }
Exemplo n.º 4
0
 public unsafe static void AddWater(int x, int y)
 {
     if (x >= 5 && y >= 5 && x < Main.maxTilesX - 5 && y < Main.maxTilesY - 5)
     {
         fixed(Tile *ptr = &Main.tile[x, y])
         {
             if (ptr->liquid != 0 && ptr->checkingLiquid == 0)
             {
                 if (numLiquid >= 4095)
                 {
                     LiquidBuffer.AddBuffer(x, y);
                 }
                 else
                 {
                     ptr->checkingLiquid = 64;
                     Main.liquid[numLiquid].Init(x, y);
                     ptr->skipLiquid = 0;
                     numLiquid++;
                     if (Main.netMode == 2 && numLiquid < 1365)
                     {
                         NetMessage.sendWater(x, y);
                     }
                     if (ptr->active != 0)
                     {
                         int type = ptr->type;
                         if ((type != 4 || ptr->frameY != 176) && (Main.tileWaterDeath[type] || (ptr->lava != 0 && Main.tileLavaDeath[type])))
                         {
                             if (WorldGen.gen)
                             {
                                 ptr->active = 0;
                             }
                             else if (WorldGen.KillTile(x, y) && Main.netMode == 2)
                             {
                                 NetMessage.CreateMessage5(17, 0, x, y, 0);
                                 NetMessage.SendMessage();
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
        public new static void UpdateLiquid()
        {
            int netMode = Main.netMode;

            if (Liquid2.quickSettle || Liquid2.numLiquid > 2000)
            {
                Liquid2.quickFall = true;
            }
            else
            {
                Liquid2.quickFall = false;
            }
            Liquid2.wetCounter++;
            int num7 = Liquid2.maxLiquid / Liquid2.cycles;
            int num2 = num7 * (Liquid2.wetCounter - 1);
            int num3 = num7 * Liquid2.wetCounter;

            if (Liquid2.wetCounter == Liquid2.cycles)
            {
                num3 = Liquid2.numLiquid;
            }
            if (num3 > Liquid2.numLiquid)
            {
                num3 = Liquid2.numLiquid;
                int netMode2 = Main.netMode;
                Liquid2.wetCounter = Liquid2.cycles;
            }
            if (Liquid2.quickFall)
            {
                for (int l = num2; l < num3; l++)
                {
                    QuickLiquidV2.liquid2[l].delay = 10;
                    QuickLiquidV2.liquid2[l].Update();
                    Main.tile[QuickLiquidV2.liquid2[l].x, QuickLiquidV2.liquid2[l].y].skipLiquid(false);
                }
            }
            else
            {
                for (int m = num2; m < num3; m++)
                {
                    if (!Main.tile[QuickLiquidV2.liquid2[m].x, QuickLiquidV2.liquid2[m].y].skipLiquid())
                    {
                        QuickLiquidV2.liquid2[m].Update();
                    }
                    else
                    {
                        Main.tile[QuickLiquidV2.liquid2[m].x, QuickLiquidV2.liquid2[m].y].skipLiquid(false);
                    }
                }
            }
            if (Liquid2.wetCounter >= Liquid2.cycles)
            {
                Liquid2.wetCounter = 0;
                for (int n = Liquid2.numLiquid - 1; n >= 0; n--)
                {
                    if (QuickLiquidV2.liquid2[n].kill > 4)
                    {
                        Liquid2.DelWater(n);
                    }
                }
                int num4 = Liquid2.maxLiquid - (Liquid2.maxLiquid - Liquid2.numLiquid);
                if (num4 > LiquidBuffer.numLiquidBuffer)
                {
                    num4 = LiquidBuffer.numLiquidBuffer;
                }
                for (int num5 = 0; num5 < num4; num5++)
                {
                    Main.tile[Main.liquidBuffer[0].x, Main.liquidBuffer[0].y].checkingLiquid(false);
                    Liquid2.AddWater(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y);
                    LiquidBuffer.DelBuffer(0);
                }
                if (Liquid2.numLiquid > 0 && Liquid2.numLiquid > Liquid2.stuckAmount - 50 && Liquid2.numLiquid < Liquid2.stuckAmount + 50)
                {
                    Liquid2.stuckCount++;
                    if (Liquid2.stuckCount >= 10000)
                    {
                        Liquid2.stuck = true;
                        for (int num6 = Liquid2.numLiquid - 1; num6 >= 0; num6--)
                        {
                            Liquid2.DelWater(num6);
                        }
                        Liquid2.stuck      = false;
                        Liquid2.stuckCount = 0;
                    }
                }
                else
                {
                    Liquid2.stuckCount  = 0;
                    Liquid2.stuckAmount = Liquid2.numLiquid;
                }
            }

            /*
             * if (!Terraria.WorldGen.gen && Main.netMode == 2 && Liquid2._netChangeSet.Count > 0)
             * {
             *      Utils.Swap<HashSet<int>>(ref Liquid2._netChangeSet, ref Liquid2._swapNetChangeSet);
             *      NetManager.Instance.Broadcast(NetLiquid2Module.Serialize(Liquid2._swapNetChangeSet), -1);
             *      Liquid2._swapNetChangeSet.Clear();
             * }
             */
        }
Exemplo n.º 6
0
        public new static void AddWater(int x, int y)
        {
            Tile tile = Main.tile[x, y];

            if (Main.tile[x, y] == null)
            {
                return;
            }
            if (tile.checkingLiquid())
            {
                return;
            }
            if (x >= Main.maxTilesX - 5 || y >= Main.maxTilesY - 5)
            {
                return;
            }
            if (x < 5 || y < 5)
            {
                return;
            }
            if (tile.liquid == 0)
            {
                return;
            }
            if (Liquid2.numLiquid >= Liquid2.maxLiquid - 1)
            {
                LiquidBuffer.AddBuffer(x, y);
                return;
            }
            tile.checkingLiquid(true);
            QuickLiquidV2.liquid2[Liquid2.numLiquid].kill  = 0;
            QuickLiquidV2.liquid2[Liquid2.numLiquid].x     = x;
            QuickLiquidV2.liquid2[Liquid2.numLiquid].y     = y;
            QuickLiquidV2.liquid2[Liquid2.numLiquid].delay = 0;
            tile.skipLiquid(false);
            Liquid2.numLiquid++;
            if (Main.netMode == 2)
            {
                Liquid2.NetSendLiquid(x, y);
            }
            if (tile.active() && !Terraria.WorldGen.gen)
            {
                bool flag = false;
                if (tile.lava())
                {
                    if (TileObjectData.CheckLavaDeath(tile))
                    {
                        flag = true;
                    }
                }
                else if (TileObjectData.CheckWaterDeath(tile))
                {
                    flag = true;
                }
                if (flag)
                {
                    Terraria.WorldGen.KillTile(x, y, false, false, false);
                    if (Main.netMode == 2)
                    {
                        NetMessage.SendData(17, -1, -1, null, 0, (float)x, (float)y, 0f, 0, 0, 0);
                    }
                }
            }
        }