Ejemplo n.º 1
0
        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);
        }