src/station_cmd.cpp
changeset 6070 e955cbc018ea
parent 6069 51c67843788d
child 6076 a052ed1779e4
equal deleted inserted replaced
6069:51c67843788d 6070:e955cbc018ea
  2380 
  2380 
  2381 
  2381 
  2382 uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
  2382 uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
  2383 {
  2383 {
  2384 	Station* around[8];
  2384 	Station* around[8];
  2385 	int rad = 0;
       
  2386 
  2385 
  2387 	for (uint i = 0; i < lengthof(around); i++) around[i] = NULL;
  2386 	for (uint i = 0; i < lengthof(around); i++) around[i] = NULL;
  2388 
  2387 
  2389 	int w_prod; //width and height of the "producer" of the cargo
  2388 	int w_prod; //width and height of the "producer" of the cargo
  2390 	int h_prod;
  2389 	int h_prod;
  2415 						(st->town->exclusive_counter == 0 || st->town->exclusivity == st->owner) && // check exclusive transport rights
  2414 						(st->town->exclusive_counter == 0 || st->town->exclusivity == st->owner) && // check exclusive transport rights
  2416 						st->goods[type].rating != 0 &&
  2415 						st->goods[type].rating != 0 &&
  2417 						(!_patches.selectgoods || st->goods[type].last_speed > 0) && // if last_speed is 0, no vehicle has been there.
  2416 						(!_patches.selectgoods || st->goods[type].last_speed > 0) && // if last_speed is 0, no vehicle has been there.
  2418 						((st->facilities & ~FACIL_BUS_STOP)   != 0 || type == CT_PASSENGERS) && // if we have other fac. than a bus stop, or the cargo is passengers
  2417 						((st->facilities & ~FACIL_BUS_STOP)   != 0 || type == CT_PASSENGERS) && // if we have other fac. than a bus stop, or the cargo is passengers
  2419 						((st->facilities & ~FACIL_TRUCK_STOP) != 0 || type != CT_PASSENGERS)) { // if we have other fac. than a cargo bay or the cargo is not passengers
  2418 						((st->facilities & ~FACIL_TRUCK_STOP) != 0 || type != CT_PASSENGERS)) { // if we have other fac. than a cargo bay or the cargo is not passengers
  2420 					int x_dist;
       
  2421 					int y_dist;
       
  2422 
       
  2423 					if (_patches.modified_catchment) {
  2419 					if (_patches.modified_catchment) {
  2424 						// min and max coordinates of the producer relative
  2420 						// min and max coordinates of the producer relative
  2425 						const int x_min_prod = 9;
  2421 						const int x_min_prod = 9;
  2426 						const int x_max_prod = 8 + w_prod;
  2422 						const int x_max_prod = 8 + w_prod;
  2427 						const int y_min_prod = 9;
  2423 						const int y_min_prod = 9;
  2428 						const int y_max_prod = 8 + h_prod;
  2424 						const int y_max_prod = 8 + h_prod;
  2429 
  2425 
  2430 						rad = FindCatchmentRadius(st);
  2426 						int rad = FindCatchmentRadius(st);
  2431 
  2427 
  2432 						x_dist = min(w_cur - x_min_prod, x_max_prod - w_cur);
  2428 						int x_dist = min(w_cur - x_min_prod, x_max_prod - w_cur);
  2433 						if (w_cur < x_min_prod) {
  2429 						if (w_cur < x_min_prod) {
  2434 							x_dist = x_min_prod - w_cur;
  2430 							x_dist = x_min_prod - w_cur;
  2435 						} else if (w_cur > x_max_prod) {
  2431 						} else if (w_cur > x_max_prod) {
  2436 							x_dist = w_cur - x_max_prod;
  2432 							x_dist = w_cur - x_max_prod;
  2437 						}
  2433 						}
  2438 
  2434 
  2439 						y_dist = min(h_cur - y_min_prod, y_max_prod - h_cur);
  2435 						int y_dist = min(h_cur - y_min_prod, y_max_prod - h_cur);
  2440 						if (h_cur < y_min_prod) {
  2436 						if (h_cur < y_min_prod) {
  2441 							y_dist = y_min_prod - h_cur;
  2437 							y_dist = y_min_prod - h_cur;
  2442 						} else if (h_cur > y_max_prod) {
  2438 						} else if (h_cur > y_max_prod) {
  2443 							y_dist = h_cur - y_max_prod;
  2439 							y_dist = h_cur - y_max_prod;
  2444 						}
  2440 						}
  2445 					} else {
  2441 
  2446 						x_dist = 0;
  2442 						if (x_dist > rad || y_dist > rad) break;
  2447 						y_dist = 0;
       
  2448 					}
  2443 					}
  2449 
  2444 
  2450 					if (x_dist <= rad && y_dist <= rad) around[i] = st;
  2445 					around[i] = st;
  2451 				}
  2446 				}
  2452 				break;
  2447 				break;
  2453 			} else if (around[i] == st) {
  2448 			} else if (around[i] == st) {
  2454 				break;
  2449 				break;
  2455 			}
  2450 			}