Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(UI): add Simple and Compact compasses for small screens #6037

Merged
merged 12 commits into from
Feb 9, 2025
58 changes: 58 additions & 0 deletions src/panels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1755,6 +1755,52 @@
g->mon_info( w );
wnoutrefresh( w );
}
static std::string direction_to_enemy( const tripoint &enemy_pos, const tripoint &player_pos )
{
const int dx = enemy_pos.x - player_pos.x;
const int dy = enemy_pos.y - player_pos.y;
const int adx = std::abs( dx );
const int ady = std::abs( dy );

if( adx > 2 * ady ) {
return dx > 0 ? "E" : "W";
} else if( ady > 2 * adx ) {
return dy > 0 ? "S" : "N";
} else if( dx > 0 && dy > 0 ) {
return "SE";
} else if( dx > 0 && dy < 0 ) {
return "NE";
} else if( dx < 0 && dy > 0 ) {
return "SW";
} else {
return "NW";
}
}

static void draw_simple_compass( avatar &u, const catacurses::window &w )
{
werase( w );

const auto &visible_creatures = u.get_visible_creatures( 200 );
std::map<std::string, int> direction_count;
const tripoint player_pos = u.pos();

for( const auto &creature : visible_creatures ) {
const tripoint enemy_pos = creature->pos();
std::string direction = direction_to_enemy( enemy_pos, player_pos );
direction_count[direction]++;
}

std::string enemies_text;
for( const auto &entry : direction_count ) {
enemies_text += entry.first + "(" + std::to_string( entry.second ) + ") ";
}

mvwprintz( w, point( 0, 0 ), c_white, enemies_text );

Check warning on line 1799 in src/panels.cpp

View workflow job for this annotation

GitHub Actions / build

Prefer constructing 'point' from named constant 'point_zero' rather than explicit integer arguments. [cata-use-named-point-constants]
wnoutrefresh( w );
}



static void draw_compass_padding( avatar &, const catacurses::window &w )
{
Expand Down Expand Up @@ -2052,6 +2098,10 @@
ret.emplace_back( draw_armor, translate_marker( "Armor" ), 5, 44, false );
ret.emplace_back( draw_compass_padding, translate_marker( "Compass" ), 8, 44,
true );
ret.emplace_back( draw_compass_padding, translate_marker( "Comp.Compass" ), 3, 44,
false );
ret.emplace_back( draw_simple_compass, translate_marker( "Sim.Compass" ), 1, 44, false );

ret.emplace_back( draw_messages_classic, translate_marker( "Log" ), -2, 44, true );
#if defined(TILES)
ret.emplace_back( draw_mminimap, translate_marker( "Map" ), -1, 44, true,
Expand Down Expand Up @@ -2079,6 +2129,8 @@
ret.emplace_back( draw_armor, translate_marker( "Armor" ), 5, 32, false );
ret.emplace_back( draw_messages_classic, translate_marker( "Log" ), -2, 32, true );
ret.emplace_back( draw_compass, translate_marker( "Compass" ), 8, 32, true );
ret.emplace_back( draw_compass, translate_marker( "Comp.Compass" ), 3, 32, false );
ret.emplace_back( draw_simple_compass, translate_marker( "Sim.Compass" ), 1, 44, false );
#if defined(TILES)
ret.emplace_back( draw_mminimap, translate_marker( "Map" ), -1, 32, true,
default_render, true );
Expand Down Expand Up @@ -2111,6 +2163,9 @@
ret.emplace_back( draw_armor_padding, translate_marker( "Armor" ), 5, 32, false );
ret.emplace_back( draw_compass_padding, translate_marker( "Compass" ), 8, 32,
true );
ret.emplace_back( draw_compass_padding, translate_marker( "Comp.Compass" ), 3, 32,
false );
ret.emplace_back( draw_simple_compass, translate_marker( "Sim.Compass" ), 1, 44, false );
#if defined(TILES)
ret.emplace_back( draw_mminimap, translate_marker( "Map" ), -1, 32, true,
default_render, true );
Expand Down Expand Up @@ -2144,6 +2199,9 @@
ret.emplace_back( draw_armor_padding, translate_marker( "Armor" ), 5, 44, false );
ret.emplace_back( draw_compass_padding, translate_marker( "Compass" ), 8, 44,
true );
ret.emplace_back( draw_compass_padding, translate_marker( "Comp.Compass" ), 3, 32,
false );
ret.emplace_back( draw_simple_compass, translate_marker( "Sim.Compass" ), 1, 44, false );
#if defined(TILES)
ret.emplace_back( draw_mminimap, translate_marker( "Map" ), -1, 44, true,
default_render, true );
Expand Down
Loading