Index: bauer/wegbauer.cc =================================================================== --- bauer/wegbauer.cc (リビジョン 6321) +++ bauer/wegbauer.cc (作業コピー) @@ -2105,11 +2105,13 @@ // cost is the more expensive one, so downgrading is between removing and new buidling cost -= max( weg->get_besch()->get_preis(), besch->get_preis() ); weg->set_besch(besch); +#if 0 // respect max speed of catenary wayobj_t const* const wo = gr->get_wayobj(besch->get_wtyp()); if (wo && wo->get_besch()->get_topspeed() < weg->get_max_speed()) { weg->set_max_speed( wo->get_besch()->get_topspeed() ); } +#endif weg->set_gehweg(add_sidewalk); spieler_t::add_maintenance( sp, weg->get_besch()->get_wartung()); weg->set_besitzer(sp); @@ -2197,11 +2199,13 @@ // cost is the more expensive one, so downgrading is between removing and new buidling cost -= max( weg->get_besch()->get_preis(), besch->get_preis() ); weg->set_besch(besch); +#if 0 // respect max speed of catenary wayobj_t const* const wo = gr->get_wayobj(besch->get_wtyp()); if (wo && wo->get_besch()->get_topspeed() < weg->get_max_speed()) { weg->set_max_speed( wo->get_besch()->get_topspeed() ); } +#endif spieler_t::add_maintenance( sp, weg->get_besch()->get_wartung()); weg->set_besitzer(sp); } Index: boden/wege/weg.cc =================================================================== --- boden/wege/weg.cc (リビジョン 6321) +++ boden/wege/weg.cc (作業コピー) @@ -1,13 +1,13 @@ /* - * Copyright (c) 1997 - 2001 Hansjrg Malthaner + * Copyright (c) 1997 - 2001 Hansj丁g Malthaner * * This file is part of the Simutrans project under the artistic licence. * (see licence.txt) * - * Basisklasse fr Wege in Simutrans. + * Basisklasse f繝サ Wege in Simutrans. * * 14.06.00 getrennt von simgrund.cc - * ワberarbeitet Januar 2001 + * セ彙erarbeitet Januar 2001 * * derived from simdings.h in 2007 * @@ -123,7 +123,7 @@ /** - * Setzt neue Beschreibung. Ersetzt alte Hchstgeschwindigkeit + * Setzt neue Beschreibung. Ersetzt alte H昼hstgeschwindigkeit * mit wert aus Beschreibung. * @author Hj. Malthaner */ @@ -167,6 +167,7 @@ flags = 0; bild = IMG_LEER; after_bild = IMG_LEER; + overhead_wire_max_speed = 0; } @@ -224,7 +225,7 @@ /** - * Info-text fr diesen Weg + * Info-text f繝サ diesen Weg * @author Hj. Malthaner */ void weg_t::info(cbuffer_t & buf) const @@ -232,6 +233,14 @@ ding_t::info(buf); buf.printf("%s %u%s", translator::translate("Max. speed:"), max_speed, translator::translate("km/h\n")); + + // 譫カ邱壹′縺ゅk蝣エ蜷医∵楔邱壹ョ譛鬮倬溷コヲ繧定。ィ遉コ縺吶k + // author:T-Na + if(overhead_wire_max_speed) { + + buf.printf("%s %u%s", translator::translate("Overhead wire:"), overhead_wire_max_speed, translator::translate( "km/h\n" )); + } + buf.printf("%s%u", translator::translate("\nRibi (unmasked)"), get_ribi_unmasked()); buf.printf("%s%u\n", translator::translate("\nRibi (masked)"), get_ribi()); Index: boden/wege/weg.h =================================================================== --- boden/wege/weg.h (リビジョン 6321) +++ boden/wege/weg.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 licence. * (see licence.txt) @@ -35,15 +35,15 @@ /** *

Der Weg ist die Basisklasse fuer alle Verkehrswege in Simutrans. - * Wege "gehren" immer zu einem Grund. Sie besitzen Richtungsbits sowie + * Wege "geh丁en" immer zu einem Grund. Sie besitzen Richtungsbits sowie * eine Maske fuer Richtungsbits.

* - *

Ein Weg gehrt immer zu genau einer Wegsorte

+ *

Ein Weg geh丁t immer zu genau einer Wegsorte

* - *

Kreuzungen werden dadurch untersttzt, da゚ ein Grund zwei Wege - * enthalten kann (prinzipiell auch mehrere mglich.

+ *

Kreuzungen werden dadurch unterst繝サzt, daセ ein Grund zwei Wege + * enthalten kann (prinzipiell auch mehrere m衷lich.

* - *

Wegtyp -1 ist reserviert und kann nicht fr Wege benutzt werden

+ *

Wegtyp -1 ist reserviert und kann nicht f繝サ Wege benutzt werden

* * @author Hj. Malthaner */ @@ -85,14 +85,14 @@ const weg_besch_t * besch; /** - * Richtungsbits fr den Weg. Norden ist oben rechts auf dem Monitor. + * Richtungsbits f繝サ den Weg. Norden ist oben rechts auf dem Monitor. * 1=Nord, 2=Ost, 4=Sued, 8=West * @author Hj. Malthaner */ uint8 ribi:4; /** - * Maske fr Richtungsbits + * Maske f繝サ Richtungsbits * @author Hj. Malthaner */ uint8 ribi_maske:4; @@ -113,6 +113,12 @@ image_id after_bild; /** + * overhead wire max speed + * @author T-Na + */ + uint overhead_wire_max_speed; + + /** * Initializes all member variables * @author Hj. Malthaner */ @@ -152,19 +158,19 @@ void calc_bild(); /** - * Setzt die erlaubte Hchstgeschwindigkeit + * Setzt die erlaubte H昼hstgeschwindigkeit * @author Hj. Malthaner */ void set_max_speed(sint32 s) { max_speed = s; } /** - * Ermittelt die erlaubte Hchstgeschwindigkeit + * Ermittelt die erlaubte H昼hstgeschwindigkeit * @author Hj. Malthaner */ sint32 get_max_speed() const { return max_speed; } /** - * Setzt neue Beschreibung. Ersetzt alte Hchstgeschwindigkeit + * Setzt neue Beschreibung. Ersetzt alte H昼hstgeschwindigkeit * mit wert aus Beschreibung. * @author Hj. Malthaner */ @@ -180,7 +186,7 @@ virtual void rdwr(loadsave_t *file); /** - * Info-text fr diesen Weg + * Info-text f繝サ diesen Weg * @author Hj. Malthaner */ virtual void info(cbuffer_t & buf) const; @@ -192,13 +198,13 @@ virtual const char *ist_entfernbar(const spieler_t *sp); /** - * Wegtyp zurckliefern + * Wegtyp zur繝サkliefern */ virtual waytype_t get_waytype() const = 0; /** * 'Jedes Ding braucht einen Typ.' - * @return Gibt den typ des Objekts zurck. + * @return Gibt den typ des Objekts zur繝サk. * @author Hj. Malthaner */ typ get_typ() const { return ding_t::way; } @@ -210,11 +216,11 @@ const char *get_name() const { return besch->get_name(); } /** - * Setzt neue Richtungsbits fr einen Weg. + * Setzt neue Richtungsbits f繝サ einen Weg. * - * Nachdem die ribis ge舅dert werden, ist das weg_bild des - * zugehrigen Grundes falsch (Ein Aufruf von grund_t::calc_bild() - * zur Reparatur mu゚ folgen). + * Nachdem die ribis ge闊dert werden, ist das weg_bild des + * zugeh丁igen Grundes falsch (Ein Aufruf von grund_t::calc_bild() + * zur Reparatur muセ folgen). * @param ribi Richtungsbits */ void ribi_add(ribi_t::ribi ribi) { this->ribi |= (uint8)ribi;} @@ -222,36 +228,36 @@ /** * Entfernt Richtungsbits von einem Weg. * - * Nachdem die ribis ge舅dert werden, ist das weg_bild des - * zugehrigen Grundes falsch (Ein Aufruf von grund_t::calc_bild() - * zur Reparatur mu゚ folgen). + * Nachdem die ribis ge闊dert werden, ist das weg_bild des + * zugeh丁igen Grundes falsch (Ein Aufruf von grund_t::calc_bild() + * zur Reparatur muセ folgen). * @param ribi Richtungsbits */ void ribi_rem(ribi_t::ribi ribi) { this->ribi &= (uint8)~ribi;} /** - * Setzt Richtungsbits fr den Weg. + * Setzt Richtungsbits f繝サ den Weg. * - * Nachdem die ribis ge舅dert werden, ist das weg_bild des - * zugehrigen Grundes falsch (Ein Aufruf von grund_t::calc_bild() - * zur Reparatur mu゚ folgen). + * Nachdem die ribis ge闊dert werden, ist das weg_bild des + * zugeh丁igen Grundes falsch (Ein Aufruf von grund_t::calc_bild() + * zur Reparatur muセ folgen). * @param ribi Richtungsbits */ void set_ribi(ribi_t::ribi ribi) { this->ribi = (uint8)ribi;} /** - * Ermittelt die unmaskierten Richtungsbits fr den Weg. + * Ermittelt die unmaskierten Richtungsbits f繝サ den Weg. */ ribi_t::ribi get_ribi_unmasked() const { return (ribi_t::ribi)ribi; } /** - * Ermittelt die (maskierten) Richtungsbits fr den Weg. + * Ermittelt die (maskierten) Richtungsbits f繝サ den Weg. */ ribi_t::ribi get_ribi() const { return (ribi_t::ribi)(ribi & ~ribi_maske); } /** - * fr Signale ist es notwendig, bestimmte Richtungsbits auszumaskieren - * damit Fahrzeuge nicht "von hinten" ber Ampeln fahren knnen. + * f繝サ Signale ist es notwendig, bestimmte Richtungsbits auszumaskieren + * damit Fahrzeuge nicht "von hinten" 繝サer Ampeln fahren k猪nen. * @param ribi Richtungsbits */ void set_ribi_maske(ribi_t::ribi ribi) { ribi_maske = (uint8)ribi; } @@ -312,6 +318,24 @@ // correct maintainace void laden_abschliessen(); + + /** + * get overhead wire max speed + * @author T-Na + */ + uint get_overhead_wire_max_speed() const { + + return overhead_wire_max_speed; + } + + /** + * set overhead wire max speed + * @author T-Na + */ + void set_overhead_wire_max_speed( uint speed ) { + + overhead_wire_max_speed = speed; + } } GCC_PACKED; #endif Index: dataobj/dingliste.cc =================================================================== --- dataobj/dingliste.cc (リビジョン 6321) +++ dataobj/dingliste.cc (作業コピー) @@ -1027,6 +1027,28 @@ if(d) { add(d); } + + // 譫カ邱壹ョ譛鬮倬溷コヲ繧定サ碁%/驕楢キッ縺ォ險ュ螳壹☆繧 + // author:T-Na + if(d && typ==ding_t::wayobj) { + + for( int i = 0; i < top; ++i ) { + + ding_t* tmp = obj.some[ i ]; + ding_t::typ tmp_typ = tmp->get_typ(); + + if(tmp_typ==ding_t::way) { + + if(tmp->get_waytype()==d->get_waytype()) { + + const wayobj_t* wayobj = ding_cast(d); + weg_t* weg = ding_cast(tmp); + weg->set_overhead_wire_max_speed(wayobj->get_besch()->get_topspeed()); + break; + } //if + } //if + } //for + } //if } } else { Index: dings/wayobj.cc =================================================================== --- dings/wayobj.cc (リビジョン 6321) +++ dings/wayobj.cc (作業コピー) @@ -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 licence. * (see licence.txt) @@ -97,6 +97,7 @@ } } weg->set_max_speed(max_speed); + weg->set_overhead_wire_max_speed( 0 ); } else { dbg->warning("wayobj_t::~wayobj_t()","ground was not a way!"); @@ -204,13 +205,57 @@ // electrify a way if we are a catenary if(besch->get_own_wtyp()==overheadlines_wt) { const waytype_t wt = (besch->get_wtyp()==tram_wt) ? track_wt : besch->get_wtyp(); - weg_t *weg = welt->lookup(get_pos())->get_weg(wt); + + grund_t* gr = welt->lookup(get_pos()); + + weg_t *weg = gr->get_weg(wt); if(weg) { // Weg wieder freigeben, wenn das Signal nicht mehr da ist. weg->set_electrify(true); + +#if 0 if(weg->get_max_speed()>besch->get_topspeed()) { weg->set_max_speed(besch->get_topspeed()); } +#else + // 霆碁%/驕楢キッ縲∵ゥ九√ヨ繝ウ繝阪Ν縺ョ譛鬮倬溷コヲ繧貞叙蠕励☆繧 + // author:T-Na + sint32 top_speed = weg->get_besch()->get_topspeed(); + grund_t::typ ground_type = gr->get_typ(); + + if(ground_type==grund_t::brueckenboden) { + + //讖九ョ譛鬮倬溷コヲ繧貞叙蠕 + for(int i = 0, count = gr->get_top(); i < count; ++i ) + { + const ding_t* ding = gr->obj_bei(i); + if (const bruecke_t* const bredge = ding_cast(ding)) { + + top_speed = bredge->get_besch()->get_topspeed(); + break; + } //if + } //for + } + + else if(ground_type==grund_t::tunnelboden) { + + //繝医Φ繝阪Ν縺ョ譛鬮倬溷コヲ繧貞叙蠕 + for(int i = 0, count = gr->get_top(); i < count; ++i ) + { + const ding_t* ding = gr->obj_bei(i); + if (const tunnel_t* const tunnel = ding_cast(ding)) { + + top_speed = tunnel->get_besch()->get_topspeed(); + break; + } //if + } //for + } //if + + //霆碁%/驕楢キッ縺ィ譫カ邱壹ョ譛鬮倬溷コヲ繧定ィュ螳壹☆繧 + weg->set_max_speed(top_speed); + weg->set_overhead_wire_max_speed(besch->get_topspeed()); +#endif + } else { dbg->warning("wayobj_t::laden_abschliessen()","ground was not a way!"); Index: simconvoi.cc =================================================================== --- simconvoi.cc (リビジョン 6321) +++ 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() { @@ -3362,6 +3362,13 @@ return false; } + // 髮サ蛹冶サ贋ク。縺ェ繧画楔邱壹ョ蛻カ髯宣溷コヲ繧り諷ョ縺吶k + // author:T-Na + if(is_electric && kmh_to_speed(str->get_overhead_wire_max_speed()) < akt_speed) { + + return false; + } + int d = ribi_t::ist_gerade(str->get_ribi()) ? VEHICLE_STEPS_PER_TILE : vehikel_basis_t::get_diagonal_vehicle_steps_per_tile(); distance -= d; time_overtaking += d; Index: vehicle/simvehikel.cc =================================================================== --- vehicle/simvehikel.cc (リビジョン 6321) +++ vehicle/simvehikel.cc (作業コピー) @@ -1122,6 +1122,15 @@ const weg_t *weg = gr->get_weg(get_waytype()); if( weg ) { speed_limit = kmh_to_speed( weg->get_max_speed() ); + + // 髮サ蛹冶サ贋ク。縺ェ繧画楔邱壹ョ蛻カ髯宣溷コヲ繧り諷ョ縺吶k + // author:T-Na + if(weg->is_electrified() && besch->get_engine_type() == vehikel_besch_t::electric) { + + sint32 ow_speed_limit = kmh_to_speed(weg->get_overhead_wire_max_speed()); + speed_limit = min( speed_limit, ow_speed_limit ); + } //if + if( weg->is_crossing() ) { gr->find(2)->add_to_crossing(this); }