static void setMaze(unique_ptr<maze> &&m) { if (!m) return; mainMaze = move(m); resetMaze(); }
Maze::Maze(irr::IrrlichtDevice* a_Device, irr::core::vector3df a_StartPosition, bool a_NeedRender) :m_MazeSizeX(60), m_MazeSizeY(60) { m_IrrDevice = a_Device; resetMaze(irr::core::vector2df(30, -7), a_NeedRender); }
static void handleEvent(SDL_Event &e) { switch(e.type) { case SDL_KEYDOWN: switch (e.key.keysym.scancode) { case SDL_SCANCODE_R: setMaze(generateRandomMaze(windowWidth / RES_TILES_SIZE, windowHeight / RES_TILES_SIZE)); setStatus("Random maze generated"); break; case SDL_SCANCODE_O: if (openMazeFile()) { setStatus("Maze file opened"); printf("%s\n", lastFilename.c_str()); } break; case SDL_SCANCODE_A: switch (currentAlgorithm) { case ALGORITHM_ASTAR: currentAlgorithm = ALGORITHM_GBFS; setStatus("Selected algorithm: Greedy Best First Search"); break; case ALGORITHM_GBFS: currentAlgorithm = ALGORITHM_DIJKSTRA; setStatus("Selected algorithm: Dijkstra"); break; case ALGORITHM_DIJKSTRA: currentAlgorithm = ALGORITHM_ASTAR; setStatus("Selected algorithm: A*"); break; } break; case SDL_SCANCODE_S: if (saveMazeFile()) { setStatus("Maze file saved"); printf("%s\n", lastFilename.c_str()); } break; case SDL_SCANCODE_F: showFpsCounter = !showFpsCounter; break; case SDL_SCANCODE_G: mainMaze->renderGrid = !mainMaze->renderGrid; break; case SDL_SCANCODE_C: mainMaze->clearTemp(); mainGrid->stop(); setStatus("Path finding stopped"); break; case SDL_SCANCODE_N: setMaze(unique_ptr<maze>(new maze(windowWidth / RES_TILES_SIZE, windowHeight / RES_TILES_SIZE))); setStatus("Created empty new maze"); break; case SDL_SCANCODE_SPACE: mainGrid->start(); setStatus("Path finding started"); break; default: break; } break; case SDL_USEREVENT: resetMaze(); setStatus("Maze has been cropped"); break; } editor->handleEvent(e); }