TEditXna.ViewModel.WorldViewModel.NewWorld C# (CSharp) Method

NewWorld() private method

private NewWorld ( ) : void
return void
        private void NewWorld()
        {
            var nwDialog = new NewWorldView();
            if ((bool)nwDialog.ShowDialog())
            {
                _loadTimer.Reset();
                _loadTimer.Start();
                _saveTimer.Stop();
                Task.Factory.StartNew(() =>
                {
                    World w = nwDialog.NewWorld;
                    w.SpawnX = w.TilesWide / 2;
                    w.SpawnY = (int)Math.Max(0, w.GroundLevel - 10);
                    w.GroundLevel = (int)w.GroundLevel;
                    w.RockLevel = (int)w.RockLevel;
                    w.BottomWorld = w.TilesHigh * 16;
                    w.RightWorld = w.TilesWide * 16;
                    w.Tiles = new Tile[w.TilesWide, w.TilesHigh];
                    var cloneTile = new Tile();
                    for (int y = 0; y < w.TilesHigh; y++)
                    {
                        OnProgressChanged(w, new ProgressChangedEventArgs(Calc.ProgressPercentage(y, w.TilesHigh), "Generating World..."));

                        if (y == (int)w.GroundLevel - 10)
                            cloneTile = new Tile { WireRed = false, IsActive = true, LiquidType = LiquidType.None, LiquidAmount = 0, Type = 2, U = -1, V = -1, Wall = 2 };
                        if (y == (int)w.GroundLevel - 9)
                            cloneTile = new Tile { WireRed = false, IsActive = true, LiquidType = LiquidType.None, LiquidAmount = 0, Type = 0, U = -1, V = -1, Wall = 2 };
                        else if (y == (int)w.GroundLevel + 1)
                            cloneTile = new Tile { WireRed = false, IsActive = true, LiquidType = LiquidType.None, LiquidAmount = 0, Type = 0, U = -1, V = -1, Wall = 0 };
                        else if (y == (int)w.RockLevel)
                            cloneTile = new Tile { WireRed = false, IsActive = true, LiquidType = LiquidType.None, LiquidAmount = 0, Type = 1, U = -1, V = -1, Wall = 0 };
                        else if (y == w.TilesHigh - 182)
                            cloneTile = new Tile();
                        for (int x = 0; x < w.TilesWide; x++)
                        {
                            w.Tiles[x, y] = (Tile)cloneTile.Clone();
                        }
                    }
                    return w;
                })
                    .ContinueWith(t => CurrentWorld = t.Result, TaskFactoryHelper.UiTaskScheduler)
                    .ContinueWith(t => RenderEntireWorld())
                    .ContinueWith(t =>
                    {
                        CurrentFile = null;
                        PixelMap = t.Result;
                        UpdateTitle();
                        Points.Clear();
                        Points.Add("Spawn");
                        Points.Add("Dungeon");
                        foreach (NPC npc in CurrentWorld.NPCs)
                        {
                            Points.Add(npc.Name);
                        }
                        MinimapImage = RenderMiniMap.Render(CurrentWorld);
                        _loadTimer.Stop();
                        OnProgressChanged(this, new ProgressChangedEventArgs(0, string.Format("World loaded in {0} seconds.", _loadTimer.Elapsed.TotalSeconds)));
                        _saveTimer.Start();
                    }, TaskFactoryHelper.UiTaskScheduler);
            }
        }