Esempio n. 1
0
        public static void clearWorld()
        {
            Statics.WorldLoaded = false;

            Main.trashItem             = new Item();
            WorldModify.spawnEye       = false;
            WorldModify.spawnNPC       = 0;
            WorldModify.shadowOrbCount = 0;
            Main.helpText   = 0;
            Main.dungeonX   = 0;
            Main.dungeonY   = 0;
            NPC.downedBoss1 = false;
            NPC.downedBoss2 = false;
            NPC.downedBoss3 = false;
            WorldModify.shadowOrbSmashed = false;
            WorldModify.spawnMeteor      = false;
            WorldModify.stopDrops        = false;
            Main.invasionDelay           = 0;
            Main.invasionType            = 0;
            Main.invasionSize            = 0;
            Main.invasionWarn            = 0;
            Main.invasionX               = 0.0;
            WorldModify.noLiquidCheck    = false;
            Liquid.numLiquid             = 0;
            LiquidBuffer.numLiquidBuffer = 0;

//			if (WorldModify.lastMaxTilesX > Main.maxTilesX || WorldModify.lastMaxTilesY > Main.maxTilesY)
//			{
//				using (var prog = new ProgressLogger(WorldModify.lastMaxTilesX - 1, "Freeing unused resources"))
//					for (int i = 0; i < WorldModify.lastMaxTilesX; i++)
//					{
//						prog.Value = i;
//						for (int j = 0; j < WorldModify.lastMaxTilesY; j++)
//						{
//							Main.tile.CreateTileAt(i, j);
//						}
//					}
//			}
            WorldModify.lastMaxTilesX = Main.maxTilesX;
            WorldModify.lastMaxTilesY = Main.maxTilesY;

            if (Main.tile == null || Main.tile.SizeX != Main.maxTilesX || Main.tile.SizeY != Main.maxTilesY)
            {
                Main.tile = null;
                GC.Collect();
                Main.tile = new TileCollection(Main.maxTilesX, Main.maxTilesY);
            }
            else
            {
                using (var prog = new ProgressLogger(Main.maxTilesX - 1, "Clearing world tiles"))
                    for (int k = 0; k < Main.maxTilesX; k++)
                    {
                        prog.Value = k;
                        for (int l = 0; l < Main.maxTilesY; l++)
                        {
                            Main.tile.CreateTileAt(k, l);
// for testing
//							if ((l == 25 || l == 26) && k > 4000 && k < 5000)
//							{
//								Main.tile.At(k, l).SetLiquid (250);
//								Liquid.AddWater (k, l);
//							}
                        }
                    }
            }

            using (var prog = new ProgressLogger(12212 + Liquid.resLiquid - 1, "Resetting game objects"))
            {
                for (int num3 = 0; num3 < 201; num3++)
                {
                    Main.item[num3] = null;
                    Main.npcs[num3] = null;
                }
                prog.Value++;

                for (int num4 = 0; num4 < 1000; num4++)
                {
                    Main.projectile[num4] = null;
                    Main.chest[num4]      = null;
                    Main.sign[num4]       = null;
                }
                prog.Value++;

//				for (int num8 = 0; num8 < Liquid.resLiquid; num8++)
//				{
//					Main.liquid[num8] = null;
//				}
//				prog.Value++;

//				for (int num9 = 0; num9 < 10000; num9++)
//				{
//					Main.liquidBuffer[num9] = null;
//				}
//				prog.Value += 10;

                GC.Collect();
                prog.Value += 10;

                for (int num3 = 0; num3 < 201; num3++)
                {
                    Main.item[num3] = new Item();
                    Main.npcs[num3] = new NPC();
                    prog.Value++;
                }
                for (int num4 = 0; num4 < 1001; num4++)
                {
                    prog.Value++;
                }
//				for (int num5 = 0; num5 < 1000; num5++)
//				{
//					Main.projectile[num5] = new Projectile();
//					prog.Value++;
//				}
                Projectile.ResetProjectiles();
                prog.Value += 1000;
                for (int num8 = 0; num8 < Liquid.resLiquid; num8++)
                {
                    Main.liquid[num8] = new Liquid();
                    prog.Value++;
                }
                for (int num9 = 0; num9 < 10000; num9++)
                {
                    Main.liquidBuffer[num9] = new LiquidBuffer();
                    prog.Value++;
                }
            }
            setWorldSize();

            LiquidUpdateBuffer.Initialize(Main.maxSectionsX, Main.maxSectionsY);

            worldCleared = true;
        }