diff options
Diffstat (limited to 'src/rail.h')
-rw-r--r-- | src/rail.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/rail.h b/src/rail.h index b24714f9d..8f965aa7b 100644 --- a/src/rail.h +++ b/src/rail.h @@ -807,6 +807,34 @@ static inline Money RailBuildCost(RailType railtype) return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3; } +/** + * Calculates the cost of rail conversion + * @param from The railtype we are converting from + * @param to The railtype we are converting to + * @return Cost per TrackBit + */ +static inline Money RailConvertCost(RailType from, RailType to) +{ + /* rail -> el. rail + * calculate the price as 5 / 4 of (cost build el. rail) - (cost build rail) + * (the price of workers to get to place is that 1/4) + */ + if (HasPowerOnRail(from, to)) { + return ((RailBuildCost(to) - RailBuildCost(from)) * 5) >> 2; + } + + /* el. rail -> rail + * calculate the price as 1 / 4 of (cost build el. rail) - (cost build rail) + * (the price of workers is 1 / 4 + price of copper sold to a recycle center) + */ + if (HasPowerOnRail(to, from)) { + return (RailBuildCost(from) - RailBuildCost(to)) >> 2; + } + + /* make the price the same as remove + build new type */ + return RailBuildCost(to) + _price.remove_rail; +} + void *UpdateTrainPowerProc(Vehicle *v, void *data); void DrawTrainDepotSprite(int x, int y, int image, RailType railtype); void DrawDefaultWaypointSprite(int x, int y, RailType railtype); |