src/aircraft_cmd.cpp
branchNewGRF_ports
changeset 6766 99de9dc45509
parent 6748 3c0e931d747c
child 6780 6483de08de63
equal deleted inserted replaced
6765:7e910c6a11a0 6766:99de9dc45509
  1229 		v->tile = gp.new_tile;
  1229 		v->tile = gp.new_tile;
  1230 		/* If vehicle is in the air, use tile coordinate 0. */
  1230 		/* If vehicle is in the air, use tile coordinate 0. */
  1231 		 if (amd.flag & (AMED_TAKEOFF | AMED_SLOWTURN | AMED_LAND)) v->tile = 0;
  1231 		 if (amd.flag & (AMED_TAKEOFF | AMED_SLOWTURN | AMED_LAND)) v->tile = 0;
  1232 
  1232 
  1233 		/* Adjust Z for land or takeoff? */
  1233 		/* Adjust Z for land or takeoff? */
  1234 		uint z = v->z_pos;
  1234 		int z = v->z_pos;
  1235 
  1235 
  1236 		if (((v->z_pos - GetTileZ(st->airport_tile))-1 ) < amd.z) { //taking off, so increase altitude
  1236 		if ((int)v->z_pos < (amd.z + TilePixelHeight(st->airport_tile))) { //target position is higher, so increase altitude
  1237 			z = min(z + 2, GetAircraftFlyingAltitude(v));
  1237 			z = min(z + 2, (v->u.air.state == ENDTAKEOFF)? GetAircraftFlyingAltitude(v) : amd.z + TilePixelHeight(st->airport_tile) );
  1238 		}
  1238 		}
  1239 
  1239 
  1240 		if ((amd.flag & AMED_HOLD) && (z > 150)) z--;
  1240 		if ((amd.flag & AMED_HOLD) && (z > 150)) z--;
  1241 
  1241 
  1242 		if (amd.z < ((v->z_pos - GetTileZ(st->airport_tile))-1 ) ) { //landing, so decrease altitude
  1242 		if ((amd.z + TilePixelHeight(st->airport_tile)) < (int)v->z_pos) { //target position is lower, so decrease altitude
  1243 			if (st->airport_tile == 0) {
  1243 			if (st->airport_tile == 0) {
  1244 				/* Airport has been removed, abort the landing procedure */
  1244 				/* Airport has been removed, abort the landing procedure */
  1245 				v->u.air.state = FLYING;
  1245 				v->u.air.state = FLYING;
  1246 				UpdateAircraftCache(v);
  1246 				UpdateAircraftCache(v);
  1247 				AircraftNextAirportPos_and_Order(v);
  1247 				AircraftNextAirportPos_and_Order(v);
  1248 				/* get aircraft back on running altitude */
  1248 				/* get aircraft back on running altitude */
  1249 				SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v));
  1249 				SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v));
  1250 				continue;
  1250 				continue;
  1251 			}
  1251 			}
  1252 
  1252 
  1253 			uint curz = GetSlopeZ(x, y) + 1;
  1253 			int curz = amd.z + TilePixelHeight(st->airport_tile) + 1;
  1254 
  1254 
  1255 			if (curz > z) {
  1255 			if (curz > z) {
  1256 				z++;
  1256 				z++;
  1257 			} else {
  1257 			} else {
  1258 				int t = max(1U, dist - 4);
  1258 				int t = max(1U, dist - 4);
  1262 			}
  1262 			}
  1263 		}
  1263 		}
  1264 
  1264 
  1265 		/* We've landed. Decrase speed when we're reaching end of runway. */
  1265 		/* We've landed. Decrase speed when we're reaching end of runway. */
  1266 		if (amd.flag & AMED_BRAKE) {
  1266 		if (amd.flag & AMED_BRAKE) {
  1267 			uint curz = GetSlopeZ(x, y) + 1;
  1267 			int curz = GetSlopeZ(x, y) + 1;
  1268 
  1268 
  1269 			if (z > curz) {
  1269 			if (z > curz) {
  1270 				z--;
  1270 				z--;
  1271 			} else if (z < curz) {
  1271 			} else if (z < curz) {
  1272 				z++;
  1272 				z++;