Mercurial > hg > openttd
diff src/roadveh_cmd.cpp @ 8556:8aae08d562cc draft
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
-Fix [FS#1739]: vehicle profit is now counted with 8bit fract, so it is now shown properly in the vehicle details window
author | smatz <smatz@openttd.org> |
---|---|
date | Wed, 13 Feb 2008 19:24:40 +0000 (2008-02-13) |
parents | 9bf902b801c6 |
children | 992fa65afba1 |
line wrap: on
line diff
--- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -219,6 +219,8 @@ v->y_pos = y; v->z_pos = GetSlopeZ(x, y); + v->running_ticks = 0; + v->u.road.state = RVSB_IN_DEPOT; v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL; @@ -1966,7 +1968,10 @@ { AgeRoadVehCargo(this); - if (IsRoadVehFront(this)) RoadVehController(this); + if (IsRoadVehFront(this)) { + if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++; + RoadVehController(this); + } } static void CheckIfRoadVehNeedsService(Vehicle *v) @@ -2008,8 +2013,6 @@ void RoadVehicle::OnNewDay() { - CommandCost cost(EXPENSES_ROADVEH_RUN); - if (!IsRoadVehFront(this)) return; if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this); @@ -2027,10 +2030,8 @@ ClearSlot(this); } - if (this->vehstatus & VS_STOPPED) return; - /* update destination */ - if (this->current_order.type == OT_GOTO_STATION && this->u.road.slot == NULL && !(this->vehstatus & VS_CRASHED)) { + if (!(this->vehstatus & VS_STOPPED) && this->current_order.type == OT_GOTO_STATION && this->u.road.slot == NULL && !(this->vehstatus & VS_CRASHED)) { Station *st = GetStation(this->current_order.dest); RoadStop *rs = st->GetPrimaryRoadStop(this); RoadStop *best = NULL; @@ -2088,9 +2089,12 @@ } } - cost = CommandCost(EXPENSES_ROADVEH_RUN, RoadVehInfo(this->engine_type)->running_cost * _price.roadveh_running / 364); + if (this->running_ticks == 0) return; - this->profit_this_year -= cost.GetCost() >> 8; + CommandCost cost(EXPENSES_ROADVEH_RUN, RoadVehInfo(this->engine_type)->running_cost * _price.roadveh_running * this->running_ticks / (364 * DAY_TICKS)); + + this->profit_this_year -= cost.GetCost(); + this->running_ticks = 0; SubtractMoneyFromPlayerFract(this->owner, cost);