From a0ddc43e92c33436bccc0d16ae935237e02a357e Mon Sep 17 00:00:00 2001 From: smatz Date: Wed, 13 Feb 2008 19:24:40 +0000 Subject: (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 --- src/roadveh_cmd.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/roadveh_cmd.cpp') diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index f340a4b2b..85ddce643 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -219,6 +219,8 @@ CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) 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 @@ void RoadVehicle::Tick() { 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 @@ static void CheckIfRoadVehNeedsService(Vehicle *v) void RoadVehicle::OnNewDay() { - CommandCost cost(EXPENSES_ROADVEH_RUN); - if (!IsRoadVehFront(this)) return; if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this); @@ -2027,10 +2030,8 @@ void RoadVehicle::OnNewDay() 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 @@ void RoadVehicle::OnNewDay() } } - cost = CommandCost(EXPENSES_ROADVEH_RUN, RoadVehInfo(this->engine_type)->running_cost * _price.roadveh_running / 364); + if (this->running_ticks == 0) return; + + 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() >> 8; + this->profit_this_year -= cost.GetCost(); + this->running_ticks = 0; SubtractMoneyFromPlayerFract(this->owner, cost); -- cgit v1.2.3-54-g00ecf