public void Generate() { DateTime dtStarted = DateTime.Now; bool endTilePlaced = false; var dynamicImage = new Image(); var start = new Vector2((xSize - 1) / 2, (ySize - 1) / 2); var tilesXSize = tilesX * (this.CellSize.x * this.Scale.x); var tilesYSize = tilesY * (this.CellSize.y * this.Scale.y); Position = new Vector2((-start.x * tilesXSize) - tilesXSize / 2, (-start.y * tilesYSize) - tilesYSize / 2); dynamicImage.Create(xSize, ySize, false, Image.Format.Rgba8); dynamicImage.Fill(Colors.Black); dynamicImage.Lock(); dynamicImage.SetPixelv(start, startColor); dynamicImage.Unlock(); dynamicImage.SavePng("desert_walkpath_start.png"); currentTilePos = start; int gencounter = 0; while (!endTilePlaced) { var rndSel = randomGen1.GetIntInRange(0, 3); endTilePlaced = tilesPlaced >= tilesLimit; GD.Print($"Generate, rndSel={rndSel}, tilesPlaced={tilesPlaced}, tilesLimit={tilesLimit}, endTilePlaced={endTilePlaced}"); PlaceTile(dynamicImage, currentTilePos, rndSel, endTilePlaced); gencounter += 1; if (gencounter >= 1200) { break; } } PlaceEndTile(dynamicImage, currentTilePos); DateTime dtWalkGenerated = DateTime.Now; String timeDebug1 = DebugPrintTimeDifference("Walk generated=", dtStarted, dtWalkGenerated); GD.Print(timeDebug1); dynamicImage.SavePng("desert_walkpath_end.png"); DrawTileMap(dynamicImage, start); DateTime dtDrawMap = DateTime.Now; String timeDebug2 = DebugPrintTimeDifference("Draw Map=", dtStarted, dtDrawMap); GD.Print(timeDebug2); }