diff options
-rw-r--r-- | aircraft_cmd.c | 2 | ||||
-rw-r--r-- | roadveh_cmd.c | 2 | ||||
-rw-r--r-- | ship_cmd.c | 2 | ||||
-rw-r--r-- | train_cmd.c | 4 | ||||
-rw-r--r-- | vehicle.c | 20 | ||||
-rw-r--r-- | vehicle.h | 1 |
6 files changed, 25 insertions, 6 deletions
diff --git a/aircraft_cmd.c b/aircraft_cmd.c index bb5985f92..3a7d64a9d 100644 --- a/aircraft_cmd.c +++ b/aircraft_cmd.c @@ -625,7 +625,7 @@ int32 CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) cost = 0; if (IS_HUMAN_PLAYER(v->owner) && new_cid != v->cargo_type) { - cost = (EngInfo(v->engine_type)->refit_cost * _price.aircraft_base) >> 10; + cost = GetRefitCost(v->engine_type); } if (flags & DC_EXEC) { diff --git a/roadveh_cmd.c b/roadveh_cmd.c index e59d7c60c..3b52f3ccd 100644 --- a/roadveh_cmd.c +++ b/roadveh_cmd.c @@ -1838,7 +1838,7 @@ int32 CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) cost = 0; if (IS_HUMAN_PLAYER(v->owner) && new_cid != v->cargo_type) { - cost = (EngInfo(v->engine_type)->refit_cost * _price.roadveh_base) >> 10; + cost = GetRefitCost(v->engine_type); } if (flags & DC_EXEC) { diff --git a/ship_cmd.c b/ship_cmd.c index d014ba485..f8cc1822d 100644 --- a/ship_cmd.c +++ b/ship_cmd.c @@ -1121,7 +1121,7 @@ int32 CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) cost = 0; if (IS_HUMAN_PLAYER(v->owner) && new_cid != v->cargo_type) { - cost = (EngInfo(v->engine_type)->refit_cost * _price.ship_base) >> 10; + cost = GetRefitCost(v->engine_type); } if (flags & DC_EXEC) { diff --git a/train_cmd.c b/train_cmd.c index a1fcf2938..0b7d60b69 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -1819,9 +1819,7 @@ int32 CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (amount != 0) { if (new_cid != v->cargo_type) { - int32 base_cost = (rvi->flags & RVI_WAGON) ? - _price.build_railwagon : _price.build_railvehicle; - cost += (EngInfo(v->engine_type)->refit_cost * base_cost) >> 9; + cost += GetRefitCost(v->engine_type); } num += amount; @@ -723,6 +723,26 @@ CargoID FindFirstRefittableCargo(EngineID engine_type) return CT_INVALID; } +/** Learn the price of refitting a certain engine +* @param engine Which engine to refit +* @return Price for refitting +*/ +int32 GetRefitCost(EngineID engine_type) +{ + int32 base_cost; + + switch (GetEngine(engine_type)->type) { + case VEH_Ship: base_cost = _price.ship_base; break; + case VEH_Road: base_cost = _price.roadveh_base; break; + case VEH_Aircraft: base_cost = _price.aircraft_base; break; + case VEH_Train: + base_cost = 2 * ((RailVehInfo(engine_type)->flags & RVI_WAGON) ? + _price.build_railwagon : _price.build_railvehicle); + break; + default: NOT_REACHED(); break; + } + return (EngInfo(engine_type)->refit_cost * base_cost) >> 10; +} static void DoDrawVehicle(const Vehicle *v) { @@ -266,6 +266,7 @@ byte VehicleRandomBits(void); bool CanFillVehicle(Vehicle *v); bool CanRefitTo(EngineID engine_type, CargoID cid_to); CargoID FindFirstRefittableCargo(EngineID engine_type); +int32 GetRefitCost(EngineID engine_type); void ViewportAddVehicles(DrawPixelInfo *dpi); |