src/newgrf_station.cpp
changeset 7010 6f0d9f03180d
parent 6849 e1b7913352f8
child 7157 ff42326d2fde
equal deleted inserted replaced
7009:9992ccf17e58 7010:6f0d9f03180d
   398 		case 0x48: { // Accepted cargo types
   398 		case 0x48: { // Accepted cargo types
   399 			CargoID cargo_type;
   399 			CargoID cargo_type;
   400 			uint32 value = 0;
   400 			uint32 value = 0;
   401 
   401 
   402 			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
   402 			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
   403 				if (HASBIT(st->goods[cargo_type].waiting_acceptance, 15)) SETBIT(value, cargo_type);
   403 				if (st->goods[cargo_type].acceptance) SETBIT(value, cargo_type);
   404 			}
   404 			}
   405 			return value;
   405 			return value;
   406 		}
   406 		}
   407 		case 0x49: return GetPlatformInfoHelper(tile, false, true, false);
   407 		case 0x49: return GetPlatformInfoHelper(tile, false, true, false);
   408 
   408 
   429 
   429 
   430 		if (c == CT_INVALID) return 0;
   430 		if (c == CT_INVALID) return 0;
   431 		const GoodsEntry *ge = &st->goods[c];
   431 		const GoodsEntry *ge = &st->goods[c];
   432 
   432 
   433 		switch (variable) {
   433 		switch (variable) {
   434 			case 0x60: return GB(ge->waiting_acceptance, 0, 12);
   434 			case 0x60: return min(ge->cargo.Count(), 4095);
   435 			case 0x61: return ge->days_since_pickup;
   435 			case 0x61: return ge->days_since_pickup;
   436 			case 0x62: return ge->rating;
   436 			case 0x62: return ge->rating;
   437 			case 0x63: return ge->enroute_time;
   437 			case 0x63: return ge->cargo.DaysInTransit();
   438 			case 0x64: return ge->last_speed | (ge->last_age << 8);
   438 			case 0x64: return ge->last_speed | (ge->last_age << 8);
   439 			case 0x65: return GB(ge->waiting_acceptance, 12, 4);
   439 			case 0x65: return ge->acceptance << 3;
   440 		}
   440 		}
   441 	}
   441 	}
   442 
   442 
   443 	/* Handle cargo variables (deprecated) */
   443 	/* Handle cargo variables (deprecated) */
   444 	if (variable >= 0x8C && variable <= 0xEC) {
   444 	if (variable >= 0x8C && variable <= 0xEC) {
   445 		const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];
   445 		const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];
   446 		switch (GB(variable - 0x8C, 0, 3)) {
   446 		switch (GB(variable - 0x8C, 0, 3)) {
   447 			case 0: return g->waiting_acceptance;
   447 			case 0: return g->cargo.Count();
   448 			case 1: return GB(g->waiting_acceptance, 8, 8);
   448 			case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (g->acceptance << 7);
   449 			case 2: return g->days_since_pickup;
   449 			case 2: return g->days_since_pickup;
   450 			case 3: return g->rating;
   450 			case 3: return g->rating;
   451 			case 4: return g->enroute_from;
   451 			case 4: return g->cargo.Source();
   452 			case 5: return g->enroute_time;
   452 			case 5: return g->cargo.DaysInTransit();
   453 			case 6: return g->last_speed;
   453 			case 6: return g->last_speed;
   454 			case 7: return g->last_age;
   454 			case 7: return g->last_age;
   455 		}
   455 		}
   456 	}
   456 	}
   457 
   457 
   482 			cargo = 0;
   482 			cargo = 0;
   483 			break;
   483 			break;
   484 
   484 
   485 		case CT_DEFAULT:
   485 		case CT_DEFAULT:
   486 			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
   486 			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
   487 				cargo += GB(st->goods[cargo_type].waiting_acceptance, 0, 12);
   487 				cargo += st->goods[cargo_type].cargo.Count();
   488 			}
   488 			}
   489 			break;
   489 			break;
   490 
   490 
   491 		default:
   491 		default:
   492 			cargo = GB(st->goods[cargo_type].waiting_acceptance, 0, 12);
   492 			cargo = st->goods[cargo_type].cargo.Count();
   493 			break;
   493 			break;
   494 	}
   494 	}
   495 
   495 
   496 	if (HASBIT(statspec->flags, 1)) cargo /= (st->trainst_w + st->trainst_h);
   496 	if (HASBIT(statspec->flags, 1)) cargo /= (st->trainst_w + st->trainst_h);
   497 	cargo = min(0xfff, cargo);
   497 	cargo = min(0xfff, cargo);
   543 	} else {
   543 	} else {
   544 		/* Pick the first cargo that we have waiting */
   544 		/* Pick the first cargo that we have waiting */
   545 		for (CargoID cargo = 0; cargo < NUM_CARGO; cargo++) {
   545 		for (CargoID cargo = 0; cargo < NUM_CARGO; cargo++) {
   546 			const CargoSpec *cs = GetCargo(cargo);
   546 			const CargoSpec *cs = GetCargo(cargo);
   547 			if (cs->IsValid() && object->u.station.statspec->spritegroup[cargo] != NULL &&
   547 			if (cs->IsValid() && object->u.station.statspec->spritegroup[cargo] != NULL &&
   548 					GB(object->u.station.st->goods[cargo].waiting_acceptance, 0, 12) != 0) {
   548 					!object->u.station.st->goods[cargo].cargo.Empty()) {
   549 				ctype = cargo;
   549 				ctype = cargo;
   550 				break;
   550 				break;
   551 			}
   551 			}
   552 		}
   552 		}
   553 	}
   553 	}