summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/station.cpp15
-rw-r--r--src/station.h1
-rw-r--r--src/station_cmd.cpp24
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);