From dfba33819b68aa04c96f60666bf436e6474765dd Mon Sep 17 00:00:00 2001 From: smatz Date: Sat, 8 Dec 2007 19:53:30 +0000 Subject: (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic --- src/rail.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/rail.h') 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); -- cgit v1.2.3-54-g00ecf