Skip to content

Commit 2dd2316

Browse files
authored
Add move_count_mode_text widget to show like 50(R) (#54623)
- Define display::move_count_and_mode_text_color - Define widget_var for move_count_mode_text - Define move_count_mode_desc widget (not used, but documented) - Add test (and merge with existing movement widget tests)
1 parent b8ba7f2 commit 2dd2316

File tree

8 files changed

+94
-44
lines changed

8 files changed

+94
-44
lines changed

data/json/ui/movement.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
"var": "move",
2323
"style": "number"
2424
},
25+
{
26+
"id": "move_count_mode_desc",
27+
"type": "widget",
28+
"label": "Move",
29+
"style": "text",
30+
"var": "move_count_mode_text",
31+
"//": "Colorized movement counter and mode letter, like 100(W), from display::move_count_and_mode_text_color"
32+
},
2533
{
2634
"id": "move_cost_num",
2735
"type": "widget",

data/mods/TEST_DATA/widgets.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,13 @@
208208
"var": "move_mode_letter",
209209
"style": "text"
210210
},
211+
{
212+
"id": "test_move_count_mode_text",
213+
"type": "widget",
214+
"label": "MOVE/MODE",
215+
"var": "move_count_mode_text",
216+
"style": "text"
217+
},
211218
{
212219
"id": "test_str_num",
213220
"type": "widget",

doc/SIDEBAR_MOD.md

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -626,25 +626,26 @@ Graph widget ids typically have a `_graph` suffix.
626626

627627
Text widget ids typically have a `_desc` suffix.
628628

629-
| id | example
630-
| -- | --
631-
| `activity_desc` | `Activity: Moderate`
632-
| `date_desc` | `Date: Summer day 25`
633-
| `env_temp_desc` | `Temperature: 65F`
634-
| `fatigue_desc` | `Rest: Tired`
635-
| `health_desc` | `Health: Good`
636-
| `hunger_desc` | `Hunger: Satisfied`
637-
| `lighting_desc` | `Lighting: Bright`
638-
| `mood_desc` | `Mood: :-)`
639-
| `pain_desc` | `Pain: Unmanageable pain`
640-
| `place_desc` | `Place: Evac Shelter J-38`
641-
| `power_desc` | `Bionic Power: 250mJ`
642-
| `style_desc` | `Style: Brawling`
643-
| `time_desc` | `Time: 10:45:32 am`
644-
| `weary_malus_desc` | `Weary Malus: +10%`
645-
| `weather_desc` | `Weather: Sunny`
646-
| `weight_desc` | `Weight: Overweight`
647-
| `wind_desc` | `Wind: <= Calm`
629+
| id | example
630+
| -- | --
631+
| `activity_desc` | `Activity: Moderate`
632+
| `date_desc` | `Date: Summer day 25`
633+
| `env_temp_desc` | `Temperature: 65F`
634+
| `fatigue_desc` | `Rest: Tired`
635+
| `health_desc` | `Health: Good`
636+
| `hunger_desc` | `Hunger: Satisfied`
637+
| `lighting_desc` | `Lighting: Bright`
638+
| `mood_desc` | `Mood: :-)`
639+
| `move_count_mode_desc` | `Move: 100(W)`
640+
| `pain_desc` | `Pain: Unmanageable pain`
641+
| `place_desc` | `Place: Evac Shelter J-38`
642+
| `power_desc` | `Bionic Power: 250mJ`
643+
| `style_desc` | `Style: Brawling`
644+
| `time_desc` | `Time: 10:45:32 am`
645+
| `weary_malus_desc` | `Weary Malus: +10%`
646+
| `weather_desc` | `Weather: Sunny`
647+
| `weight_desc` | `Weight: Overweight`
648+
| `wind_desc` | `Wind: <= Calm`
648649

649650

650651
## Layout widgets

src/display.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,6 +1198,14 @@ std::pair<std::string, nc_color> display::move_mode_text_color( const Character
11981198
return std::make_pair( mm_text, mm_color );
11991199
}
12001200

1201+
// Movement counter and mode letter, like "50(R)" or "100(W)"
1202+
std::pair<std::string, nc_color> display::move_count_and_mode_text_color( const avatar &u )
1203+
{
1204+
std::pair<std::string, nc_color> mode_pair = display::move_mode_letter_color( u );
1205+
std::string count_and_mode = string_format( "%d(%s)", u.movecounter, mode_pair.first );
1206+
return std::make_pair( count_and_mode, mode_pair.second );
1207+
}
1208+
12011209
std::pair<std::string, nc_color> display::overmap_note_symbol_color( const std::string note_text )
12021210
{
12031211
std::string ter_sym = "N";

src/display.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ std::pair<std::string, nc_color> morale_emotion( const int morale_cur, const moo
100100
// Current movement mode and color, as single letter or full word
101101
std::pair<std::string, nc_color> move_mode_letter_color( const Character &u );
102102
std::pair<std::string, nc_color> move_mode_text_color( const Character &u );
103+
// Movement counter and mode letter, like "50(R)" or "100(W)"
104+
std::pair<std::string, nc_color> move_count_and_mode_text_color( const avatar &u );
103105
// Current body part status (bleeding, bitten, infected) phrase, fully colorized
104106
std::string colorized_bodypart_status_text( const Character &u, const bodypart_id &bp,
105107
const std::string &wgt_id );

src/widget.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ std::string enum_to_string<widget_var>( widget_var data )
145145
return "mood_text";
146146
case widget_var::moon_phase_text:
147147
return "moon_phase_text";
148+
case widget_var::move_count_mode_text:
149+
return "move_count_mode_text";
148150
case widget_var::move_mode_letter:
149151
return "move_mode_letter";
150152
case widget_var::move_mode_text:
@@ -637,6 +639,7 @@ bool widget::uses_text_function()
637639
case widget_var::lighting_text:
638640
case widget_var::mood_text:
639641
case widget_var::moon_phase_text:
642+
case widget_var::move_count_mode_text:
640643
case widget_var::move_mode_letter:
641644
case widget_var::move_mode_text:
642645
case widget_var::pain_text:
@@ -748,6 +751,9 @@ std::string widget::color_text_function_string( const avatar &ava, unsigned int
748751
case widget_var::moon_phase_text:
749752
desc.first = display::get_moon();
750753
break;
754+
case widget_var::move_count_mode_text:
755+
desc = display::move_count_and_mode_text_color( ava );
756+
break;
751757
case widget_var::move_mode_letter:
752758
desc = display::move_mode_letter_color( ava );
753759
break;

src/widget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ enum class widget_var : int {
5959
lighting_text, // Current light level, color string
6060
mood_text, // Mood as a text emote, color string
6161
moon_phase_text,// Current phase of the moon
62+
move_count_mode_text, // Movement counter and mode letter like "50(R)", color string
6263
move_mode_letter, // Movement mode, color letter (W/R/C/P)
6364
move_mode_text, // Movement mode, color text (walking/running/crouching/prone)
6465
overmap_loc_text,// Local overmap position, pseudo latitude/longitude with Z-level

tests/widget_test.cpp

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ static const widget_id widget_test_int_num( "test_int_num" );
7878
static const widget_id widget_test_mana_num( "test_mana_num" );
7979
static const widget_id widget_test_morale_num( "test_morale_num" );
8080
static const widget_id widget_test_move_cost_num( "test_move_cost_num" );
81+
static const widget_id widget_test_move_count_mode_text( "test_move_count_mode_text" );
8182
static const widget_id widget_test_move_mode_letter( "test_move_mode_letter" );
8283
static const widget_id widget_test_move_mode_text( "test_move_mode_text" );
8384
static const widget_id widget_test_move_num( "test_move_num" );
@@ -411,15 +412,6 @@ TEST_CASE( "widgets showing avatar attributes", "[widget][avatar]" )
411412
CHECK( morale_w.layout( ava ) == "MORALE: -100" );
412413
}
413414

414-
SECTION( "move counter" ) {
415-
widget move_w = widget_test_move_num.obj();
416-
417-
ava.movecounter = 80;
418-
CHECK( move_w.layout( ava ) == "MOVE: 80" );
419-
ava.movecounter = 150;
420-
CHECK( move_w.layout( ava ) == "MOVE: 150" );
421-
}
422-
423415
SECTION( "hit points" ) {
424416
bodypart_id head( "head" );
425417
widget head_num_w = widget_test_hp_head_num.obj();
@@ -461,26 +453,51 @@ TEST_CASE( "widgets showing avatar attributes", "[widget][avatar]" )
461453
}
462454
}
463455

464-
TEST_CASE( "widgets showing movement mode", "[widget][move_mode]" )
456+
TEST_CASE( "widgets showing move counter and mode", "[widget][move_mode]" )
465457
{
466-
widget mode_letter_w = widget_test_move_mode_letter.obj();
467-
widget mode_text_w = widget_test_move_mode_text.obj();
468-
469458
avatar &ava = get_avatar();
470459
clear_avatar();
471460

472-
ava.set_movement_mode( move_mode_walk );
473-
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_white>W</color>" );
474-
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_white>walking</color>" );
475-
ava.set_movement_mode( move_mode_run );
476-
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_red>R</color>" );
477-
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_red>running</color>" );
478-
ava.set_movement_mode( move_mode_crouch );
479-
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_light_blue>C</color>" );
480-
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_light_blue>crouching</color>" );
481-
ava.set_movement_mode( move_mode_prone );
482-
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_green>P</color>" );
483-
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_green>prone</color>" );
461+
SECTION( "move counter" ) {
462+
widget move_w = widget_test_move_num.obj();
463+
464+
ava.movecounter = 80;
465+
CHECK( move_w.layout( ava ) == "MOVE: 80" );
466+
ava.movecounter = 150;
467+
CHECK( move_w.layout( ava ) == "MOVE: 150" );
468+
}
469+
470+
SECTION( "move counter and mode letter" ) {
471+
widget move_count_mode_w = widget_test_move_count_mode_text.obj();
472+
473+
ava.movecounter = 90;
474+
ava.set_movement_mode( move_mode_walk );
475+
CHECK( move_count_mode_w.layout( ava ) == "MOVE/MODE: <color_c_white>90(W)</color>" );
476+
ava.set_movement_mode( move_mode_run );
477+
CHECK( move_count_mode_w.layout( ava ) == "MOVE/MODE: <color_c_red>90(R)</color>" );
478+
ava.set_movement_mode( move_mode_crouch );
479+
CHECK( move_count_mode_w.layout( ava ) == "MOVE/MODE: <color_c_light_blue>90(C)</color>" );
480+
ava.set_movement_mode( move_mode_prone );
481+
CHECK( move_count_mode_w.layout( ava ) == "MOVE/MODE: <color_c_green>90(P)</color>" );
482+
}
483+
484+
SECTION( "movement mode text and letter" ) {
485+
widget mode_letter_w = widget_test_move_mode_letter.obj();
486+
widget mode_text_w = widget_test_move_mode_text.obj();
487+
488+
ava.set_movement_mode( move_mode_walk );
489+
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_white>W</color>" );
490+
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_white>walking</color>" );
491+
ava.set_movement_mode( move_mode_run );
492+
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_red>R</color>" );
493+
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_red>running</color>" );
494+
ava.set_movement_mode( move_mode_crouch );
495+
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_light_blue>C</color>" );
496+
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_light_blue>crouching</color>" );
497+
ava.set_movement_mode( move_mode_prone );
498+
CHECK( mode_letter_w.layout( ava ) == "MODE: <color_c_green>P</color>" );
499+
CHECK( mode_text_w.layout( ava ) == "MODE: <color_c_green>prone</color>" );
500+
}
484501
}
485502

486503
TEST_CASE( "widgets showing movement cost", "[widget][move_cost]" )

0 commit comments

Comments
 (0)