Skip to content

Commit

Permalink
ADD: New building type 'dock' which is similar to harbour but starts …
Browse files Browse the repository at this point in the history
…on flat ground tiles (needs more testing)

git-svn-id: svn://tron.homeunix.org/simutrans/simutrans/trunk@7519 8aca7d54-2c30-db11-9de9-000461428c89
  • Loading branch information
prissi committed Feb 3, 2015
1 parent 113ee15 commit 9ab7a4e
Show file tree
Hide file tree
Showing 12 changed files with 304 additions and 25 deletions.
15 changes: 9 additions & 6 deletions bauer/hausbauer.cc
Expand Up @@ -170,7 +170,8 @@ bool hausbauer_t::alles_geladen()
case haus_besch_t::fabrik:
break;

case haus_besch_t::hafen:
case haus_besch_t::dock:
case haus_besch_t::flat_dock:
case haus_besch_t::hafen_geb:
case haus_besch_t::depot:
case haus_besch_t::generic_stop:
Expand Down Expand Up @@ -258,7 +259,8 @@ void hausbauer_t::fill_menu(tool_selector_t* tool_selector, haus_besch_t::utyp u
case haus_besch_t::depot:
toolnr = TOOL_BUILD_DEPOT | GENERAL_TOOL;
break;
case haus_besch_t::hafen:
case haus_besch_t::dock:
case haus_besch_t::flat_dock:
case haus_besch_t::generic_stop:
case haus_besch_t::generic_extension:
toolnr = TOOL_BUILD_STATION | GENERAL_TOOL;
Expand Down Expand Up @@ -463,7 +465,7 @@ gebaeude_t* hausbauer_t::baue(player_t* player_, koord3d pos, int org_layout, co

// skip empty tiles
if (tile == NULL || (
besch->get_utyp() != haus_besch_t::hafen &&
!(besch->get_utyp() == haus_besch_t::dock || besch->get_utyp() == haus_besch_t::flat_dock) &&
tile->get_hintergrund(0, 0, 0) == IMG_LEER &&
tile->get_vordergrund(0, 0) == IMG_LEER
)) {
Expand All @@ -489,7 +491,7 @@ gebaeude_t* hausbauer_t::baue(player_t* player_, koord3d pos, int org_layout, co
if(gr->ist_wasser()) {
gr->obj_add(gb);
}
else if (besch->get_utyp() == haus_besch_t::hafen) {
else if( besch->get_utyp() == haus_besch_t::dock || besch->get_utyp() == haus_besch_t::flat_dock ) {
// it's a dock!
gr->obj_add(gb);
}
Expand Down Expand Up @@ -528,7 +530,7 @@ gebaeude_t* hausbauer_t::baue(player_t* player_, koord3d pos, int org_layout, co
if(station_building.is_contained(besch)) {
(*static_cast<halthandle_t *>(param))->add_grund(gr);
}
if (besch->get_utyp() == haus_besch_t::hafen) {
if( besch->get_utyp() == haus_besch_t::dock || besch->get_utyp() == haus_besch_t::flat_dock ) {
// its a dock!
gb->set_yoff(0);
}
Expand Down Expand Up @@ -921,7 +923,8 @@ const vector_tpl<const haus_besch_t*>* hausbauer_t::get_list(const haus_besch_t:
case haus_besch_t::firmensitz: return &headquarter;
case haus_besch_t::rathaus: return &rathaeuser;
case haus_besch_t::attraction_city: return &sehenswuerdigkeiten_city;
case haus_besch_t::hafen:
case haus_besch_t::dock:
case haus_besch_t::flat_dock:
case haus_besch_t::hafen_geb:
case haus_besch_t::depot:
case haus_besch_t::generic_stop:
Expand Down
8 changes: 6 additions & 2 deletions besch/haus_besch.cc
Expand Up @@ -50,7 +50,8 @@ waytype_t haus_besch_t::get_finance_waytype() const
{
case haus_besch_t::bahnhof: return track_wt;
case haus_besch_t::bushalt: return road_wt;
case haus_besch_t::hafen: return water_wt;
case haus_besch_t::dock: return water_wt;
case haus_besch_t::flat_dock: return water_wt;
case haus_besch_t::binnenhafen: return water_wt;
case haus_besch_t::airport: return air_wt;
case haus_besch_t::monorailstop: return monorail_wt;
Expand Down Expand Up @@ -208,7 +209,10 @@ sint32 haus_besch_t::get_price(karte_t *welt) const
if( price == COST_MAGIC ) {
settings_t const& s = welt->get_settings();
switch (get_utyp()) {
case haus_besch_t::hafen:
case haus_besch_t::dock:
return -s.cst_multiply_dock * get_level();
break;
case haus_besch_t::flat_dock:
return -s.cst_multiply_dock * get_level();
break;
case haus_besch_t::generic_extension:
Expand Down
4 changes: 3 additions & 1 deletion besch/haus_besch.h
Expand Up @@ -139,7 +139,7 @@ class haus_besch_t : public obj_besch_timelined_t {
bahnhof = 8,
bushalt = 9,
ladebucht = 10,
hafen = 11,// this is still current, as it is can be larger than 1x1
dock = 11,// this is still current, as it is can be larger than 1x1
binnenhafen = 12,
airport = 13,
monorailstop = 14,
Expand All @@ -157,6 +157,8 @@ class haus_besch_t : public obj_besch_timelined_t {
depot = 33,
generic_stop = 34,
generic_extension = 35,
// there are more types of docks
flat_dock = 36, // dock, but can start on a flat coast line
last_haus_typ,
unbekannt_flag = 128,
};
Expand Down
4 changes: 2 additions & 2 deletions besch/reader/building_reader.cc
Expand Up @@ -94,7 +94,7 @@ void building_reader_t::register_obj(obj_besch_t *&data)
besch->enables = 1|4;
}
else if( strcmp("ShipStop",besch->get_name()+checkpos-8)==0 ) {
besch->utype = haus_besch_t::hafen;
besch->utype = haus_besch_t::dock;
besch->extra_data = water_wt;
besch->enables = 1|4;
}
Expand Down Expand Up @@ -147,7 +147,7 @@ void building_reader_t::register_obj(obj_besch_t *&data)
// compability stuff
static uint16 old_to_new_waytype[16] = { track_wt, road_wt, road_wt, water_wt, water_wt, air_wt, monorail_wt, 0, track_wt, road_wt, road_wt, 0 , water_wt, air_wt, monorail_wt, 0 };
besch->extra_data = besch->utype<=haus_besch_t::monorail_geb ? old_to_new_waytype[besch->utype-haus_besch_t::bahnhof] : 0;
if( besch->utype!=haus_besch_t::hafen ) {
if( besch->utype!=haus_besch_t::dock ) {
besch->utype = besch->utype<haus_besch_t::bahnhof_geb ? haus_besch_t::generic_stop : haus_besch_t::generic_extension;
}
}
Expand Down
8 changes: 7 additions & 1 deletion besch/writer/building_writer.cc
Expand Up @@ -151,7 +151,13 @@ void building_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& ob
utype = haus_besch_t::firmensitz;
}
else if (!STRICMP(type_name, "habour") || !STRICMP(type_name, "harbour")) {
utype = haus_besch_t::hafen;
// buildable only on sloped shores
utype = haus_besch_t::dock;
extra_data = water_wt;
}
else if (!STRICMP(type_name, "dock")) {
// buildable only on flat shores
utype = haus_besch_t::flat_harbour;
extra_data = water_wt;
}
else if (!STRICMP(type_name, "fac")) {
Expand Down
2 changes: 1 addition & 1 deletion obj/gebaeude.cc
Expand Up @@ -174,7 +174,7 @@ void gebaeude_t::rotate90()
uint32 old_insta_zeit = insta_zeit;
set_tile( new_tile, false );
insta_zeit = old_insta_zeit;
if( haus_besch->get_utyp() != haus_besch_t::hafen && !tile->has_image() ) {
if( haus_besch->get_utyp() != haus_besch_t::dock && !tile->has_image() ) {
// may have a rotation, that is not recoverable
if( !is_factory && new_offset!=koord(0,0) ) {
welt->set_nosave_warning();
Expand Down
2 changes: 1 addition & 1 deletion player/ai_goods.cc
Expand Up @@ -385,7 +385,7 @@ bool ai_goods_t::create_ship_transport_vehikel(fabrik_t *qfab, int anz_vehikel)
gr->obj_loesche_alle(this);
}
// try to built dock
const haus_besch_t* h = hausbauer_t::get_random_station(haus_besch_t::hafen, water_wt, welt->get_timeline_year_month(), haltestelle_t::WARE);
const haus_besch_t* h = hausbauer_t::get_random_station(haus_besch_t::dock, water_wt, welt->get_timeline_year_month(), haltestelle_t::WARE);
if(h==NULL || !call_general_tool(TOOL_BUILD_STATION, platz1, h->get_name())) {
return false;
}
Expand Down
4 changes: 2 additions & 2 deletions player/ai_passenger.cc
Expand Up @@ -333,7 +333,7 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
free(name);
}
// finally built the dock
const haus_besch_t* dock_besch = hausbauer_t::get_random_station(haus_besch_t::hafen, water_wt, welt->get_timeline_year_month(), 0);
const haus_besch_t* dock_besch = hausbauer_t::get_random_station(haus_besch_t::dock, water_wt, welt->get_timeline_year_month(), 0);
welt->lookup_kartenboden(start_harbour)->obj_loesche_alle(this);
call_general_tool( TOOL_BUILD_STATION, start_harbour, dock_besch->get_name() );
grund_t *harbour_gr = welt->lookup_kartenboden(start_harbour);
Expand Down Expand Up @@ -366,7 +366,7 @@ bool ai_passenger_t::create_water_transport_vehikel(const stadt_t* start_stadt,
free(name);
}
// finally built the dock
const haus_besch_t* dock_besch = hausbauer_t::get_random_station(haus_besch_t::hafen, water_wt, welt->get_timeline_year_month(), 0 );
const haus_besch_t* dock_besch = hausbauer_t::get_random_station(haus_besch_t::dock, water_wt, welt->get_timeline_year_month(), 0 );
welt->lookup_kartenboden(end_harbour)->obj_loesche_alle(this);
call_general_tool( TOOL_BUILD_STATION, end_harbour, dock_besch->get_name() );
grund_t *harbour_gr = welt->lookup_kartenboden(end_harbour);
Expand Down
4 changes: 3 additions & 1 deletion script/api/api_obj_desc.cc
Expand Up @@ -250,7 +250,9 @@ void export_goods_desc(HSQUIRRELVM vm)
/// company headquarter
enum_slot(vm, "headquarter", (uint8)haus_besch_t::firmensitz, true);
/// harbour
enum_slot(vm, "harbour", (uint8)haus_besch_t::hafen, true);
enum_slot(vm, "harbour", (uint8)haus_besch_t::dock, true);
/// harbour without a slope (buildable on flat ground beaches)
enum_slot(vm, "flat_harbour", (uint8)haus_besch_t::flat_dock, true);
/// depot
enum_slot(vm, "depot", (uint8)haus_besch_t::depot, true);
/// station
Expand Down
3 changes: 2 additions & 1 deletion simhalt.cc
Expand Up @@ -2424,7 +2424,8 @@ void haltestelle_t::add_to_station_type( grund_t *gr )
// there is only one loading bay ...
switch (besch->get_utyp()) {
case haus_besch_t::ladebucht: station_type |= loadingbay; break;
case haus_besch_t::hafen:
case haus_besch_t::dock:
case haus_besch_t::flat_dock:
case haus_besch_t::binnenhafen: station_type |= dock; break;
case haus_besch_t::bushalt: station_type |= busstop; break;
case haus_besch_t::airport: station_type |= airstop; break;
Expand Down

0 comments on commit 9ab7a4e

Please sign in to comment.