diff --git a/simutrans/trunk/bauer/tunnelbauer.cc b/simutrans/trunk/bauer/tunnelbauer.cc index 2db524c91..1a5054048 100644 --- a/simutrans/trunk/bauer/tunnelbauer.cc +++ b/simutrans/trunk/bauer/tunnelbauer.cc @@ -482,7 +482,6 @@ DBG_MESSAGE("tunnel_builder_t::build()","build from (%d,%d,%d) to (%d,%d,%d) ", lt->set_desc(way_desc); tunnel->obj_add( lt ); lt->finish_rd(); - player_t::add_maintenance( player, -way_desc->get_maintenance(), powerline_wt ); } tunnel->obj_add(new tunnel_t(pos, player, desc)); tunnel->calc_image(); @@ -531,7 +530,6 @@ DBG_MESSAGE("tunnel_builder_t::build()","build from (%d,%d,%d) to (%d,%d,%d) ", lt->set_desc(way_desc); tunnel->obj_add( lt ); lt->finish_rd(); - player_t::add_maintenance( player, -way_desc->get_maintenance(), powerline_wt ); } tunnel->obj_add(new tunnel_t(pos, player, desc)); tunnel->calc_image(); @@ -589,12 +587,11 @@ void tunnel_builder_t::build_tunnel_portal(player_t *player, koord3d end, koord lt = new leitung_t(tunnel->get_pos(), player); lt->set_desc(way_desc); tunnel->obj_add( lt ); - player_t::add_maintenance( player, -way_desc->get_maintenance(), powerline_wt ); } else { // subtract twice maintenance: once for the already existing powerline // once since leitung_t::finish_rd will add it again - player_t::add_maintenance( player, -2*lt->get_desc()->get_maintenance(), powerline_wt ); + player_t::add_maintenance( player, -1*lt->get_desc()->get_maintenance(), powerline_wt ); } lt->finish_rd(); } diff --git a/simutrans/trunk/bauer/wegbauer.cc b/simutrans/trunk/bauer/wegbauer.cc index 1181fd235..c2218036c 100644 --- a/simutrans/trunk/bauer/wegbauer.cc +++ b/simutrans/trunk/bauer/wegbauer.cc @@ -2475,7 +2475,6 @@ bool way_builder_t::build_tunnel_tile() lt->set_desc( wb ); tunnel->obj_add( lt ); lt->finish_rd(); - player_t::add_maintenance( player_builder, -lt->get_desc()->get_maintenance(), powerline_wt); } tunnel->calc_image(); cost -= tunnel_desc->get_price(); @@ -2518,7 +2517,6 @@ bool way_builder_t::build_tunnel_tile() } else { lt->leitung_t::finish_rd(); // only change powerline aspect - player_t::add_maintenance( player_builder, -lt->get_desc()->get_maintenance(), powerline_wt); } } } diff --git a/simutrans/trunk/obj/leitung2.cc b/simutrans/trunk/obj/leitung2.cc index 656eb0f56..3997e691c 100644 --- a/simutrans/trunk/obj/leitung2.cc +++ b/simutrans/trunk/obj/leitung2.cc @@ -103,6 +103,7 @@ leitung_t::leitung_t(loadsave_t *file) : obj_t() image = IMG_EMPTY; set_net(NULL); ribi = ribi_t::none; + is_transformer = false; rdwr(file); } @@ -113,6 +114,7 @@ leitung_t::leitung_t(koord3d pos, player_t *player) : obj_t(pos) set_net(NULL); set_owner( player ); set_desc(way_builder_t::leitung_desc); + is_transformer = false; } @@ -154,9 +156,7 @@ leitung_t::~leitung_t() if(neighbours==0) { delete net; } - if(!gr->ist_tunnel()) { - player_t::add_maintenance(get_owner(), -desc->get_maintenance(), powerline_wt); - } + player_t::add_maintenance(get_owner(), -get_maintenance(), powerline_wt); } } @@ -358,7 +358,7 @@ void leitung_t::finish_rd() grund_t *gr = welt->lookup(get_pos()); assert(gr); (void)gr; - player_t::add_maintenance(get_owner(), desc->get_maintenance(), powerline_wt); + player_t::add_maintenance(get_owner(), get_maintenance(), powerline_wt); } void leitung_t::rdwr(loadsave_t *file) @@ -420,6 +420,17 @@ const char *leitung_t::is_deletable(const player_t *player) } +sint64 leitung_t::get_maintenance() const +{ + if (!is_transformer) { + return desc->get_maintenance(); + } + else { + return -welt->get_settings().cst_maintain_transformer; + } +} + + /************************************ from here on pump (source) stuff ********************************************/ slist_tpl pumpe_t::pumpe_list; @@ -443,6 +454,7 @@ pumpe_t::pumpe_t(loadsave_t *file ) : leitung_t( koord3d::invalid, NULL ) { fab = NULL; power_supply = 0; + is_transformer = true; rdwr( file ); } @@ -451,6 +463,7 @@ pumpe_t::pumpe_t(koord3d pos, player_t *player) : leitung_t(pos, player) { fab = NULL; power_supply = 0; + is_transformer = true; player_t::book_construction_costs(player, welt->get_settings().cst_transformer, get_pos().get_2d(), powerline_wt); } @@ -465,7 +478,6 @@ pumpe_t::~pumpe_t() net->sub_supply(power_supply); } pumpe_list.remove( this ); - player_t::add_maintenance(get_owner(), (sint32)welt->get_settings().cst_maintain_transformer, powerline_wt); } void pumpe_t::step(uint32 delta_t) @@ -541,7 +553,6 @@ void pumpe_t::rdwr(loadsave_t * file) { void pumpe_t::finish_rd() { leitung_t::finish_rd(); - player_t::add_maintenance(get_owner(), -(sint32)welt->get_settings().cst_maintain_transformer, powerline_wt); assert(get_net()); @@ -635,6 +646,7 @@ senke_t::senke_t(loadsave_t *file) : leitung_t( koord3d::invalid, NULL ) next_t = 0; power_demand = 0; energy_acc = 0; + is_transformer = true; rdwr( file ); @@ -649,6 +661,7 @@ senke_t::senke_t(koord3d pos, player_t *player) : leitung_t(pos, player) next_t = 0; power_demand = 0; energy_acc = 0; + is_transformer = true; player_t::book_construction_costs(player, welt->get_settings().cst_transformer, get_pos().get_2d(), powerline_wt); @@ -670,7 +683,6 @@ senke_t::~senke_t() net->sub_demand(power_demand); } senke_list.remove( this ); - player_t::add_maintenance(get_owner(), (sint32)welt->get_settings().cst_maintain_transformer, powerline_wt); } void senke_t::step(uint32 delta_t) @@ -822,7 +834,6 @@ void senke_t::rdwr(loadsave_t *file) void senke_t::finish_rd() { leitung_t::finish_rd(); - player_t::add_maintenance(get_owner(), -(sint32)welt->get_settings().cst_maintain_transformer, powerline_wt); assert(get_net()); diff --git a/simutrans/trunk/obj/leitung2.h b/simutrans/trunk/obj/leitung2.h index 514442066..03e23cceb 100644 --- a/simutrans/trunk/obj/leitung2.h +++ b/simutrans/trunk/obj/leitung2.h @@ -31,6 +31,8 @@ protected: // powerline over ways bool is_crossing:1; + bool is_transformer:1; + // direction of the next pylon ribi_t::ribi ribi:4; @@ -114,6 +116,11 @@ public: * @return NULL if OK, otherwise an error message */ const char *is_deletable(const player_t *player) OVERRIDE; + + /** + * @return maintenance of this object (powerline or transformer) + */ + sint64 get_maintenance() const; }; diff --git a/simutrans/trunk/obj/tunnel.cc b/simutrans/trunk/obj/tunnel.cc index 3ded99182..b86d795f7 100644 --- a/simutrans/trunk/obj/tunnel.cc +++ b/simutrans/trunk/obj/tunnel.cc @@ -178,10 +178,6 @@ void tunnel_t::finish_rd() weg->set_max_speed(desc->get_topspeed()); player_t::add_maintenance( player, -weg->get_desc()->get_maintenance(), weg->get_desc()->get_finance_waytype()); } - leitung_t *lt = gr->get_leitung(); - if(lt) { - player_t::add_maintenance( player, -lt->get_desc()->get_maintenance(), powerline_wt ); - } player_t::add_maintenance( player, desc->get_maintenance(), desc->get_finance_waytype() ); } }