public override void Execute() { // assumes x,y and x2,y2 have been normalized so that x,y is top-left Tools.PrepareUndo(x, y, x2, y2, plr); switch (algorithm) { case 0: TShock.Players[plr].SendMessage(String.Format("0: Recursive Backtracker maze creation initiated!"), Color.Green); this.maze = new Mazes.Maze(new Mazes.Point(x, y), new Mazes.Point(x2 - x, y2 - y), new Mazes.Point(TShock.Players[plr].TileX, TShock.Players[plr].TileY), tunnelWidth, wallWidth, algorithm, 0, this.PeekBlock, this.NukeTiles); //RecursiveBacktracker(); break; case 1: // TShock.Players[plr].SendMessage(String.Format("1: Growing Tree maze creation initiated!"), Color.Green); // GrowingTree(); break; default: TShock.Players[plr].SendMessage(String.Format("Invalid algorithm specified."), Color.Red); break; } MazeState ms = new MazeState(); while (ms.status < 8) { ms = maze.Step(); } TShock.Players[plr].SendMessage(String.Format("Maze creation complete."), Color.LimeGreen); ResetSection(); } //Execute()
///// ////////////////////////////////////////////////// ///// private void timer1_Tick(object sender, EventArgs e) { if (createInProgress) { // update maze here MazeState ms = this.maze.Step(); //toolbarLabel1.Text = ms.status.ToString() + " " + ms.message; if (ms.status == 1) { this.firstCell = maze.mazeData.tunnelling.First(); SetRect(new Rect(this.firstCell, maze.mazeData.tunnelWidthP()), Color.Orange); } if (ms.status >= 2 && ms.status <= 4) { int c = maze.mazeData.tunnelling.Count(); if (c > 0) { SetRect(new Rect(maze.mazeData.lastCell, maze.mazeData.tunnelWidthP()), Color.Red); } if (c > 1) { SetRect(new Rect(this.prevCell, maze.mazeData.tunnelWidthP()), pathColor); toolbarLabel1.Text = maze.mazeData.lastCell.ToString() + " / " + this.prevCell.ToString(); } this.prevCell = maze.mazeData.lastCell; mazePanel.Invalidate(); } if (ms.status == 8) { createInProgress = false; timer1.Stop(); } this.lastMazeState = ms; } if (solveInProgress) { int prevExp = solver.exploredPoints.Count; // Stopwatch stopwatch = Stopwatch.StartNew(); this.solver.SolveStep(); // stopwatch.Stop(); // Debug.WriteLine(stopwatch.ElapsedMilliseconds); // for (int i = prevExp; i < solver.exploredPoints.Count; i++) foreach (ExploredPoint ep in solver.exploredPoints) { //mazeBmp.SetPixel(solver.exploredPoints[i].p.X, solver.exploredPoints[i].p.Y, solvePathColor); // bug here - exception if edge of map is reached. mazeBmp.SetPixel(ep.p.X, ep.p.Y, solvePathColor); } if (solver.state == 4) { //solver. } else if (solver.state >= 8) { solveInProgress = false; timer1.Stop(); } if (solver.state >= 12) { foreach (Mazes.Point s in solver.solution) { SetPixel(s, solutionColor); } } this.toolbarLabel1.Text = "alivePoints.Count: " + solver.alivePoints.Count(); mazePanel.Invalidate(); } }