diff options
-rw-r--r-- | src/station.cpp | 15 | ||||
-rw-r--r-- | src/station.h | 1 | ||||
-rw-r--r-- | src/station_cmd.cpp | 24 |
3 files changed, 19 insertions, 21 deletions
diff --git a/src/station.cpp b/src/station.cpp index b718a0aac..80b039d78 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -50,7 +50,7 @@ Station::Station(TileIndex tile) last_vehicle_type = VEH_Invalid; - random_bits = Random(); + random_bits = 0; // Random() must be called when station is really built (DC_EXEC) waiting_triggers = 0; } @@ -105,6 +105,19 @@ void Station::operator delete(void *p, int st_idx) { } +/** Called when new facility is built on the station. If it is the first facility + * it initializes also 'xy' and 'random_bits' members */ +void Station::AddFacility(byte new_facility_bit, TileIndex facil_xy) +{ + if (facilities == 0) { + xy = facil_xy; + random_bits = Random(); + } + facilities |= new_facility_bit; + owner = _current_player; + build_date = _date; +} + void Station::MarkDirty() const { if (sign.width_1 != 0) { diff --git a/src/station.h b/src/station.h index 7299b87f7..b4365d2ba 100644 --- a/src/station.h +++ b/src/station.h @@ -159,6 +159,7 @@ struct Station { void* operator new (size_t size, int st_idx); void operator delete(void *p, int st_idx); + void AddFacility(byte new_facility_bit, TileIndex facil_xy); void MarkDirty() const; void MarkTilesDirty() const; bool TileBelongsToRailStation(TileIndex tile) const; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index b66d64b05..b73211dd7 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1000,15 +1000,11 @@ int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint3 if (CmdFailed(ret)) return ret; st->train_tile = finalvalues[0]; - if (!st->facilities) st->xy = finalvalues[0]; - st->facilities |= FACIL_TRAIN; - st->owner = _current_player; + st->AddFacility(FACIL_TRAIN, finalvalues[0]); st->trainst_w = finalvalues[1]; st->trainst_h = finalvalues[2]; - st->build_date = _date; - st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TRY); tile_delta = (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); @@ -1415,11 +1411,7 @@ int32 CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) //initialize an empty station road_stop->prev = prev; - if (!st->facilities) st->xy = tile; - st->facilities |= (type) ? FACIL_TRUCK_STOP : FACIL_BUS_STOP; - st->owner = _current_player; - - st->build_date = _date; + st->AddFacility((type) ? FACIL_TRUCK_STOP : FACIL_BUS_STOP, tile); st->rect.BeforeAddTile(tile, StationRect::ADD_TRY); @@ -1674,15 +1666,11 @@ int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) cost += _price.build_airport * w * h; if (flags & DC_EXEC) { - st->owner = _current_player; st->airport_tile = tile; - if (!st->facilities) st->xy = tile; - st->facilities |= FACIL_AIRPORT; + st->AddFacility(FACIL_AIRPORT, tile); st->airport_type = (byte)p1; st->airport_flags = 0; - st->build_date = _date; - st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY); /* if airport was demolished while planes were en-route to it, the @@ -1953,11 +1941,7 @@ int32 CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (flags & DC_EXEC) { st->dock_tile = tile; - if (!st->facilities) st->xy = tile; - st->facilities |= FACIL_DOCK; - st->owner = _current_player; - - st->build_date = _date; + st->AddFacility(FACIL_DOCK, tile); st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TRY); |