From 8762277fa7e1fff987caa29cd8fc0152a60281e6 Mon Sep 17 00:00:00 2001 From: Stu33 <98749055+Stu33@users.noreply.github.com> Date: Thu, 30 Jan 2025 07:41:28 +0000 Subject: [PATCH] Optionally accept precise OMT coordinates in debug "Teleport - to specific overmap" function (#79343) * Change teleport_overmap to optionally accept major and minor coordinate pairs rather than single integer coordinates. * Update src/debug_menu.cpp * Update src/debug_menu.cpp * Fix clang-tidy errors. * Use emplace_back properly without the redundant temporary. * Whitespace adjustment from the github-actions bot. Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/debug_menu.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/debug_menu.cpp b/src/debug_menu.cpp index 71f4cd68fed51..8962fc07d9ff4 100644 --- a/src/debug_menu.cpp +++ b/src/debug_menu.cpp @@ -1791,21 +1791,35 @@ static void teleport_overmap( bool specific_coordinates = false ) coord_strings.size() ); return; } - std::vector coord_ints; + std::vector> coord_ints; for( const std::string &coord_string : coord_strings ) { - ret_val parsed_coord = try_parse_integer( coord_string, true ); + const std::vector coord_parts = string_split( coord_string, '\'' ); + if( coord_parts.empty() || coord_parts.size() > 2 ) { + popup( _( "Error interpreting teleport target: " + "expected an integer or two integers separated by \'; got %s" ), coord_string ); + return; + } + ret_val parsed_coord = try_parse_integer( coord_parts[0], true ); if( !parsed_coord.success() ) { popup( _( "Error interpreting teleport target: %s" ), parsed_coord.str() ); return; } - coord_ints.push_back( parsed_coord.value() ); + int major_coord = parsed_coord.value(); + int minor_coord = 0; + if( coord_parts.size() >= 2 ) { + ret_val parsed_coord2 = try_parse_integer( coord_parts[1], true ); + if( !parsed_coord2.success() ) { + popup( _( "Error interpreting teleport target: %s" ), parsed_coord2.str() ); + return; + } + minor_coord = parsed_coord2.value(); + } + coord_ints.emplace_back( major_coord, minor_coord ); } cata_assert( coord_ints.size() >= 2 ); - tripoint coord; - coord.x = coord_ints[0]; - coord.y = coord_ints[1]; - coord.z = coord_ints.size() >= 3 ? coord_ints[2] : 0; - where = tripoint_abs_omt( OMAPX * coord.x, OMAPY * coord.y, coord.z ); + where = tripoint_abs_omt( OMAPX * coord_ints[0].first + coord_ints[0].second, + OMAPY * coord_ints[1].first + coord_ints[1].second, + ( coord_ints.size() >= 3 ? coord_ints[2].first : 0 ) ); } else { const std::optional dir_ = choose_direction( _( "Where is the desired overmap?" ) );