src/build_vehicle_gui.cpp
branchcpp_gui
changeset 6308 646711c5feaa
parent 6303 84c215fc8eb8
equal deleted inserted replaced
6307:f40e88cff863 6308:646711c5feaa
   310 	&EngineIntroDateSorter,
   310 	&EngineIntroDateSorter,
   311 	&EngineNameSorter,
   311 	&EngineNameSorter,
   312 	&TrainEngineRunningCostSorter,
   312 	&TrainEngineRunningCostSorter,
   313 	&TrainEnginePowerVsRunningCostSorter,
   313 	&TrainEnginePowerVsRunningCostSorter,
   314 	&EngineReliabilitySorter,
   314 	&EngineReliabilitySorter,
   315 },{
   315 }, {
   316 	/* Road vehicles */
   316 	/* Road vehicles */
   317 	&EngineNumberSorter,
   317 	&EngineNumberSorter,
   318 	&EngineIntroDateSorter,
   318 	&EngineIntroDateSorter,
   319 	&EngineNameSorter,
   319 	&EngineNameSorter,
   320 	&EngineReliabilitySorter,
   320 	&EngineReliabilitySorter,
   321 },{
   321 }, {
   322 	/* Ships */
   322 	/* Ships */
   323 	&EngineNumberSorter,
   323 	&EngineNumberSorter,
   324 	&EngineIntroDateSorter,
   324 	&EngineIntroDateSorter,
   325 	&EngineNameSorter,
   325 	&EngineNameSorter,
   326 	&EngineReliabilitySorter,
   326 	&EngineReliabilitySorter,
   327 },{
   327 }, {
   328 	/* Aircraft */
   328 	/* Aircraft */
   329 	&EngineNumberSorter,
   329 	&EngineNumberSorter,
   330 	&AircraftEngineCostSorter,
   330 	&AircraftEngineCostSorter,
   331 	&AircraftEngineSpeedSorter,
   331 	&AircraftEngineSpeedSorter,
   332 	&EngineIntroDateSorter,
   332 	&EngineIntroDateSorter,
   346 	STR_SORT_BY_DROPDOWN_NAME,
   346 	STR_SORT_BY_DROPDOWN_NAME,
   347 	STR_ENGINE_SORT_RUNNING_COST,
   347 	STR_ENGINE_SORT_RUNNING_COST,
   348 	STR_ENGINE_SORT_POWER_VS_RUNNING_COST,
   348 	STR_ENGINE_SORT_POWER_VS_RUNNING_COST,
   349 	STR_SORT_BY_RELIABILITY,
   349 	STR_SORT_BY_RELIABILITY,
   350 	INVALID_STRING_ID
   350 	INVALID_STRING_ID
   351 },{
   351 }, {
   352 	/* Road vehicles */
   352 	/* Road vehicles */
   353 	STR_ENGINE_SORT_ENGINE_ID,
   353 	STR_ENGINE_SORT_ENGINE_ID,
   354 	STR_ENGINE_SORT_INTRO_DATE,
   354 	STR_ENGINE_SORT_INTRO_DATE,
   355 	STR_SORT_BY_DROPDOWN_NAME,
   355 	STR_SORT_BY_DROPDOWN_NAME,
   356 	STR_SORT_BY_RELIABILITY,
   356 	STR_SORT_BY_RELIABILITY,
   357 	INVALID_STRING_ID
   357 	INVALID_STRING_ID
   358 },{
   358 }, {
   359 	/* Ships */
   359 	/* Ships */
   360 	STR_ENGINE_SORT_ENGINE_ID,
   360 	STR_ENGINE_SORT_ENGINE_ID,
   361 	STR_ENGINE_SORT_INTRO_DATE,
   361 	STR_ENGINE_SORT_INTRO_DATE,
   362 	STR_SORT_BY_DROPDOWN_NAME,
   362 	STR_SORT_BY_DROPDOWN_NAME,
   363 	STR_SORT_BY_RELIABILITY,
   363 	STR_SORT_BY_RELIABILITY,
   364 	INVALID_STRING_ID
   364 	INVALID_STRING_ID
   365 },{
   365 }, {
   366 	/* Aircraft */
   366 	/* Aircraft */
   367 	STR_ENGINE_SORT_ENGINE_ID,
   367 	STR_ENGINE_SORT_ENGINE_ID,
   368 	STR_ENGINE_SORT_COST,
   368 	STR_ENGINE_SORT_COST,
   369 	STR_SORT_BY_MAX_SPEED,
   369 	STR_SORT_BY_MAX_SPEED,
   370 	STR_ENGINE_SORT_INTRO_DATE,
   370 	STR_ENGINE_SORT_INTRO_DATE,
   390 	y += 10;
   390 	y += 10;
   391 
   391 
   392 	/* Wagon speed limit, displayed if above zero */
   392 	/* Wagon speed limit, displayed if above zero */
   393 	if (rvi->max_speed > 0 && _patches.wagon_speed_limits) {
   393 	if (rvi->max_speed > 0 && _patches.wagon_speed_limits) {
   394 		SetDParam(0, rvi->max_speed * 10 / 16);
   394 		SetDParam(0, rvi->max_speed * 10 / 16);
   395 		DrawString(x,y, STR_PURCHASE_INFO_SPEED, 0);
   395 		DrawString(x, y, STR_PURCHASE_INFO_SPEED, 0);
   396 		y += 10;
   396 		y += 10;
   397 	}
   397 	}
   398 	return y;
   398 	return y;
   399 }
   399 }
   400 
   400 
   404 	int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
   404 	int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
   405 
   405 
   406 	/* Purchase Cost - Engine weight */
   406 	/* Purchase Cost - Engine weight */
   407 	SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5);
   407 	SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5);
   408 	SetDParam(1, rvi->weight << multihead);
   408 	SetDParam(1, rvi->weight << multihead);
   409 	DrawString(x,y, STR_PURCHASE_INFO_COST_WEIGHT, 0);
   409 	DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, 0);
   410 	y += 10;
   410 	y += 10;
   411 
   411 
   412 	/* Max speed - Engine power */
   412 	/* Max speed - Engine power */
   413 	SetDParam(0, rvi->max_speed * 10 / 16);
   413 	SetDParam(0, rvi->max_speed * 10 / 16);
   414 	SetDParam(1, rvi->power << multihead);
   414 	SetDParam(1, rvi->power << multihead);
   415 	DrawString(x,y, STR_PURCHASE_INFO_SPEED_POWER, 0);
   415 	DrawString(x, y, STR_PURCHASE_INFO_SPEED_POWER, 0);
   416 	y += 10;
   416 	y += 10;
   417 
   417 
   418 	/* Max tractive effort - not applicable if old acceleration or maglev */
   418 	/* Max tractive effort - not applicable if old acceleration or maglev */
   419 	if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
   419 	if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
   420 		SetDParam(0, ((rvi->weight << multihead) * 10 * rvi->tractive_effort) / 256);
   420 		SetDParam(0, ((rvi->weight << multihead) * 10 * rvi->tractive_effort) / 256);
   421 		DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, 0);
   421 		DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, 0);
   422 		y += 10;
   422 		y += 10;
   423 	}
   423 	}
   424 
   424 
   425 	/* Running cost */
   425 	/* Running cost */
   426 	SetDParam(0, (rvi->running_cost_base * _price.running_rail[rvi->running_cost_class] >> 8) << multihead);
   426 	SetDParam(0, (GetEngineProperty(engine_number, 0x0D, rvi->running_cost_base) * _price.running_rail[rvi->running_cost_class] >> 8) << multihead);
   427 	DrawString(x,y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
   427 	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
   428 	y += 10;
   428 	y += 10;
   429 
   429 
   430 	/* Powered wagons power - Powered wagons extra weight */
   430 	/* Powered wagons power - Powered wagons extra weight */
   431 	if (rvi->pow_wag_power != 0) {
   431 	if (rvi->pow_wag_power != 0) {
   432 		SetDParam(0, rvi->pow_wag_power);
   432 		SetDParam(0, rvi->pow_wag_power);
   433 		SetDParam(1, rvi->pow_wag_weight);
   433 		SetDParam(1, rvi->pow_wag_weight);
   434 		DrawString(x,y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0);
   434 		DrawString(x, y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0);
   435 		y += 10;
   435 		y += 10;
   436 	};
   436 	};
   437 
   437 
   438 	return y;
   438 	return y;
   439 }
   439 }
   442 static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const RoadVehicleInfo *rvi)
   442 static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const RoadVehicleInfo *rvi)
   443 {
   443 {
   444 	bool refittable = (_engine_info[engine_number].refit_mask != 0);
   444 	bool refittable = (_engine_info[engine_number].refit_mask != 0);
   445 
   445 
   446 	/* Purchase cost - Max speed */
   446 	/* Purchase cost - Max speed */
   447 	SetDParam(0, rvi->base_cost * (_price.roadveh_base>>3)>>5);
   447 	SetDParam(0, rvi->base_cost * (_price.roadveh_base >> 3) >> 5);
   448 	SetDParam(1, rvi->max_speed * 10 / 32);
   448 	SetDParam(1, rvi->max_speed * 10 / 32);
   449 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
   449 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
   450 	y += 10;
   450 	y += 10;
   451 
   451 
   452 	/* Running cost */
   452 	/* Running cost */
   466 
   466 
   467 /* Draw ship specific details */
   467 /* Draw ship specific details */
   468 static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi)
   468 static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi)
   469 {
   469 {
   470 	/* Purchase cost - Max speed */
   470 	/* Purchase cost - Max speed */
   471 	SetDParam(0, svi->base_cost * (_price.ship_base>>3)>>5);
   471 	SetDParam(0, svi->base_cost * (_price.ship_base >> 3) >> 5);
   472 	SetDParam(1, svi->max_speed * 10 / 32);
   472 	SetDParam(1, svi->max_speed * 10 / 32);
   473 	DrawString(x,y, STR_PURCHASE_INFO_COST_SPEED, 0);
   473 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
   474 	y += 10;
   474 	y += 10;
   475 
   475 
   476 	/* Cargo type + capacity */
   476 	/* Cargo type + capacity */
   477 	SetDParam(0, svi->cargo_type);
   477 	SetDParam(0, svi->cargo_type);
   478 	SetDParam(1, svi->capacity);
   478 	SetDParam(1, svi->capacity);
   479 	SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY);
   479 	SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY);
   480 	DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0);
   480 	DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
   481 	y += 10;
   481 	y += 10;
   482 
   482 
   483 	/* Running cost */
   483 	/* Running cost */
   484 	SetDParam(0, svi->running_cost * _price.ship_running >> 8);
   484 	SetDParam(0, GetEngineProperty(engine_number, 0x0B, svi->running_cost) * _price.ship_running >> 8);
   485 	DrawString(x,y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
   485 	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
   486 	y += 10;
   486 	y += 10;
   487 
   487 
   488 	return y;
   488 	return y;
   489 }
   489 }
   490 
   490 
   492 static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const AircraftVehicleInfo *avi)
   492 static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const AircraftVehicleInfo *avi)
   493 {
   493 {
   494 	CargoID cargo;
   494 	CargoID cargo;
   495 
   495 
   496 	/* Purchase cost - Max speed */
   496 	/* Purchase cost - Max speed */
   497 	SetDParam(0, avi->base_cost * (_price.aircraft_base>>3)>>5);
   497 	SetDParam(0, avi->base_cost * (_price.aircraft_base >> 3) >> 5);
   498 	SetDParam(1, avi->max_speed * 10 / 16);
   498 	SetDParam(1, avi->max_speed * 10 / 16);
   499 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
   499 	DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0);
   500 	y += 10;
   500 	y += 10;
   501 
   501 
   502 	/* Cargo capacity */
   502 	/* Cargo capacity */
   514 		DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
   514 		DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
   515 	}
   515 	}
   516 	y += 10;
   516 	y += 10;
   517 
   517 
   518 	/* Running cost */
   518 	/* Running cost */
   519 	SetDParam(0, avi->running_cost * _price.aircraft_running >> 8);
   519 	SetDParam(0, GetEngineProperty(engine_number, 0x0E, avi->running_cost) * _price.aircraft_running >> 8);
   520 	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
   520 	DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0);
   521 	y += 10;
   521 	y += 10;
   522 
   522 
   523 	return y;
   523 	return y;
   524 }
   524 }
   558 
   558 
   559 				SetDParam(0, rvi->cargo_type);
   559 				SetDParam(0, rvi->cargo_type);
   560 				SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
   560 				SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
   561 				SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
   561 				SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
   562 			}
   562 			}
   563 			DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0);
   563 			DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
   564 			y += 10;
   564 			y += 10;
   565 		}
   565 		}
   566 			break;
   566 			break;
   567 		case VEH_ROAD:
   567 		case VEH_ROAD:
   568 			y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
   568 			y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
   999 	bv->sort_criteria         = _last_sort_criteria[type];
   999 	bv->sort_criteria         = _last_sort_criteria[type];
  1000 	bv->descending_sort_order = _last_sort_order[type];
  1000 	bv->descending_sort_order = _last_sort_order[type];
  1001 
  1001 
  1002 	switch (type) {
  1002 	switch (type) {
  1003 		case VEH_TRAIN:
  1003 		case VEH_TRAIN:
  1004 			WP(w,buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
  1004 			WP(w, buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
  1005 			w->Resize(0, 16);
  1005 			w->Resize(0, 16);
  1006 			break;
  1006 			break;
  1007 		case VEH_ROAD:
  1007 		case VEH_ROAD:
  1008 			w->Resize(0, 16);
  1008 			w->Resize(0, 16);
  1009 		case VEH_SHIP:
  1009 		case VEH_SHIP: