mirror of https://github.com/OpenTTD/OpenTTD
(svn r20529) -Codechange: simplify UpdateAirplanesOnNewStation by removing code for situations that don't happen
parent
afb60ec59c
commit
f9a55b7439
|
@ -1958,37 +1958,13 @@ void UpdateAirplanesOnNewStation(const Station *st)
|
||||||
{
|
{
|
||||||
/* only 1 station is updated per function call, so it is enough to get entry_point once */
|
/* only 1 station is updated per function call, so it is enough to get entry_point once */
|
||||||
const AirportFTAClass *ap = st->airport.GetFTA();
|
const AirportFTAClass *ap = st->airport.GetFTA();
|
||||||
|
Direction rotation = st->airport.tile == INVALID_TILE ? DIR_N : st->airport.rotation;
|
||||||
|
|
||||||
Aircraft *v;
|
Aircraft *v;
|
||||||
FOR_ALL_AIRCRAFT(v) {
|
FOR_ALL_AIRCRAFT(v) {
|
||||||
if (v->IsNormalAircraft()) {
|
if (!v->IsNormalAircraft() || v->targetairport != st->index) continue;
|
||||||
if (v->targetairport == st->index) { // if heading to this airport
|
assert(v->state == FLYING);
|
||||||
/* update position of airplane. If plane is not flying, landing, or taking off
|
v->pos = v->previous_pos = AircraftGetEntryPoint(v, ap, rotation);
|
||||||
* you cannot delete airport, so it doesn't matter */
|
UpdateAircraftCache(v);
|
||||||
if (v->state >= FLYING) { // circle around
|
|
||||||
Direction rotation = st->airport.tile == INVALID_TILE ? DIR_N : st->airport.rotation;
|
|
||||||
v->pos = v->previous_pos = AircraftGetEntryPoint(v, ap, rotation);
|
|
||||||
v->state = FLYING;
|
|
||||||
UpdateAircraftCache(v);
|
|
||||||
/* landing plane needs to be reset to flying height (only if in pause mode upgrade,
|
|
||||||
* in normal mode, plane is reset in AircraftController. It doesn't hurt for FLYING */
|
|
||||||
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
|
||||||
/* set new position x,y,z */
|
|
||||||
SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v));
|
|
||||||
} else {
|
|
||||||
assert(v->state == ENDTAKEOFF || v->state == HELITAKEOFF);
|
|
||||||
byte takeofftype = (v->subtype == AIR_HELICOPTER) ? HELITAKEOFF : ENDTAKEOFF;
|
|
||||||
/* search in airportdata for that heading
|
|
||||||
* easiest to do, since this doesn't happen a lot */
|
|
||||||
for (uint cnt = 0; cnt < ap->nofelements; cnt++) {
|
|
||||||
if (ap->layout[cnt].heading == takeofftype) {
|
|
||||||
v->pos = ap->layout[cnt].position;
|
|
||||||
UpdateAircraftCache(v);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2106,7 +2106,6 @@ void UpdateAirportsNoise()
|
||||||
*/
|
*/
|
||||||
CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
bool airport_upgrade = true;
|
|
||||||
StationID station_to_join = GB(p2, 16, 16);
|
StationID station_to_join = GB(p2, 16, 16);
|
||||||
bool reuse = (station_to_join != NEW_STATION);
|
bool reuse = (station_to_join != NEW_STATION);
|
||||||
if (!reuse) station_to_join = INVALID_STATION;
|
if (!reuse) station_to_join = INVALID_STATION;
|
||||||
|
@ -2188,8 +2187,6 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||||
return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT);
|
return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
airport_upgrade = false;
|
|
||||||
|
|
||||||
/* allocate and initialize new station */
|
/* allocate and initialize new station */
|
||||||
if (!Station::CanAllocateItem()) return_cmd_error(STR_ERROR_TOO_MANY_STATIONS_LOADING);
|
if (!Station::CanAllocateItem()) return_cmd_error(STR_ERROR_TOO_MANY_STATIONS_LOADING);
|
||||||
|
|
||||||
|
@ -2239,14 +2236,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||||
AirportTileAnimationTrigger(st, cur_tile, AAT_BUILT);
|
AirportTileAnimationTrigger(st, cur_tile, AAT_BUILT);
|
||||||
} while ((++it)->ti.x != -0x80);
|
} while ((++it)->ti.x != -0x80);
|
||||||
|
|
||||||
/* if airport was demolished while planes were en-route to it, the
|
UpdateAirplanesOnNewStation(st);
|
||||||
* positions can no longer be the same (v->u.air.pos), since different
|
|
||||||
* airports have different indexes. So update all planes en-route to this
|
|
||||||
* airport. Only update if
|
|
||||||
* 1. airport is upgraded
|
|
||||||
* 2. airport is added to existing station (unfortunately unavoideable)
|
|
||||||
*/
|
|
||||||
if (airport_upgrade) UpdateAirplanesOnNewStation(st);
|
|
||||||
|
|
||||||
st->UpdateVirtCoord();
|
st->UpdateVirtCoord();
|
||||||
UpdateStationAcceptance(st, false);
|
UpdateStationAcceptance(st, false);
|
||||||
|
|
Loading…
Reference in New Issue