Index: bauer/vehikelbauer.cc =================================================================== --- bauer/vehikelbauer.cc (リビジョン 6368) +++ bauer/vehikelbauer.cc (作業コピー) @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 - 2002 Hansjrg Malthaner + * Copyright (c) 1997 - 2002 Hansj丁g Malthaner * * This file is part of the Simutrans project under the artistic licence. * (see licence.txt) @@ -22,15 +22,23 @@ #include "../tpl/stringhashtable_tpl.h" +//@author T-Na +#include "../utils/searchfolder.h" + static stringhashtable_tpl name_fahrzeuge; // index 0 aur, 1...8 at normal waytype index #define GET_WAYTYPE_INDEX(wt) ((int)(wt)>8 ? 0 : (wt)) static slist_tpl typ_fahrzeuge[9]; +//譖エ譁ー霆贋ク。繝ェ繧ケ繝 +//@author T-Na +typedef stringhashtable_tpl> update_container; +static update_container update_vehicles; + class bonus_record_t { public: sint32 year; @@ -270,6 +278,89 @@ } delete [] tmp; } + + //譖エ譁ー霆贋ク。繝ェ繧ケ繝医ョ隱ュ縺ソ霎シ縺ソ + //@author T-Na + + //繝輔か繝ォ繝蜀縺ョtab繝輔ぃ繧、繝ォ繧貞ィ縺ヲ讀懷コ縺吶k + searchfolder_t find; + std::string name = umgebung_t::objfilename + "update_vehicles/"; + find.search(name, "tab"); + + DBG_MESSAGE("read update vehicles tab files", "reading from '%s'", name.c_str()); + + uint n = 0; + tabfile_t update_vehicles_file; + + //讀懷コ縺輔l縺殳ab繝輔ぃ繧、繝ォ繧剃ク縺、縺壹▽蜿悶j蜃コ縺励※蜃ヲ逅縺吶k + FORX( searchfolder_t, const& s, find, ++n ) { + + if( !update_vehicles_file.open(s) ) { + + DBG_MESSAGE("can't read update vehicles tab file", ": '%s'", s); + continue; + } + + tabfileobj_t update_vehicles_tab; + + //tab繝輔ぃ繧、繝ォ隱ュ縺ソ霎シ縺ソ蜃ヲ逅 + while( update_vehicles_file.read(update_vehicles_tab) ) { + + //霆贋ク。蜷榊叙蠕 + std::string name = update_vehicles_tab.get("name"); + if( name.empty() ) { + + continue; + } + + //謖螳壹&繧後◆霆贋ク。縺ョ繧ェ繝悶ず繧ァ繧ッ繝亥叙蠕 + const vehikel_besch_t *besch = vehikelbauer_t::get_info(name.c_str()); + if( !besch ) { + + continue; + } + + //譖エ譁ー霆贋ク。繝ェ繧ケ繝医r繝繝シ繝悶Ν縺九i蜿門セ + slist_tpl* list = update_vehicles.access(besch->get_name()); + + //譖エ譁ー霆贋ク。繝ェ繧ケ繝医′蟄伜惠縺吶k縺具シ + if( !list ) { + + //譖エ譁ー霆贋ク。繝ェ繧ケ繝医r菴懈 + slist_tpl tmp; + update_vehicles.put(besch->get_name(), tmp); + list = update_vehicles.access(besch->get_name()); + } + + //譖エ譁ー霆贋ク。繧偵Μ繧ケ繝医↓霑ス蜉縺吶k + for( int i = 0; ; ++i ) { + + char buf[128]; + sprintf(buf, "update[%d]", i); + std::string str = update_vehicles_tab.get(buf); + + //update譁縺瑚ヲ九▽縺九i縺ェ縺代l縺ー繝ォ繝シ繝励r謚懊¢繧 + if( str.empty() ) { + + break; + } + + //譖エ譁ー逕ィ霆贋ク。縺ョ繧ェ繝悶ず繧ァ繧ッ繝亥叙蠕 + const vehikel_besch_t* append = name_fahrzeuge.get(str.c_str()); + + //霑ス蜉蛻、螳 + if( append //譖エ譁ー逕ィ霆贋ク。縺悟ュ伜惠縺 + && besch != append //譖エ譁ー蜈縺ィ縺ッ蛻・霆贋ク。縺ァ縺ゅj + && besch->get_waytype() == append->get_waytype() //蜷後§waytype縺ァ + && !list->is_contained(append) //縺セ縺譛ェ逋サ骭イ縺ェ繧芽ソス蜉縺吶k + ) { + + list->append(append); + } //if + } //for + } //while + } //FORX + return true; } @@ -513,3 +604,13 @@ } return besch; } + + +/* +* 譖エ譁ー霆贋ク。蛟呵」懊Μ繧ケ繝医r蜿門セ +* @author T-Na +*/ +const slist_tpl& vehikelbauer_t::get_update_vehicles( const char *name ) { + + return update_vehicles.get(name); +} Index: bauer/vehikelbauer.h =================================================================== --- bauer/vehikelbauer.h (リビジョン 6368) +++ bauer/vehikelbauer.h (作業コピー) @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 - 2002 Hansjrg Malthaner + * Copyright (c) 1997 - 2002 Hansj丁g Malthaner * * This file is part of the Simutrans project under the artistic licence. * (see licence.txt) @@ -51,6 +51,12 @@ * prev_veh==NULL equals leading of convoi */ static const vehikel_besch_t *get_best_matching( waytype_t wt, const uint16 month_now, const uint32 target_weight, const uint32 target_power, const sint32 target_speed, const ware_besch_t * target_freight, bool not_obsolete, const vehikel_besch_t *prev_veh, bool is_last ); + + /** + * 譖エ譁ー霆贋ク。蛟呵」懊Μ繧ケ繝医r蜿門セ + * @author T-Na + */ + static const slist_tpl& get_update_vehicles( const char *name ); }; #endif Index: dataobj/einstellungen.cc =================================================================== --- dataobj/einstellungen.cc (リビジョン 6368) +++ dataobj/einstellungen.cc (作業コピー) @@ -1002,6 +1002,13 @@ umgebung_t::autosave = (contents.get_int("autosave", umgebung_t::autosave) ); + //螟画峩繧ウ繧ケ繝医ョ蛟咲紫險ュ螳壹r隱ュ縺ソ霎シ繧 + //@author T-Na + { + int value = contents.get_int("magnification_of_update_cost", umgebung_t::get_magnification_of_update_costi()); + umgebung_t::set_magnification_of_update_cost(value); + } + // routing stuff max_route_steps = contents.get_int("max_route_steps", max_route_steps ); max_hops = contents.get_int("max_hops", max_hops ); @@ -1273,6 +1280,7 @@ } else if(strcmp(str, "xml_bzip2") == 0) { loadsave_t::set_autosavemode(loadsave_t::xml_bzip2 ); } + /* * Default resolution Index: dataobj/umgebung.cc =================================================================== --- dataobj/umgebung.cc (リビジョン 6368) +++ dataobj/umgebung.cc (作業コピー) @@ -115,6 +115,9 @@ uint8 umgebung_t::bottom_window_bar_color; uint8 umgebung_t::bottom_window_text_color; +//譖エ譁ー繧ウ繧ケ繝医ョ蛟咲紫 +//@author T-Na +uint8 umgebung_t::magnification_of_update_cost = 10; // Hajo: hier Standardwerte belegen. void umgebung_t::init() Index: dataobj/umgebung.h =================================================================== --- dataobj/umgebung.h (リビジョン 6368) +++ dataobj/umgebung.h (作業コピー) @@ -381,6 +381,31 @@ * @see simmain.cc */ static void rdwr(loadsave_t *file); + + + //譖エ譁ー繧ウ繧ケ繝医ョ蛟咲紫繧貞叙蠕 + //@author T-Na + static float get_magnification_of_update_cost() + { + return static_cast(magnification_of_update_cost) / 100.0f; + } + + static sint8 get_magnification_of_update_costi() + { + return magnification_of_update_cost; + } + + //譖エ譁ー繧ウ繧ケ繝医ョ蛟咲紫繧定ィュ螳 + //@author T-Na + static void set_magnification_of_update_cost( int value ) + { + magnification_of_update_cost = clamp(value, 0, 100); + } + +private: + //譖エ譁ー繧ウ繧ケ繝医ョ蛟咲紫 + //@author T-Na + static uint8 magnification_of_update_cost; }; #endif Index: gui/depot_frame.cc =================================================================== --- gui/depot_frame.cc (リビジョン 6368) +++ gui/depot_frame.cc (作業コピー) @@ -89,7 +89,9 @@ scrolly_electrics(&cont_electrics), scrolly_loks(&cont_loks), scrolly_waggons(&cont_waggons), - lb_vehicle_filter("Filter:", COL_BLACK, gui_label_t::right) + lb_vehicle_filter("Filter:", COL_BLACK, gui_label_t::right), + selected_index( -1 ), + target_vehicle( NULL ) { DBG_DEBUG("depot_frame_t::depot_frame_t()","get_max_convoi_length()=%i",depot->get_max_convoi_length()); last_selected_line = depot->get_last_selected_line(); @@ -657,11 +659,25 @@ } else { // list only matching ones - FOR(slist_tpl, const info, depot->get_vehicle_type()) { + + //譖エ譁ー繝「繝シ繝峨ョ譎ゅッ譖エ譁ー蜿ッ閭ス縺ェ霆贋ク。繧定ソス蜉縺吶k + //@author T-Na + convoihandle_t cnv = depot->get_convoi(icnv); + bool cnv_is_bound = cnv.is_bound(); + bool is_update = veh_action == va_update; + + if( is_update && ( !cnv_is_bound || cnv->get_vehikel_anzahl() <= selected_index ) ) { + + goto EXIT; + } + + const slist_tpl& list = !is_update ? depot->get_vehicle_type() : vehikelbauer_t::get_update_vehicles(cnv->get_vehikel(selected_index)->get_besch()->get_name()); + + FOR(slist_tpl, const info, list) { const vehikel_besch_t *veh = NULL; - convoihandle_t cnv = depot->get_convoi(icnv); - if(cnv.is_bound() && cnv->get_vehikel_anzahl()>0) { - veh = (veh_action == va_insert ? cnv->front() : cnv->back())->get_besch(); + if(cnv_is_bound && cnv->get_vehikel_anzahl()>0) { + + veh = !is_update ? ( veh_action == va_insert ? cnv->front() : cnv->back() )->get_besch() : NULL; } // current vehicle @@ -683,6 +699,7 @@ } } } +EXIT: DBG_DEBUG("depot_frame_t::build_vehicle_lists()","finally %i passenger vehicle, %i engines, %i good wagons",pas_vec.get_count(),loks_vec.get_count(),waggons_vec.get_count()); update_data(); update_tabs(); @@ -697,7 +714,7 @@ void depot_frame_t::update_data() { - static const char *txt_veh_action[3] = { "anhaengen", "voranstellen", "verkaufen" }; + static const char *txt_veh_action[4] = { "anhaengen", "voranstellen", "verkaufen", "updating/remodeling" }; // change green into blue for retired vehicles const int month_now = get_welt()->get_timeline_year_month(); @@ -750,19 +767,32 @@ const vehikel_besch_t *veh = NULL; + //@author T-Na + bool is_update = veh_action == va_update; + clear_ptr_vector( convoi_pics ); if( cnv.is_bound() && cnv->get_vehikel_anzahl() > 0 ) { + for( unsigned i=0; i < cnv->get_vehikel_anzahl(); i++ ) { - // just make sure, there is this vehicle also here! + const vehikel_besch_t *info=cnv->get_vehikel(i)->get_besch(); - if( vehicle_map.get( info ) == NULL ) { - add_to_vehicle_list( info ); - } - gui_image_list_t::image_data_t* img_data = new gui_image_list_t::image_data_t(info->get_name(), info->get_basis_bild()); + //譖エ譁ー繝「繝シ繝画凾縺ッ邱ィ謌舌ョ霆贋ク。繧定ソス蜉縺励↑縺 + //@author T-Na + if( !is_update ) { + + // just make sure, there is this vehicle also here! + if( vehicle_map.get( info ) == NULL ) { + add_to_vehicle_list( info ); + } + + } //if + + gui_image_list_t::image_data_t *img_data = new gui_image_list_t::image_data_t(info->get_name(), info->get_basis_bild()); convoi_pics.append(img_data); } + /* color bars for current convoi: */ convoi_pics[0]->lcolor = cnv->front()->get_besch()->can_follow(NULL) ? COL_GREEN : COL_YELLOW; { @@ -784,6 +814,34 @@ convoi_pics[i]->rcolor = COL_BLUE; } } + + //譖エ譁ー繝「繝シ繝画凾縺ッ繝舌シ縺ョ濶イ繧貞、峨∴繧 + //@author T-Na + if( is_update ) { + + gui_image_list_t::image_data_t *img = convoi_pics[i]; + + if( selected_index != i ) { + + COLOR_VAL& lcolor = img->lcolor; + switch( lcolor ) { + + case COL_GREEN: lcolor = COL_DARK_GREEN; break; + case COL_BLUE: lcolor = COL_DARK_BLUE; break; + case COL_YELLOW: lcolor = COL_DARK_YELLOW; break; + case COL_RED: lcolor = COL_DARK_RED; break; + } + + COLOR_VAL& rcolor = img->rcolor; + switch( rcolor ) { + + case COL_GREEN: rcolor = COL_DARK_GREEN; break; + case COL_BLUE: rcolor = COL_DARK_BLUE; break; + case COL_YELLOW: rcolor = COL_DARK_YELLOW; break; + case COL_RED: rcolor = COL_DARK_RED; break; + } + } //if + } //if } veh = (veh_action == va_insert ? cnv->front() : cnv->back())->get_besch(); @@ -833,7 +891,13 @@ FOR(slist_tpl, const v, depot->get_vehicle_list()) { // can fail, if currently not visible if (gui_image_list_t::image_data_t* const imgdat = vehicle_map.get(v->get_besch())) { - imgdat->count++; + + if( !is_update ) { + + //譖エ譁ー繝「繝シ繝我サ・螟悶↑繧画園謖√き繧ヲ繝ウ繝医r蠅励d縺 + imgdat->count++; + } + if(veh_action == va_sell) { imgdat->lcolor = COL_GREEN; imgdat->rcolor = COL_GREEN; @@ -910,6 +974,16 @@ if( veh_action == va_sell ) { depot->call_depot_tool('s', convoihandle_t(), bild_data->text ); } + + //譖エ譁ー繧ウ繝槭Φ繝臥匱陦 + //@author T-Na + else if( veh_action == va_update ) { + + char buf[128]; + sprintf(buf, "%i,%s", selected_index, bild_data->text); + depot->call_depot_tool( 'u', depot->get_convoi( icnv ), buf ); + } + else { convoihandle_t cnv = depot->get_convoi( icnv ); if( !cnv.is_bound() && !depot->get_besitzer()->is_locked() ) { @@ -928,23 +1002,37 @@ { const convoihandle_t cnv = depot->get_convoi( icnv ); if( cnv.is_bound() && nr < cnv->get_vehikel_anzahl() ) { - // we remove all connected vehicles together! - // find start - unsigned start_nr = nr; - while( start_nr > 0 ) { - start_nr--; - const vehikel_besch_t *info = cnv->get_vehikel(start_nr)->get_besch(); - if( info->get_nachfolger_count() != 1 ) { - start_nr++; - break; + + //譖エ譁ー繝「繝シ繝画凾縺ッ蜃ヲ逅繧貞、画峩縺吶k + //@author T-Na + if( veh_action != va_update ) { + + selected_index = -1; + + // we remove all connected vehicles together! + // find start + unsigned start_nr = nr; + while( start_nr > 0 ) { + start_nr--; + const vehikel_besch_t *info = cnv->get_vehikel(start_nr)->get_besch(); + if( info->get_nachfolger_count() != 1 ) { + start_nr++; + break; + } } - } - cbuffer_t start; - start.printf("%u", start_nr); + cbuffer_t start; + start.printf("%u", start_nr); - const char tool = to_end ? 'R' : 'r'; - depot->call_depot_tool( tool, cnv, start ); + const char tool = to_end ? 'R' : 'r'; + depot->call_depot_tool( tool, cnv, start ); + + //驕ク謚槭&繧後◆霆贋ク。縺ョ繧、繝ウ繝繝繧ッ繧ケ繧貞叙蠕(譖エ譁ー繝「繝シ繝) + //@author T-Na + } else { + + selected_index = selected_index != nr ? nr : -1; + } //if } } @@ -966,6 +1054,9 @@ // only then call the tool to start char tool = event_get_last_control_shift() == 2 ? 'B' : 'b'; // start all with CTRL-click depot->call_depot_tool( tool, cnv, NULL); + + //驕ク謚櫁サ贋ク。繧、繝ウ繝繝繧ッ繧ケ繧偵Μ繧サ繝繝医☆繧九 @author T-Na + selected_index = -1; } } else if( komp == &bt_schedule ) { @@ -994,6 +1085,9 @@ } else if( komp == &bt_sell ) { depot->call_depot_tool('v', cnv, NULL); + + //驕ク謚櫁サ贋ク。繧、繝ウ繝繝繧ッ繧ケ繧偵Μ繧サ繝繝医☆繧九 @author T-Na + selected_index = -1; } // image list selection here ... else if( komp == &convoi ) { @@ -1021,7 +1115,10 @@ depot_t::update_all_win(); } else if( komp == &bt_veh_action ) { - if( veh_action == va_sell ) { + + //譖エ譁ー繝「繝シ繝峨↓蛻繧頑崛縺亥庄閭ス縺ォ縺吶k + //@author T-Na + if( veh_action == va_update ) { veh_action = va_append; } else { @@ -1047,6 +1144,9 @@ else { set_focus( (gui_komponente_t *)&convoy_selector ); } + + //驕ク謚櫁サ贋ク。繧、繝ウ繝繝繧ッ繧ケ繧偵Μ繧サ繝繝医☆繧九 @author T-Na + selected_index = -1; } else if( komp == &line_selector ) { int selection = p.i; @@ -1217,12 +1317,28 @@ uint32 total_max_weight = 0; uint32 total_min_weight = 0; + // + bool is_update = veh_action == va_update; + if( cnv.is_bound() ) { if( cnv->get_vehikel_anzahl()>0 ) { - for( unsigned i = 0; i < cnv->get_vehikel_anzahl(); i++ ) { - const vehikel_besch_t *besch = cnv->get_vehikel(i)->get_besch(); + sint32 empty_kmh = 0, max_kmh, min_kmh, cnv_min_top_kmh = 0; + sint32 cnv_len = 0; + sint32 cnv_tile_len = 0; + for( unsigned i = 0, len = cnv->get_vehikel_anzahl(); i < len; i++ ) { + const vehikel_besch_t *besch; + if( !is_update || !target_vehicle || i != selected_index ) { + + besch = cnv->get_vehikel(i)->get_besch(); + } + + else { + + besch = target_vehicle; + } + total_power += besch->get_leistung()*besch->get_gear()/64; uint32 max_weight = 0; @@ -1239,6 +1355,18 @@ total_max_weight += besch->get_gewicht() + max_weight*besch->get_zuladung(); total_min_weight += besch->get_gewicht() + min_weight*besch->get_zuladung(); + //譛菴朱溷コヲ繧呈、懷コ縺吶k + //@author T-Na + sint32 speed = besch->get_geschw(); + cnv_min_top_kmh = i == 0 ? speed : min( cnv_min_top_kmh, speed ); + + //邱ィ謌舌ョ髟キ縺輔r險育ョ励☆繧 + uint8 veh_len = besch->get_length(); + cnv_len += veh_len; + + //邱ィ謌舌ョ繧ソ繧、繝ォ髟キ繧定ィ育ョ励☆繧 + cnv_tile_len += i != len - 1 ? veh_len : max(CARUNITS_PER_TILE/2, veh_len); + const ware_besch_t* const ware = besch->get_ware(); switch( ware->get_catg_index() ) { case warenbauer_t::INDEX_PAS: { @@ -1256,23 +1384,25 @@ } } - sint32 empty_kmh, max_kmh, min_kmh, cnv_min_top_kmh; if( cnv->front()->get_waytype() == air_wt ) { // flying aircraft have 0 friction --> speed not limited by power, so just use top_speed - empty_kmh = max_kmh = min_kmh = cnv_min_top_kmh = speed_to_kmh( cnv->get_min_top_speed() ); + empty_kmh = max_kmh = min_kmh = cnv_min_top_kmh;// = speed_to_kmh( cnv->get_min_top_speed() ); } else { - cnv_min_top_kmh = speed_to_kmh( cnv->get_min_top_speed() ); empty_kmh = total_power <= total_empty_weight/1000 ? 1 : min( cnv_min_top_kmh, sqrt_i32(((total_power<<8)/(total_empty_weight/1000)-(1<<8))<<8)*50 >>8 ); max_kmh = total_power <= total_min_weight/1000 ? 1 : min( cnv_min_top_kmh, sqrt_i32(((total_power<<8)/(total_min_weight/1000)-(1<<8))<<8)*50 >>8 ); min_kmh = total_power <= total_max_weight/1000 ? 1 : min( cnv_min_top_kmh, sqrt_i32(((total_power<<8)/(total_max_weight/1000)-(1<<8))<<8)*50 >>8 ); } + //邱ィ謌舌ョ繧ソ繧、繝ォ髟キ繧定ィ育ョ励☆繧 + //@author T-Na + cnv_tile_len = (cnv_tile_len + CARUNITS_PER_TILE - 1) / CARUNITS_PER_TILE; + const sint32 convoi_length = (cnv->get_vehikel_anzahl()) * CARUNITS_PER_TILE / 2 - 1; - convoi_tile_length_sb = convoi_length + (cnv->get_tile_length() * CARUNITS_PER_TILE - cnv->get_length()); + convoi_tile_length_sb = convoi_length + (cnv_tile_len * CARUNITS_PER_TILE - cnv_len); txt_convoi_count.clear(); - txt_convoi_count.printf("%s %i",translator::translate("Station tiles:"), cnv->get_tile_length() ); + txt_convoi_count.printf("%s %i",translator::translate("Station tiles:"), cnv_tile_len ); txt_convoi_speed.clear(); if( empty_kmh != min_kmh ) { @@ -1438,6 +1568,10 @@ koord relpos = koord( 0, ((gui_scrollpane_t *)tabs.get_aktives_tab())->get_scroll_y() ); int sel_index = lst->index_at( pos + tabs.get_pos() - relpos, x, y - 16 - gui_tab_panel_t::HEADER_VSIZE); + //@author T-Na + bool cursor_over_cnv = false; + target_vehicle = NULL; + if( (sel_index != -1) && (tabs.getroffen(x - pos.x, y - pos.y - 16)) ) { // cursor over a vehicle in the selection list const vector_tpl& vec = (lst == &electrics ? electrics_vec : (lst == &pas ? pas_vec : (lst == &loks ? loks_vec : waggons_vec))); @@ -1449,6 +1583,9 @@ if( vec[sel_index]->count > 0 ) { resale_value = calc_restwert( veh_type ); } + + //@author T-Na + target_vehicle = veh_type; } else { // cursor over a vehicle in the convoi @@ -1458,6 +1595,9 @@ veh_type = cnv->get_vehikel( sel_index )->get_besch(); resale_value = cnv->get_vehikel( sel_index )->calc_restwert(); new_vehicle_length_sb_force_zero = true; + + //author T-Na + cursor_over_cnv = true; } } @@ -1493,8 +1633,12 @@ } { + //譖エ譁ー繝「繝シ繝画凾縺ッ繧ウ繧ケ繝医↓譖エ譁ー繧ウ繧ケ繝亥咲紫(umgebung_t::magnification_of_update_cost)繧呈寺縺代k + //@author T-Na + const sint32 price = static_cast(static_cast(veh_type->get_preis()) * (cursor_over_cnv || veh_action != va_update ? 1.0f : umgebung_t::get_magnification_of_update_cost())); + char tmp[128]; - money_to_string( tmp, veh_type->get_preis() / 100.0, false ); + money_to_string( tmp, price / 100.0, false ); n += sprintf( buf + n, translator::translate("Cost: %8s (%.2f$/km)\n"), tmp, veh_type->get_betriebskosten() / 100.0 ); } @@ -1560,7 +1704,8 @@ display_multiline_text( pos.x + second_column_x, pos.y + tabs.get_pos().y + tabs.get_groesse().y + 31 + LINESPACE * 2 + 4, buf, COL_BLACK); // update speedbar - new_vehicle_length_sb = new_vehicle_length_sb_force_zero ? 0 : convoi_length_ok_sb + convoi_length_slower_sb + convoi_length_too_slow_sb + veh_type->get_length(); + // 譖エ譁ー繝「繝シ繝画凾縺ッ繝舌シ繧貞サカ縺ー縺輔↑縺 + new_vehicle_length_sb = new_vehicle_length_sb_force_zero || veh_action == va_update ? 0 : convoi_length_ok_sb + convoi_length_slower_sb + convoi_length_too_slow_sb + veh_type->get_length(); } else { new_vehicle_length_sb = 0; Index: gui/depot_frame.h =================================================================== --- gui/depot_frame.h (リビジョン 6368) +++ gui/depot_frame.h (作業コピー) @@ -182,10 +182,21 @@ KOORD_VAL second_column_x; // x position of the second text column - enum { va_append, va_insert, va_sell }; + /** + * 更新モードを追加 + * @author T-Na + */ + enum { va_append, va_insert, va_sell, va_update }; uint8 veh_action; /** + * 更新モード時、選択中の車両インデックス + * @author T-Na + */ + uint8 selected_index; + const vehikel_besch_t* target_vehicle; + + /** * A helper map to update loks_vec and waggons_Vec. All entries from * loks_vec and waggons_vec are referenced here. * @author Volker Meyer @@ -278,7 +289,7 @@ /** * Manche Fenster haben einen Hilfetext assoziiert. - * @return den Dateinamen fr die Hilfe, oder NULL + * @return den Dateinamen f・ die Hilfe, oder NULL * @author Hj. Malthaner */ const char * get_hilfe_datei() const {return "depot.txt";} Index: gui/settings_stats.cc =================================================================== --- gui/settings_stats.cc (リビジョン 6368) +++ gui/settings_stats.cc (作業コピー) @@ -415,6 +415,12 @@ INIT_COST( "cost_multiply_remove_field", -sets->cst_multiply_remove_field, 1, 100000000, 10, false ); INIT_COST( "cost_transformer", -sets->cst_transformer, 1, 100000000, 10, false ); INIT_COST( "cost_maintain_transformer", -sets->cst_maintain_transformer, 1, 100000000, 10, false ); + + //譖エ譁ー繧ウ繧ケ繝医ョ蛟咲紫 + //@author T-Na + SEPERATOR + INIT_NUM( "magnification_of_update_cost", umgebung_t::get_magnification_of_update_costi(), 0, 100, 1, false ); + set_groesse( settings_stats_t::get_groesse() ); } @@ -445,6 +451,12 @@ READ_COST_VALUE( sets->cst_transformer )*(-1); READ_COST_VALUE( sets->cst_maintain_transformer )*(-1); + //譖エ譁ー繧ウ繧ケ繝医ョ蛟咲紫 + //@author T-Na + sint8 value; + READ_NUM_VALUE( value ); + umgebung_t::set_magnification_of_update_cost( value ); + clear_dirty(); set_groesse( settings_stats_t::get_groesse() ); } Index: simconvoi.cc =================================================================== --- simconvoi.cc (リビジョン 6368) +++ simconvoi.cc (作業コピー) @@ -1,6 +1,6 @@ /** - * convoi_t Klasse fr Fahrzeugverb舅de - * von Hansjrg Malthaner + * convoi_t Klasse f繝サ Fahrzeugverb闊de + * von Hansj丁g Malthaner */ #include @@ -529,7 +529,7 @@ /** - * Gibt die Position des Convois zurck. + * Gibt die Position des Convois zur繝サk. * @return Position des Convois * @author Hj. Malthaner */ @@ -772,7 +772,7 @@ switch(state) { case INITIAL: - // jemand mu゚ start aufrufen, damit der convoi von INITIAL + // jemand muセ start aufrufen, damit der convoi von INITIAL // nach ROUTING_1 geht, das kann nicht automatisch gehen break; @@ -883,7 +883,7 @@ /** * Berechne route von Start- zu Zielkoordinate - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ bool convoi_t::drive_to() { @@ -927,7 +927,7 @@ /** * Ein Fahrzeug hat ein Problem erkannt und erzwingt die * Berechnung einer neuen Route - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ void convoi_t::suche_neue_route() { @@ -3456,3 +3456,42 @@ } return value; } + + +/* + * 霆贋ク。縺ョ譖エ譁ー繧定。後≧ + * @author T-Na + */ +sint64 convoi_t::update_vehicle( uint index, const vehikel_besch_t* info ) +{ + //蜈縺ョ霆贋ク。縺ョ諠蝣ア繧貞叙蠕 + vehikel_t* old = fahr[ index ]; + const vehikel_besch_t* old_besch = old->get_besch(); + + //邱城埼上ョ蜀崎ィ育ョ + sum_gewicht += ( info->get_gewicht() - old_besch->get_gewicht() ); + + //譛鬮倬溷コヲ蜿門セ + min_top_speed = min( min_top_speed, kmh_to_speed( info->get_geschw() ) ); + + //霆贋ク。譖エ譁ー + old->update(info); + + //邱ィ謌先ュ蝣ア譖エ譁ー + sum_gesamtgewicht = sum_gewicht; + recalc_catg_index(); + calc_loading(); + freight_info_resort = true; + recalc_catg_index(); + + //蟷エ莉」險ュ螳壽怏蜉ケ縺ェ繧峨√Μ繧ソ繧、繧「繝輔Λ繧ー繧貞崎ィュ螳壹☆繧 + if( welt->use_timeline() ) { + + has_obsolete = info->is_retired( welt->get_timeline_year_month() ); + } + + //譖エ譁ー繧ウ繧ケ繝郁ィ育ョ + sint64 cost = static_cast(static_cast(info->get_preis()) * umgebung_t::get_magnification_of_update_cost()); + + return cost; +} \ No newline at end of file Index: simconvoi.h =================================================================== --- simconvoi.h (リビジョン 6368) +++ simconvoi.h (作業コピー) @@ -254,7 +254,7 @@ * The coinvoi is not processed every sync step for various actions * (like waiting before signals, loading etc.) Such action will only * continue after a waiting time larger than wait_lock - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ sint32 wait_lock; @@ -265,8 +265,8 @@ uint32 go_on_ticks; /** - * akkumulierter gewinn ber ein jahr hinweg - * @author Hanjsrg Malthaner + * akkumulierter gewinn 繝サer ein jahr hinweg + * @author Hanjs丁g Malthaner */ sint64 jahresgewinn; @@ -312,14 +312,14 @@ /** * Berechne route von Start- zu Zielkoordinate - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ bool drive_to(); /** * Setup vehicles for moving in same direction than before * if the direction is the same as before - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ bool can_go_alte_richtung(); @@ -333,7 +333,7 @@ /** * Mark first and last vehicle. - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ void set_erstes_letztes(); @@ -460,15 +460,15 @@ void reset_waiting() { state=WAITING_FOR_CLEARANCE; } /** - * Das Handle fr uns selbst. In Anlehnung an 'this' aber mit + * Das Handle f繝サ uns selbst. In Anlehnung an 'this' aber mit * allen checks beim Zugriff. - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ convoihandle_t self; /** * Der Gewinn in diesem Jahr - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ const sint64 & get_jahresgewinn() const {return jahresgewinn;} @@ -507,7 +507,7 @@ /** * Called if a vehicle enters a depot - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ void betrete_depot(depot_t *dep); @@ -518,7 +518,7 @@ karte_t* get_welt() { return welt; } /** - * Gibt Namen des Convois zurck. + * Gibt Namen des Convois zur繝サk. * @return Name des Convois * @author Hj. Malthaner */ @@ -532,7 +532,7 @@ char *access_internal_name() {return name_and_id+name_offset;} /** - * Gibt Namen des Convois zurck. + * Gibt Namen des Convois zur繝サk. * @return Name des Convois * @author Hj. Malthaner */ @@ -545,7 +545,7 @@ void set_name(const char *name, bool with_new_id = true); /** - * Gibt die Position des Convois zurck. + * Gibt die Position des Convois zur繝サk. * @return Position des Convois * @author Hj. Malthaner */ @@ -610,7 +610,7 @@ /** * Ein Fahrzeug hat ein Problem erkannt und erzwingt die * Berechnung einer neuen Route - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ void suche_neue_route(); @@ -689,7 +689,7 @@ void zeige_info(); /** - * @return Einen Beschreibungsstring fr das Objekt, der z.B. in einem + * @return Einen Beschreibungsstring f繝サ das Objekt, der z.B. in einem * Beobachtungsfenster angezeigt wird. * @author Hj. Malthaner * @see simwin @@ -727,7 +727,7 @@ /** * Setup vehicles before starting to move - * @author Hanjsrg Malthaner + * @author Hanjs丁g Malthaner */ void vorfahren(); @@ -861,6 +861,12 @@ // Overtaking for convois virtual bool can_overtake(overtaker_t *other_overtaker, sint32 other_speed, sint16 steps_other); + + /** + * 霆贋ク。縺ョ譖エ譁ー繧定。後≧ + * @author T-Na + */ + sint64 update_vehicle( uint index, const vehikel_besch_t* info ); }; #endif Index: simdepot.cc =================================================================== --- simdepot.cc (リビジョン 6368) +++ simdepot.cc (作業コピー) @@ -612,6 +612,22 @@ } +/* + * 霆贋ク。縺ョ譖エ譁ー繧定。後≧ + * @author T-Na + */ +void depot_t::update_vehicle( convoihandle_t cnv, uint index, const vehikel_besch_t* besch ) +{ + sint64 cost = static_cast(cnv->update_vehicle(index, besch)); + if( 0 < cost ) + { + spieler_t* sp = get_besitzer(); + sp->buche(-cost, get_pos().get_2d(), COST_NEW_VEHICLE); + sp->buche(cost, COST_ASSETS); + } +} + + unsigned bahndepot_t::get_max_convoi_length() const { return convoi_t::max_rail_vehicle; Index: simdepot.h =================================================================== --- simdepot.h (リビジョン 6368) +++ simdepot.h (作業コピー) @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 - 2001 Hansjrg Malthaner + * Copyright (c) 1997 - 2001 Hansj丁g Malthaner * * This file is part of the Simutrans project under the artistic license. * (see license.txt) @@ -241,6 +241,12 @@ bool is_command_pending() const { return command_pending; } void clear_command_pending() { command_pending = false; } void set_command_pending() { command_pending = true; } + + /** + * 霆贋ク。縺ョ譖エ譁ー繧定。後≧ + * @author T-Na + */ + void update_vehicle( convoihandle_t cnv, uint index, const vehikel_besch_t* besch ); }; Index: simwerkz.cc =================================================================== --- simwerkz.cc (リビジョン 6368) +++ simwerkz.cc (作業コピー) @@ -6089,6 +6089,7 @@ } break; } + case 'u': // update a vehicle @author T-Na case 'a': // append a vehicle case 'i': // insert a vehicle in front case 's': // sells a vehicle @@ -6123,6 +6124,24 @@ } } } + else if( tool == 'u' ) { + + int sel = atoi(p); + while( *p ) { + + if( *p++ == ',' ) { + + break; + } + } + + // 霆贋ク。縺悟ュ伜惠縺励※縺繧後ー霆雁コォ縺ョ霆贋ク。譖エ譁ー蜃ヲ逅繧貞他縺ウ蜃コ縺 + const vehikel_besch_t* info = vehikelbauer_t::get_info(p); + if( info && sel != -1 ) { + + depot->update_vehicle(cnv, sel, info); + } //if + } else { // create and append it const vehikel_besch_t *info = vehikelbauer_t::get_info( p ); Index: tpl/slist_tpl.h =================================================================== --- tpl/slist_tpl.h (リビジョン 6368) +++ tpl/slist_tpl.h (作業コピー) @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 - 2001 Hansjrg Malthaner + * Copyright (c) 1997 - 2001 Hansj丁g Malthaner * * This file is part of the Simutrans project under the artistic license. * (see license.txt) @@ -46,10 +46,37 @@ T data; }; - node_t *head; - node_t *tail; - uint32 node_count; + struct property_t + { + node_t *head; + node_t *tail; + uint32 node_count; + //reference counter + int* ref_cnt; + + property_t() + : head( NULL ) + , tail( NULL ) + , node_count( 0 ) + { + ref_cnt = new int( 1 ); + } + + void clear() + { + head = NULL; + tail = NULL; + node_count = 0; + } + }; + + /** + * reference properties + * @author T-Na + */ + property_t* prop; + public: class const_iterator; @@ -144,15 +171,20 @@ * @author Hj. Malthaner */ slist_tpl() + : prop( NULL ) { - head = 0; // leere liste - tail = 0; - node_count = 0; + //@author T-Na + //prop = new property_t(); } ~slist_tpl() { - clear(); + //@author T-Na + if( prop && --*prop->ref_cnt == 0 ) { + + clear(); + delete prop; + } } /** @@ -162,12 +194,17 @@ */ void insert(const T& data) { - node_t* tmp = new node_t(data, head); - head = tmp; - if( tail == NULL ) { - tail = tmp; + if( !prop ) { + + prop = new property_t(); } - node_count++; + + node_t* tmp = new node_t(data, prop->head); + prop->head = tmp; + if( prop->tail == NULL ) { + prop->tail = tmp; + } + prop->node_count++; } /** @@ -177,12 +214,17 @@ */ void insert() { - node_t* tmp = new node_t(head); - head = tmp; - if( tail == NULL ) { - tail = tmp; + if( !prop ) { + + prop = new property_t(); } - node_count++; + + node_t* tmp = new node_t(prop->head); + prop->head = tmp; + if( prop->tail == NULL ) { + prop->tail = tmp; + } + prop->node_count++; } /** @@ -192,14 +234,19 @@ */ void append(const T& data) { - if (tail == 0) { + if( !prop ) { + + prop = new property_t(); + } + + if (prop->tail == 0) { insert(data); } else { node_t* tmp = new node_t(data, 0); - tail->next = tmp; - tail = tmp; - node_count++; + prop->tail->next = tmp; + prop->tail = tmp; + prop->node_count++; } } @@ -209,14 +256,19 @@ */ void append() { - if (tail == 0) { + if( !prop ) { + + prop = new property_t(); + } + + if (prop->tail == 0) { insert(); } else { node_t* tmp = new node_t(0); - tail->next = tmp; - tail = tmp; - node_count++; + prop->tail->next = tmp; + prop->tail = tmp; + prop->node_count++; } } @@ -227,14 +279,19 @@ */ void append_unique(const T& data) { - if (tail == 0) { + if( !prop ) { + + prop = new property_t(); + } + + if (prop->tail == 0) { insert(data); } else if( !is_contained(data) ) { node_t* tmp = new node_t(data, 0); - tail->next = tmp; - tail = tmp; - node_count++; + prop->tail->next = tmp; + prop->tail = tmp; + prop->node_count++; } } @@ -247,21 +304,27 @@ */ void append_list(slist_tpl& other) { - if (tail) { - tail->next = other.head; + if( other.prop ) { + + if( !prop ) { + + prop = new property_t(); + } + + if (prop->tail) { + prop->tail->next = other.prop->head; + } + else { + prop->head = other.prop->head; + } + if (other.prop->tail) { + prop->tail = other.prop->tail; + } + prop->node_count += other.prop->node_count; + + // empty other list + other.prop->clear(); } - else { - head = other.head; - } - if (other.tail) { - tail = other.tail; - } - node_count += other.node_count; - - // empty other list - other.tail = NULL; - other.head = NULL; - other.node_count = 0; } /** @@ -271,8 +334,13 @@ */ bool is_contained(const T &data) const { - node_t *p = head; + if( !prop ) { + return false; + } + + node_t *p = prop->head; + while(p != 0 && p->data != data) { p = p->next; } @@ -291,17 +359,17 @@ return false; } - if(head->data == data) { - node_t *tmp = head->next; - delete head; - head = tmp; + if(prop->head->data == data) { + node_t *tmp = prop->head->next; + delete prop->head; + prop->head = tmp; - if(head == NULL) { - tail = NULL; + if(prop->head == NULL) { + prop->tail = NULL; } } else { - node_t *p = head; + node_t *p = prop->head; while(p->next != 0 && !(p->next->data == data)) { p = p->next; @@ -315,10 +383,10 @@ p->next = tmp; if(tmp == 0) { - tail = p; + prop->tail = p; } } - node_count--; + prop->node_count--; return true; } @@ -333,17 +401,17 @@ dbg->fatal("slist_tpl::remove_first()","List of <%s> is empty",typeid(T).name()); } - T tmp = head->data; - node_t *p = head; + T tmp = prop->head->data; + node_t *p = prop->head; - head = head->next; + prop->head = prop->head->next; delete p; - node_count--; + prop->node_count--; - if(head == 0) { + if(prop->head == 0) { // list is empty now - tail = 0; + prop->tail = 0; } return tmp; @@ -356,44 +424,46 @@ */ void clear() { - node_t* p = head; - while (p != NULL) { - node_t* tmp = p; - p = p->next; - delete tmp; + if( prop ) { + + node_t* p = prop->head; + while (p != NULL) { + node_t* tmp = p; + p = p->next; + delete tmp; + } + + prop->clear(); } - head = 0; - tail = 0; - node_count = 0; } uint32 get_count() const { - return node_count; + return prop ? prop->node_count : 0; } - bool empty() const { return head == 0; } + bool empty() const { return !prop || prop->head == 0; } T& at(uint32 pos) const { - if (pos >= node_count) { + if (!prop || pos >= prop->node_count) { dbg->fatal("slist_tpl::at()", "<%s> index %d is out of bounds", typeid(T).name(), pos); } - node_t* p = head; + node_t* p = prop->head; while (pos--) { p = p->next; } return p->data; } - T& front() const { return head->data; } - T& back() const { return tail->data; } + T& front() const { return prop->head->data; } + T& back() const { return prop->tail->data; } - iterator begin() { return iterator(head, NULL); } - iterator end() { return iterator(NULL, tail); } + iterator begin() { return iterator(prop ? prop->head : NULL, NULL); } + iterator end() { return iterator(NULL, prop ? prop->tail : NULL); } - const_iterator begin() const { return const_iterator(head); } + const_iterator begin() const { return const_iterator(prop ? prop->head : NULL); } const_iterator end() const { return const_iterator(NULL); } /* Erase element at pos @@ -404,16 +474,16 @@ node_t* pred = pos.pred; node_t* succ = pos.ptr->next; if (pred == NULL) { - head = succ; + prop->head = succ; } else { pred->next = succ; } if (succ == NULL) { - tail = pred; + prop->tail = pred; } delete pos.ptr; - --node_count; + --prop->node_count; return iterator(succ, pred); } @@ -422,17 +492,22 @@ * An iterator pointing to the new element is returned */ iterator insert(iterator pos, const T& x) { + if( !prop ) { + + prop = new property_t(); + } + node_t* tmp = new node_t(x, pos.ptr); if (pos.pred == NULL) { - head = tmp; + prop->head = tmp; } else { pos.pred->next = tmp; } if (pos.ptr == NULL) { - tail = tmp; + prop->tail = tmp; } - ++node_count; + ++prop->node_count; return iterator(tmp, pos.pred); } @@ -441,23 +516,33 @@ * An iterator pointing to the new element is returned */ iterator insert(iterator pos) { + if( !prop ) { + + prop = new property_t(); + } + node_t* tmp = new node_t(pos.ptr); if (pos.pred == NULL) { - head = tmp; + prop->head = tmp; } else { pos.pred->next = tmp; } if (pos.ptr == NULL) { - tail = tmp; + prop->tail = tmp; } - ++node_count; + ++prop->node_count; return iterator(tmp, pos.pred); } int index_of(T data) const { - node_t *t = head; + if( !prop ) { + + return -1; + } + + node_t *t = prop->head; int index = 0; while(t && t->data != data) { @@ -467,10 +552,34 @@ return t ? index : -1; } -private: - slist_tpl(const slist_tpl& slist_tpl); - slist_tpl& operator=( slist_tpl const& other ); + //@author T-Na + slist_tpl(const slist_tpl& other) + : prop( NULL ) + { + copy( other ); + } + slist_tpl& operator=( slist_tpl const& other ) + { + copy( other ); + return *this; + } + + void copy( slist_tpl const& other ) + { + if( prop && --*prop->ref_cnt == 0 ) { + + clear(); + delete prop; + } + + if( other.prop ) { + + prop = other.prop; + ++*prop->ref_cnt; + } + } + }; #endif Index: vehicle/simvehikel.cc =================================================================== --- vehicle/simvehikel.cc (リビジョン 6368) +++ vehicle/simvehikel.cc (作業コピー) @@ -1762,6 +1762,20 @@ } +/* + * 霆贋ク。縺ョ譖エ譁ー繧定。後≧ + * @author T-Na + */ +void vehikel_t::update( const vehikel_besch_t* info ) +{ + //霆贋ク。縺ョ蟾ョ縺玲崛縺 + besch = info; + + //譖エ譁ー譌・險ュ螳 + insta_zeit = welt->get_current_month(); +} + + /*--------------------------- Fahrdings ------------------------------*/ Index: vehicle/simvehikel.h =================================================================== --- vehicle/simvehikel.h (リビジョン 6368) +++ vehicle/simvehikel.h (作業コピー) @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 - 2001 Hansjrg Malthaner + * Copyright (c) 1997 - 2001 Hansj丁g Malthaner * * This file is part of the Simutrans project under the artistic license. * (see license.txt) @@ -32,7 +32,7 @@ /*----------------------- Fahrdings ------------------------------------*/ /** - * Basisklasse fr alle Fahrzeuge + * Basisklasse f繝サ alle Fahrzeuge * * @author Hj. Malthaner */ @@ -174,7 +174,7 @@ /** - * Klasse fr alle Fahrzeuge mit Route + * Klasse f繝サ alle Fahrzeuge mit Route * * @author Hj. Malthaner */ @@ -240,7 +240,7 @@ uint16 route_index; uint16 total_freight; // since the sum is needed quite often, it is chached - slist_tpl fracht; // liste der gerade transportierten gter + slist_tpl fracht; // liste der gerade transportierten g繝サer const vehikel_besch_t *besch; @@ -252,8 +252,8 @@ */ koord3d pos_prev; - bool ist_erstes:1; // falls vehikel im convoi f臧rt, geben diese - bool ist_letztes:1; // flags auskunft ber die position + bool ist_erstes:1; // falls vehikel im convoi f閾ァrt, geben diese + bool ist_letztes:1; // flags auskunft 繝サer die position bool rauchen:1; bool check_for_finish:1; // true, if on the last tile bool has_driven:1; @@ -279,8 +279,8 @@ virtual waytype_t get_waytype() const = 0; /** - * Ermittelt die fr das Fahrzeug geltenden Richtungsbits, - * abh舅gig vom Untergrund. + * Ermittelt die f繝サ das Fahrzeug geltenden Richtungsbits, + * abh闊gig vom Untergrund. * * @author Hj. Malthaner, 04.01.01 */ @@ -356,7 +356,7 @@ // the convoi takes care of the max_speed of the vehicle sint32 get_speed_limit() const { return speed_limit; } - const slist_tpl & get_fracht() const { return fracht;} // liste der gerade transportierten gter + const slist_tpl & get_fracht() const { return fracht;} // liste der gerade transportierten g繝サer /** * Rotate freight target coordinates, has to be called after rotating factories. @@ -364,7 +364,7 @@ void rotate90_freight_destinations(const sint16 y_size); /** - * berechnet die gesamtmenge der befrderten waren + * berechnet die gesamtmenge der bef丁derten waren */ uint16 get_fracht_menge() const { return total_freight; } @@ -377,7 +377,7 @@ const char * get_fracht_name() const; /** - * setzt den typ der befrderbaren ware + * setzt den typ der bef丁derbaren ware */ const ware_besch_t* get_fracht_typ() const { return besch->get_ware(); } @@ -441,7 +441,7 @@ void remove_stale_freight(); /** - * erzeuge einen fr diesen Vehikeltyp passenden Fahrplan + * erzeuge einen f繝サ diesen Vehikeltyp passenden Fahrplan * @author Hj. Malthaner */ virtual schedule_t * erzeuge_neuen_fahrplan() const = 0; @@ -458,6 +458,12 @@ // this draws a tooltips for things stucked on depot order or lost virtual void display_after(int xpos, int ypos, bool dirty) const; + + /** + * 霆贋ク。縺ョ譖エ譁ー繧定。後≧ + * @author T-Na + */ + void update( const vehikel_besch_t* info ); }; @@ -468,7 +474,7 @@ /** - * Eine Klasse fr Strassenfahrzeuge. Verwaltet das Aussehen der + * Eine Klasse f繝サ Strassenfahrzeuge. Verwaltet das Aussehen der * Fahrzeuge und die Befahrbarkeit des Untergrundes. * * @author Hj. Malthaner @@ -516,7 +522,7 @@ /** - * Eine Klasse fr Schienenfahrzeuge. Verwaltet das Aussehen der + * Eine Klasse f繝サ Schienenfahrzeuge. Verwaltet das Aussehen der * Fahrzeuge und die Befahrbarkeit des Untergrundes. * * @author Hj. Malthaner @@ -636,7 +642,7 @@ /** - * Eine Klasse fr Wasserfahrzeuge. Verwaltet das Aussehen der + * Eine Klasse f繝サ Wasserfahrzeuge. Verwaltet das Aussehen der * Fahrzeuge und die Befahrbarkeit des Untergrundes. * * @author Hj. Malthaner @@ -670,7 +676,7 @@ /** - * Eine Klasse fr Flugzeuge. Verwaltet das Aussehen der + * Eine Klasse f繝サ Flugzeuge. Verwaltet das Aussehen der * Fahrzeuge und die Befahrbarkeit des Untergrundes. * * @author hsiegeln