diff --git a/src/input.cpp b/src/input.cpp index dacf119..a92e553 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -17,10 +17,10 @@ auto input_handler::init_handlers() -> void register_mouse_pressed_handler(MOUSE_BUTTON_LEFT, &input_handler::select_block); register_mouse_pressed_handler(MOUSE_BUTTON_LEFT, &input_handler::add_block); register_mouse_pressed_handler(MOUSE_BUTTON_LEFT, &input_handler::start_add_block); + register_mouse_pressed_handler(MOUSE_BUTTON_MIDDLE, &input_handler::place_goal); register_mouse_pressed_handler(MOUSE_BUTTON_RIGHT, &input_handler::camera_start_rotate); register_mouse_pressed_handler(MOUSE_BUTTON_RIGHT, &input_handler::remove_block); register_mouse_pressed_handler(MOUSE_BUTTON_RIGHT, &input_handler::clear_add_block); - register_mouse_pressed_handler(MOUSE_BUTTON_MIDDLE, &input_handler::place_goal); register_mouse_released_handler(MOUSE_BUTTON_LEFT, &input_handler::camera_stop_pan); register_mouse_released_handler(MOUSE_BUTTON_RIGHT, &input_handler::camera_stop_rotate); @@ -29,19 +29,21 @@ auto input_handler::init_handlers() -> void register_key_pressed_handler(KEY_D, &input_handler::move_block_eas); register_key_pressed_handler(KEY_S, &input_handler::move_block_sou); register_key_pressed_handler(KEY_A, &input_handler::move_block_wes); - register_key_pressed_handler(KEY_P, &input_handler::print_state); + register_key_pressed_handler(KEY_N, &input_handler::load_previous_preset); register_key_pressed_handler(KEY_M, &input_handler::load_next_preset); register_key_pressed_handler(KEY_R, &input_handler::goto_starting_state); + register_key_pressed_handler(KEY_V, &input_handler::goto_most_distant_state); + register_key_pressed_handler(KEY_B, &input_handler::goto_closest_target_state); + register_key_pressed_handler(KEY_SPACE, &input_handler::goto_optimal_next_state); + register_key_pressed_handler(KEY_BACKSPACE, &input_handler::goto_previous_state); + register_key_pressed_handler(KEY_G, &input_handler::populate_graph); register_key_pressed_handler(KEY_C, &input_handler::clear_graph); register_key_pressed_handler(KEY_I, &input_handler::toggle_mark_solutions); register_key_pressed_handler(KEY_O, &input_handler::toggle_connect_solutions); - // RegisterKeyPressedHandler(KEY_U, &InputHandler::ToggleMarkPath); - register_key_pressed_handler(KEY_SPACE, &input_handler::goto_optimal_next_state); - register_key_pressed_handler(KEY_V, &input_handler::goto_most_distant_state); - register_key_pressed_handler(KEY_B, &input_handler::goto_closest_target_state); - register_key_pressed_handler(KEY_BACKSPACE, &input_handler::goto_previous_state); + + register_key_pressed_handler(KEY_TAB, &input_handler::toggle_editing); register_key_pressed_handler(KEY_F, &input_handler::toggle_restricted_movement); register_key_pressed_handler(KEY_T, &input_handler::toggle_target_block); register_key_pressed_handler(KEY_Y, &input_handler::toggle_wall_block); @@ -49,10 +51,11 @@ auto input_handler::init_handlers() -> void register_key_pressed_handler(KEY_RIGHT, &input_handler::add_board_column); register_key_pressed_handler(KEY_DOWN, &input_handler::remove_board_row); register_key_pressed_handler(KEY_LEFT, &input_handler::remove_board_column); - register_key_pressed_handler(KEY_TAB, &input_handler::toggle_editing); + register_key_pressed_handler(KEY_X, &input_handler::clear_goal); + register_key_pressed_handler(KEY_P, &input_handler::print_state); + register_key_pressed_handler(KEY_L, &input_handler::toggle_camera_lock); register_key_pressed_handler(KEY_LEFT_ALT, &input_handler::toggle_camera_projection); - register_key_pressed_handler(KEY_X, &input_handler::clear_goal); register_key_pressed_handler(KEY_U, &input_handler::toggle_camera_mass_center_lock); } diff --git a/src/puzzle.cpp b/src/puzzle.cpp index 6a8a034..52dbf48 100644 --- a/src/puzzle.cpp +++ b/src/puzzle.cpp @@ -117,11 +117,11 @@ auto puzzle::valid_thorough() const -> bool return false; } if (!std::string("012345678").contains(state[3]) || !std::string("012345678").contains(state[4])) { - infoln("Puzzle invalid: Representation[3/4] {}/{} doesn't match [1-9]", state[1], state[2]); + infoln("Puzzle invalid: Representation[3/4] {}/{} doesn't match [1-9]", state[3], state[4]); return false; } if (std::stoi(state.substr(3, 1)) != target_x || std::stoi(state.substr(4, 1)) != target_y) { - infoln("Puzzle invalid: Representation[3/4] {}/{} doesn't match target ({}, {})", state[1], state[2], target_x, + infoln("Puzzle invalid: Representation[3/4] {}/{} doesn't match target ({}, {})", state[3], state[4], target_x, target_y); return false; } @@ -209,8 +209,8 @@ auto puzzle::try_set_goal(const int x, const int y) const -> std::optional std::optional puzzle p = *this; p.target_x = MAX_WIDTH; p.target_y = MAX_HEIGHT; - p.state.replace(3, 2, "99"); + p.state.replace(3, 2, std::format("{}{}", MAX_WIDTH, MAX_HEIGHT)); return p; } diff --git a/src/user_interface.cpp b/src/user_interface.cpp index 5f78692..1809be9 100644 --- a/src/user_interface.cpp +++ b/src/user_interface.cpp @@ -554,7 +554,8 @@ auto user_interface::draw_puzzle_controls(const Color color) const -> void input.goto_most_distant_state(); } - if (draw_menu_button(2, 5, 1, 1, "Go to Starting State (R)", color)) { + if (draw_menu_button(2, 5, 1, 1, "Go to Starting State (R)", color, + state.get_current_index() != state.get_starting_index())) { input.goto_starting_state(); } }