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);
}
}