diff --git a/dataobj/environment.cc b/dataobj/environment.cc index 48e54abcc..2f2157f04 100644 --- a/dataobj/environment.cc +++ b/dataobj/environment.cc @@ -135,6 +135,8 @@ bool env_t::left_to_right_graphs; uint32 env_t::tooltip_delay; uint32 env_t::tooltip_duration; sint8 env_t::show_money_message; +sint8 env_t::show_station_coverage_goods; +sint8 env_t::show_station_coverage_player; std::string env_t::fontname = FONT_PATH_X "prop.fnt"; uint8 env_t::fontsize = 11; @@ -178,6 +180,8 @@ void env_t::init() /* station stuff */ use_transparency_station_coverage = true; station_coverage_show = 0; + show_station_coverage_goods = 4; // show all + show_station_coverage_player = 0; // show all show_names = 3; player_finance_display_account = true; diff --git a/dataobj/environment.h b/dataobj/environment.h index 789420d20..2cc9346e6 100644 --- a/dataobj/environment.h +++ b/dataobj/environment.h @@ -247,6 +247,8 @@ public: /// show station coverage indicators static uint8 station_coverage_show; + static sint8 show_station_coverage_goods; + static sint8 show_station_coverage_player; /// display station coverage by transparent overlay /// (otherwise by colored squares) diff --git a/gui/display_settings.cc b/gui/display_settings.cc index 2c7fa69c1..26ad9da8f 100644 --- a/gui/display_settings.cc +++ b/gui/display_settings.cc @@ -197,10 +197,26 @@ gui_frame_t( translator::translate("Helligk. u. Farben") ) // Show station coverage buttons[15].set_pos( cursor ); - buttons[15].set_typ(button_t::square_state); - buttons[15].set_text("show station coverage"); - buttons[15].set_width( L_DIALOG_WIDTH - D_MARGINS_X ); - cursor.y += D_CHECKBOX_HEIGHT + D_V_SPACE; + buttons[15].set_typ(button_t::arrowright); + station_coverage_label.init("show station coverage", cursor + scr_coord(buttons[15].get_size().w + D_H_SPACE,0) ); + station_coverage_label.align_to(&buttons[15], ALIGN_CENTER_V); + add_component(&station_coverage_label); + station_coverage_goods_label.init("",cursor); + station_coverage_goods_label.set_width( edit_width ); + add_component(&station_coverage_goods_label); + cursor.y += buttons[15].get_size().h + D_V_SPACE; + + // Show station coverage left/right arrows + buttons[26].set_pos( cursor ); + buttons[26].set_typ(button_t::arrowleft); + buttons[27].set_pos( cursor ); + buttons[27].set_typ(button_t::arrowright); + + // Show station coverage label + station_coverage_player_label.init("", cursor + scr_coord(buttons[26].get_size().w + D_H_SPACE,0) ); + station_coverage_player_label.align_to(&buttons[26], ALIGN_CENTER_V); + add_component(&station_coverage_player_label); + cursor.y += buttons[26].get_size().h + D_V_SPACE; // Show station names arrow buttons[18].set_pos( cursor ); @@ -362,6 +378,8 @@ gui_frame_t( translator::translate("Helligk. u. Farben") ) add_component( buttons+13 ); add_component( buttons+14 ); add_component( buttons+15 ); + add_component( buttons+26 ); // Show station coverage left arrows + add_component( buttons+27 ); // Show station coverage right arrows add_component( buttons+18 ); add_component( buttons+19 ); add_component( buttons+8 ); @@ -414,6 +432,7 @@ void color_gui_t::set_windowsize(scr_size size) column = size.w - D_MARGIN_RIGHT - D_ARROW_RIGHT_WIDTH; buttons[1].set_pos ( scr_coord( column, buttons[1].get_pos().y ) ); buttons[13].set_pos ( scr_coord( column, buttons[13].get_pos().y ) ); + buttons[27].set_pos ( scr_coord( column, buttons[27].get_pos().y ) ); column = size.w - D_MARGINS_X; divider1.set_width ( column ); @@ -522,7 +541,8 @@ bool color_gui_t::action_triggered( gui_action_creator_t *komp, value_t v) // Show station coverage if((buttons+15)==komp) { - env_t::station_coverage_show = env_t::station_coverage_show==0 ? 0xFF : 0; + env_t::show_station_coverage_goods = (env_t::show_station_coverage_goods+1)%5; + env_t::station_coverage_show = env_t::show_station_coverage_goods==0 ? 0 : 0xFF; } else // Underground view checkbox @@ -616,9 +636,18 @@ bool color_gui_t::action_triggered( gui_action_creator_t *komp, value_t v) if((buttons+25)==komp) { create_win(new loadfont_frame_t(), w_info, magic_font); } + + // Show station coverage player + if((buttons+26)==komp) { + env_t::show_station_coverage_player = (env_t::show_station_coverage_player+4)%5; + } + if((buttons+27)==komp) { + env_t::show_station_coverage_player = (env_t::show_station_coverage_player+1)%5; + } if( &money_booking==komp ) { env_t::show_money_message = v.i; } + welt->set_dirty(); return true; } @@ -676,6 +705,47 @@ void color_gui_t::draw(scr_coord pos, scr_size size) simloops_value_label.set_color(color); sprintf(simloops_buf, " %d%c%d", loops/10, get_fraction_sep(), loops%10 ); + //station_coverage_label + switch (env_t::show_station_coverage_goods) { + case 0: + station_coverage_goods_label.set_text(""); + break; + case 1: + station_coverage_goods_label.set_text("Passagiere"); + break; + case 2: + station_coverage_goods_label.set_text("Post"); + break; + case 3: + station_coverage_goods_label.set_text("Fracht"); + break; + case 4: + station_coverage_goods_label.set_text(""); + break; + default: + station_coverage_goods_label.set_text("internal ERROR"); + } + station_coverage_goods_label.set_pos( scr_coord( gui_frame_t::get_windowsize().w - D_MARGIN_RIGHT - station_coverage_goods_label.get_size().w, station_coverage_goods_label.get_pos().y ) ); + switch (env_t::show_station_coverage_player) { + case 0: + station_coverage_player_label.set_text("coverage of all players"); + break; + case 1: + station_coverage_player_label.set_text("coverage of active player"); + break; + case 2: + station_coverage_player_label.set_text("coverage of nonactive player"); + break; + case 3: + station_coverage_player_label.set_text("coverage of the main station"); + break; + case 4: + station_coverage_player_label.set_text("coverage of multi access"); + break; + default: + station_coverage_player_label.set_text("internal ERROR"); + } + // All components are updated, now draw them... gui_frame_t::draw(pos, size); diff --git a/gui/display_settings.h b/gui/display_settings.h index 1c66d9fd2..d96306d06 100644 --- a/gui/display_settings.h +++ b/gui/display_settings.h @@ -13,7 +13,7 @@ #include "components/gui_numberinput.h" #include "components/gui_combobox.h" -#define COLORS_MAX_BUTTONS (26) +#define COLORS_MAX_BUTTONS (28) #define BUF_MAXLEN_MS_FORMAT (16) @@ -47,7 +47,10 @@ private: fps_label, fps_value_label, simloops_label, - simloops_value_label; + simloops_value_label, + station_coverage_label, + station_coverage_goods_label, + station_coverage_player_label; gui_divider_t divider1, diff --git a/simplan.cc b/simplan.cc index 1dafd0db4..9be992b34 100644 --- a/simplan.cc +++ b/simplan.cc @@ -575,6 +575,21 @@ void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos) const image_id img = overlay_img(gr); for(int halt_count = 0; halt_count < halt_list_count; halt_count++) { + switch (env_t::show_station_coverage_player){ + case 0 : break; + case 1 : if(halt_list[halt_count]->get_owner() != welt->get_active_player()){continue;} break; + case 2 : if(halt_list[halt_count]->get_owner() == welt->get_active_player()){continue;} break; + case 3 : if(halt_count != 0){continue;} break; + case 4 : if(halt_list_count == 1){continue;} break; + default : break; + } + switch (env_t::show_station_coverage_goods){ + case 0 : continue; + case 1 : if(!halt_list[halt_count]->get_pax_enabled()){continue;} break; + case 2 : if(!halt_list[halt_count]->get_mail_enabled()){continue;} break; + case 3 : if(!halt_list[halt_count]->get_ware_enabled()){continue;} break; + default : break; + } const FLAGGED_PIXVAL transparent = PLAYER_FLAG | OUTLINE_FLAG | color_idx_to_rgb(halt_list[halt_count]->get_owner()->get_player_color1() + 4); display_img_blend( img, xpos, ypos, transparent | TRANSPARENT25_FLAG, 0, 0); } @@ -603,6 +618,21 @@ void planquadrat_t::display_overlay(const sint16 xpos, const sint16 ypos) const const sint16 off = (raster_tile_width>>5); // suitable start search for (size_t h = halt_list_count; h-- != 0;) { + switch (env_t::show_station_coverage_player){ + case 0 : break; + case 1 : if(halt_list[h]->get_owner() != welt->get_active_player()){continue;} break; + case 2 : if(halt_list[h]->get_owner() == welt->get_active_player()){continue;} break; + case 3 : if(h != 0){continue;} break; + case 4 : if(halt_list_count == 1){continue;} break; + default : break; + } + switch (env_t::show_station_coverage_goods){ + case 0 : continue; + case 1 : if(!halt_list[h]->get_pax_enabled()){continue;} break; + case 2 : if(!halt_list[h]->get_mail_enabled()){continue;} break; + case 3 : if(!halt_list[h]->get_ware_enabled()){continue;} break; + default : break; + } display_fillbox_wh_clip_rgb(x - h * off, y + h * off, r, r, PLAYER_FLAG | color_idx_to_rgb(halt_list[h]->get_owner()->get_player_color1() + 4), kartenboden_dirty); } }