diff options
author | yexo <yexo@openttd.org> | 2010-02-22 14:17:07 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2010-02-22 14:17:07 +0000 |
commit | 698737f485cfbdd1605faecd50395bb67f7dac75 (patch) | |
tree | b79303520896365e70a9aa3224a5f1c6a14b5aba /src/station_cmd.cpp | |
parent | 7ca4c31cf558ff29b3cbe14cd348bcf649445dfc (diff) | |
download | openttd-698737f485cfbdd1605faecd50395bb67f7dac75.tar.xz |
(svn r19198) -Codechange: store the size of stations in savegames
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r-- | src/station_cmd.cpp | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index e0f23202a..d3e033ccf 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -383,9 +383,7 @@ void Station::GetTileArea(TileArea *ta, StationType type) const return; case STATION_AIRPORT: - ta->tile = this->airport_tile; - ta->w = this->GetAirportSpec()->size_x; - ta->h = this->GetAirportSpec()->size_y; + *ta = this->airport; return; case STATION_TRUCK: @@ -1848,7 +1846,7 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui * Computes the minimal distance from town's xy to any airport's tile. * @param as airport's description * @param town_tile town's tile (t->xy) - * @param airport_tile st->airport_tile + * @param airport_tile st->airport.tile * @return minimal manhattan distance from town_tile to any airport's tile */ static uint GetMinimalAirportDistanceToTile(const AirportSpec *as, TileIndex town_tile, TileIndex airport_tile) @@ -1906,7 +1904,7 @@ uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIndex town_tile, Ti * Finds the town nearest to given airport. Based on minimal manhattan distance to any airport's tile. * If two towns have the same distance, town with lower index is returned. * @param as airport's description - * @param airport_tile st->airport_tile + * @param airport_tile st->airport.tile * @return nearest town to airport */ Town *AirportGetNearestTown(const AirportSpec *as, TileIndex airport_tile) @@ -1937,10 +1935,10 @@ void UpdateAirportsNoise() FOR_ALL_TOWNS(t) t->noise_reached = 0; FOR_ALL_STATIONS(st) { - if (st->airport_tile != INVALID_TILE) { + if (st->airport.tile != INVALID_TILE) { const AirportSpec *as = st->GetAirportSpec(); - Town *nearest = AirportGetNearestTown(as, st->airport_tile); - nearest->noise_reached += GetAirportNoiseLevelForTown(as, nearest->xy, st->airport_tile); + Town *nearest = AirportGetNearestTown(as, st->airport.tile); + nearest->noise_reached += GetAirportNoiseLevelForTown(as, nearest->xy, st->airport.tile); } } } @@ -2032,7 +2030,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (!st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TEST)) return CMD_ERROR; - if (st->airport_tile != INVALID_TILE) { + if (st->airport.tile != INVALID_TILE) { return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT); } } else { @@ -2059,7 +2057,6 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* Always add the noise, so there will be no need to recalculate when option toggles */ nearest->noise_reached += newnoise_level; - st->airport_tile = tile; st->AddFacility(FACIL_AIRPORT, tile); st->airport_type = (byte)p1; st->airport_flags = 0; @@ -2079,6 +2076,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint do { TileIndex cur_tile = tile + ToTileIndexDiff(it->ti); MakeAirport(cur_tile, st->owner, st->index, it->gfx); + st->airport.Add(cur_tile); if (AirportTileSpec::Get(GetTranslatedAirportTileID(it->gfx))->animation_info != 0xFFFF) AddAnimatedTile(cur_tile); } while ((++it)->ti.x != -0x80); @@ -2119,7 +2117,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) return CMD_ERROR; } - tile = st->airport_tile; + tile = st->airport.tile; const AirportSpec *as = st->GetAirportSpec(); int w = as->size_x; @@ -2133,11 +2131,11 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) if (a->targetairport == st->index && a->state != FLYING) return CMD_ERROR; } - TILE_LOOP(tile_cur, w, h, tile) { - if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR; - + TILE_AREA_LOOP(tile_cur, st->airport) { if (!st->TileBelongsToAirport(tile_cur)) continue; + if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR; + cost.AddCost(_price[PR_CLEAR_STATION_AIRPORT]); if (flags & DC_EXEC) { @@ -2161,7 +2159,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) st->rect.AfterRemoveRect(st, tile, w, h); - st->airport_tile = INVALID_TILE; + st->airport.Clear(); st->facilities &= ~FACIL_AIRPORT; SetWindowWidgetDirty(WC_STATION_VIEW, st->index, SVW_PLANES); @@ -3206,7 +3204,7 @@ void BuildOilRig(TileIndex tile) st->owner = OWNER_NONE; st->airport_type = AT_OILRIG; - st->airport_tile = tile; + st->airport.Add(tile); st->dock_tile = tile; st->facilities = FACIL_AIRPORT | FACIL_DOCK; st->build_date = _date; @@ -3234,7 +3232,7 @@ void DeleteOilRig(TileIndex tile) MarkTileDirtyByTile(tile); st->dock_tile = INVALID_TILE; - st->airport_tile = INVALID_TILE; + st->airport.Clear(); st->facilities &= ~(FACIL_AIRPORT | FACIL_DOCK); st->airport_flags = 0; |