mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 10:30:28 +00:00
(svn r23414) -Add: Company infrastructure counts for stations/airports.
This commit is contained in:
parent
c06bbb4863
commit
f98312eb77
@ -18,6 +18,7 @@
|
||||
#include "../station_map.h"
|
||||
#include "../tunnelbridge_map.h"
|
||||
#include "../tunnelbridge.h"
|
||||
#include "../station_base.h"
|
||||
|
||||
#include "saveload.h"
|
||||
|
||||
@ -98,6 +99,14 @@ void AfterLoadCompanyStats()
|
||||
Company *c;
|
||||
FOR_ALL_COMPANIES(c) MemSetT(&c->infrastructure, 0);
|
||||
|
||||
/* Collect airport count. */
|
||||
Station *st;
|
||||
FOR_ALL_STATIONS(st) {
|
||||
if ((st->facilities & FACIL_AIRPORT) && Company::IsValidID(st->owner)) {
|
||||
Company::Get(st->owner)->infrastructure.airport++;
|
||||
}
|
||||
}
|
||||
|
||||
for (TileIndex tile = 0; tile < MapSize(); tile++) {
|
||||
switch (GetTileType(tile)) {
|
||||
case MP_RAILWAY:
|
||||
@ -133,6 +142,7 @@ void AfterLoadCompanyStats()
|
||||
|
||||
case MP_STATION:
|
||||
c = Company::GetIfValid(GetTileOwner(tile));
|
||||
if (c != NULL && GetStationType(tile) != STATION_AIRPORT) c->infrastructure.station++;
|
||||
|
||||
switch (GetStationType(tile)) {
|
||||
case STATION_RAIL:
|
||||
|
@ -1238,7 +1238,10 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32
|
||||
}
|
||||
|
||||
/* Railtype can change when overbuilding. */
|
||||
if (IsRailStationTile(tile) && !IsStationTileBlocked(tile)) c->infrastructure.rail[GetRailType(tile)]--;
|
||||
if (IsRailStationTile(tile)) {
|
||||
if (!IsStationTileBlocked(tile)) c->infrastructure.rail[GetRailType(tile)]--;
|
||||
c->infrastructure.station--;
|
||||
}
|
||||
|
||||
/* Remove animation if overbuilding */
|
||||
DeleteAnimatedTile(tile);
|
||||
@ -1252,6 +1255,7 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32
|
||||
SetAnimationFrame(tile, 0);
|
||||
|
||||
if (!IsStationTileBlocked(tile)) c->infrastructure.rail[rt]++;
|
||||
c->infrastructure.station++;
|
||||
|
||||
if (statspec != NULL) {
|
||||
/* Use a fixed axis for GetPlatformInfo as our platforms / numtracks are always the right way around */
|
||||
@ -1422,6 +1426,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, SmallVector<T *, 4> &affected
|
||||
DoClearSquare(tile);
|
||||
DeleteNewGRFInspectWindow(GSF_STATIONS, tile);
|
||||
if (build_rail) MakeRailNormal(tile, owner, TrackToTrackBits(track), rt);
|
||||
Company::Get(owner)->infrastructure.station--;
|
||||
DirtyCompanyInfrastructureWindows(owner);
|
||||
|
||||
st->rect.AfterRemoveTile(st, tile);
|
||||
@ -1565,6 +1570,7 @@ CommandCost RemoveRailStation(T *st, DoCommandFlag flags)
|
||||
if (v != NULL) FreeTrainTrackReservation(v);
|
||||
}
|
||||
if (!IsStationTileBlocked(tile)) Company::Get(owner)->infrastructure.rail[GetRailType(tile)]--;
|
||||
Company::Get(owner)->infrastructure.station--;
|
||||
DoClearSquare(tile);
|
||||
DeleteNewGRFInspectWindow(GSF_STATIONS, tile);
|
||||
AddTrackToSignalBuffer(tile, track, owner);
|
||||
@ -1807,9 +1813,10 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
} else {
|
||||
/* Non-drive-through stop never overbuild and always count as two road bits. */
|
||||
Company::Get(st->owner)->infrastructure.road[FIND_FIRST_BIT(rts)] += 2;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
MakeRoadStop(cur_tile, st->owner, st->index, rs_type, rts, ddir);
|
||||
}
|
||||
Company::Get(st->owner)->infrastructure.station++;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
|
||||
MarkTileDirtyByTile(cur_tile);
|
||||
}
|
||||
@ -1906,6 +1913,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags)
|
||||
DirtyCompanyInfrastructureWindows(c->index);
|
||||
}
|
||||
}
|
||||
Company::Get(st->owner)->infrastructure.station--;
|
||||
|
||||
if (IsDriveThroughStopTile(tile)) {
|
||||
/* Clears the tile for us */
|
||||
@ -2258,6 +2266,9 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||
|
||||
UpdateAirplanesOnNewStation(st);
|
||||
|
||||
Company::Get(st->owner)->infrastructure.airport++;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
|
||||
st->UpdateVirtCoord();
|
||||
UpdateStationAcceptance(st, false);
|
||||
st->RecomputeIndustriesNear();
|
||||
@ -2342,6 +2353,9 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
|
||||
SetWindowDirty(WC_TOWN_VIEW, st->town->index);
|
||||
}
|
||||
|
||||
Company::Get(st->owner)->infrastructure.airport--;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
|
||||
st->UpdateVirtCoord();
|
||||
st->RecomputeIndustriesNear();
|
||||
DeleteStationIfEmpty(st);
|
||||
@ -2486,8 +2500,9 @@ CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
* This is needed as we've unconditionally cleared that tile before. */
|
||||
if (wc == WATER_CLASS_CANAL) {
|
||||
Company::Get(st->owner)->infrastructure.water++;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
}
|
||||
Company::Get(st->owner)->infrastructure.station += 2;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
|
||||
MakeDock(tile, st->owner, st->index, direction, wc);
|
||||
|
||||
@ -2532,6 +2547,9 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags)
|
||||
st->dock_tile = INVALID_TILE;
|
||||
st->facilities &= ~FACIL_DOCK;
|
||||
|
||||
Company::Get(st->owner)->infrastructure.station -= 2;
|
||||
DirtyCompanyInfrastructureWindows(st->owner);
|
||||
|
||||
SetWindowWidgetDirty(WC_STATION_VIEW, st->index, SVW_SHIPS);
|
||||
st->UpdateVirtCoord();
|
||||
st->RecomputeIndustriesNear();
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "newgrf_station.h"
|
||||
#include "company_base.h"
|
||||
#include "water.h"
|
||||
#include "company_gui.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
@ -252,9 +253,11 @@ CommandCost CmdBuildRailWaypoint(TileIndex start_tile, DoCommandFlag flags, uint
|
||||
}
|
||||
byte map_spec_index = AllocateSpecToStation(spec, wp, true);
|
||||
|
||||
Company *c = Company::Get(wp->owner);
|
||||
for (int i = 0; i < count; i++) {
|
||||
TileIndex tile = start_tile + i * offset;
|
||||
byte old_specindex = HasStationTileRail(tile) ? GetCustomStationSpecIndex(tile) : 0;
|
||||
if (!HasStationTileRail(tile)) c->infrastructure.station++;
|
||||
bool reserved = IsTileType(tile, MP_RAILWAY) ?
|
||||
HasBit(GetRailReservationTrackBits(tile), AxisToTrack(axis)) :
|
||||
HasStationReservation(tile);
|
||||
@ -266,6 +269,7 @@ CommandCost CmdBuildRailWaypoint(TileIndex start_tile, DoCommandFlag flags, uint
|
||||
DeallocateSpecFromStation(wp, old_specindex);
|
||||
YapfNotifyTrackLayoutChange(tile, AxisToTrack(axis));
|
||||
}
|
||||
DirtyCompanyInfrastructureWindows(wp->owner);
|
||||
}
|
||||
|
||||
return CommandCost(EXPENSES_CONSTRUCTION, count * _price[PR_BUILD_WAYPOINT_RAIL]);
|
||||
|
Loading…
Reference in New Issue
Block a user