diff --git a/simhalt.cc b/simhalt.cc index 9c77b4fd3..8323cbfc9 100644 --- a/simhalt.cc +++ b/simhalt.cc @@ -265,21 +265,24 @@ koord haltestelle_t::get_next_pos( koord start ) const * It is the avarage of all tiles' coordinate weighed by level of the building */ void haltestelle_t::recalc_basis_pos() { - koord cent; - sint32 level_sum; - cent = koord(); + sint64 cent_x, cent_y; + cent_x = cent_y = 0; + uint64 level_sum; level_sum = 0; FOR(slist_tpl, const& i, tiles) { if( gebaeude_t* const gb = i.grund->find() ) { - sint16 lv; + uint32 lv; lv = gb->get_tile()->get_desc()->get_level() + 1; - cent += gb->get_pos().get_2d() * lv; + cent_x += gb->get_pos().get_2d().x * lv; + cent_y += gb->get_pos().get_2d().y * lv; level_sum += lv; } } + koord cent; + cent = koord((sint16)(cent_x/level_sum),(sint16)(cent_y/level_sum)); if ( level_sum > 0 ) { - grund_t *new_center = get_ground_closest_to( cent/level_sum ); + grund_t *new_center = get_ground_closest_to( cent ); if( new_center != tiles.front().grund && new_center->get_text()==NULL ) { // move the name to new center, if there is not yet a name on it new_center->set_text( tiles.front().grund->get_text() );