summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2009-11-08 13:02:05 +0000
committerfrosch <frosch@openttd.org>2009-11-08 13:02:05 +0000
commit6ca8f6e38025c9a7b484ffee669f27fad7ceb32d (patch)
tree9d745e0add388c8a8e058ec5399d66a4dc9d3d00
parentcc320dc4d0253fc349cffc2719f6d20bb7ced99d (diff)
downloadopenttd-6ca8f6e38025c9a7b484ffee669f27fad7ceb32d.tar.xz
(svn r18011) -Feature(ette): [NewGRF] CB 36 for roadvehicle property 09 'running cost factor'.
-rw-r--r--src/engine.cpp11
-rw-r--r--src/newgrf.cpp2
-rw-r--r--src/newgrf_properties.h1
-rw-r--r--src/roadveh.h8
-rw-r--r--src/roadveh_cmd.cpp11
-rw-r--r--src/train_cmd.cpp2
6 files changed, 23 insertions, 12 deletions
diff --git a/src/engine.cpp b/src/engine.cpp
index 1f49f2bce..04f483bb8 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -205,11 +205,15 @@ uint Engine::GetDisplayDefaultCapacity(uint16 *mail_capacity) const
Money Engine::GetRunningCost() const
{
switch (this->type) {
- case VEH_ROAD:
- return this->u.road.running_cost * GetPriceByIndex(this->u.road.running_cost_class) >> 8;
+ case VEH_ROAD: {
+ if (this->u.road.running_cost_class == INVALID_PRICE) return 0;
+ return GetEngineProperty(this->index, PROP_ROADVEH_RUNNING_COST_FACTOR, this->u.road.running_cost) * GetPriceByIndex(this->u.road.running_cost_class) >> 8;
+ }
- case VEH_TRAIN:
+ case VEH_TRAIN: {
+ if (this->u.rail.running_cost_class == INVALID_PRICE) return 0;
return GetEngineProperty(this->index, PROP_TRAIN_RUNNING_COST_FACTOR, this->u.rail.running_cost) * GetPriceByIndex(this->u.rail.running_cost_class) >> 8;
+ }
case VEH_SHIP:
return GetEngineProperty(this->index, PROP_SHIP_RUNNING_COST_FACTOR, this->u.ship.running_cost) * _price[PR_RUNNING_SHIP] >> 8;
@@ -233,6 +237,7 @@ Money Engine::GetCost() const
} else {
return GetEngineProperty(this->index, PROP_TRAIN_COST_FACTOR, this->u.rail.cost_factor) * (_price[PR_BUILD_VEHICLE_TRAIN] >> 3) >> 5;
}
+
case VEH_SHIP:
return GetEngineProperty(this->index, PROP_SHIP_COST_FACTOR, this->u.ship.cost_factor) * (_price[PR_BUILD_VEHICLE_SHIP] >> 3) >> 5;
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index fc38c2b9b..69a187fd6 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -752,7 +752,7 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop
rvi->max_speed = grf_load_byte(&buf);
break;
- case 0x09: // Running cost factor
+ case PROP_ROADVEH_RUNNING_COST_FACTOR: // 0x09 Running cost factor
rvi->running_cost = grf_load_byte(&buf);
break;
diff --git a/src/newgrf_properties.h b/src/newgrf_properties.h
index 7786faf89..758791caf 100644
--- a/src/newgrf_properties.h
+++ b/src/newgrf_properties.h
@@ -27,6 +27,7 @@ enum PropertyID {
PROP_TRAIN_TRACTIVE_EFFORT = 0x1F, ///< Tractive effort coefficient in 1/256
PROP_TRAIN_USER_DATA = 0x25, ///< User defined data for vehicle variable 0x42
+ PROP_ROADVEH_RUNNING_COST_FACTOR = 0x09, ///< Yearly runningcost
PROP_ROADVEH_CARGO_CAPACITY = 0x0F, ///< Capacity
PROP_ROADVEH_COST_FACTOR = 0x11, ///< Purchase cost
diff --git a/src/roadveh.h b/src/roadveh.h
index ffcc953ed..279dad56b 100644
--- a/src/roadveh.h
+++ b/src/roadveh.h
@@ -121,13 +121,7 @@ struct RoadVehicle : public SpecializedVehicle<RoadVehicle, VEH_ROAD> {
SpriteID GetImage(Direction direction) const;
int GetDisplaySpeed() const { return this->cur_speed / 2; }
int GetDisplayMaxSpeed() const { return this->max_speed / 2; }
-
- Money GetRunningCost() const
- {
- const RoadVehicleInfo *rvi = RoadVehInfo(this->engine_type);
- return rvi->running_cost * GetPriceByIndex(rvi->running_cost_class);
- }
-
+ Money GetRunningCost() const;
int GetDisplayImageWidth(Point *offset = NULL) const;
bool IsInDepot() const { return this->state == RVSB_IN_DEPOT; }
bool IsStoppedInDepot() const;
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp
index 8aebc4e4d..b5121095b 100644
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -1821,6 +1821,17 @@ static bool RoadVehController(RoadVehicle *v)
return true;
}
+Money RoadVehicle::GetRunningCost() const
+{
+ const RoadVehicleInfo *rvi = RoadVehInfo(this->engine_type);
+ if (rvi->running_cost_class == INVALID_PRICE) return 0;
+
+ uint cost_factor = GetVehicleProperty(this, PROP_ROADVEH_RUNNING_COST_FACTOR, rvi->running_cost);
+ if (cost_factor == 0) return 0;
+
+ return cost_factor * GetPriceByIndex(rvi->running_cost_class);
+}
+
bool RoadVehicle::Tick()
{
if (this->IsRoadVehFront()) {
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 0be119ef9..73d69eb82 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -4438,7 +4438,7 @@ Money Train::GetRunningCost() const
const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
if (rvi->running_cost_class == INVALID_PRICE) continue;
- byte cost_factor = GetVehicleProperty(v, PROP_TRAIN_RUNNING_COST_FACTOR, rvi->running_cost);
+ uint cost_factor = GetVehicleProperty(v, PROP_TRAIN_RUNNING_COST_FACTOR, rvi->running_cost);
if (cost_factor == 0) continue;
/* Halve running cost for multiheaded parts */