mirror of https://github.com/OpenTTD/OpenTTD
(svn r10999) -Codechange: unify the way the running cost of a vehicle is determined. Patch by nycom.
parent
99409d99d0
commit
3f3b013b99
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include "station_map.h"
|
#include "station_map.h"
|
||||||
#include "vehicle.h"
|
#include "vehicle.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "variables.h"
|
||||||
|
|
||||||
/** An aircraft can be one ot those types */
|
/** An aircraft can be one ot those types */
|
||||||
enum AircraftSubType {
|
enum AircraftSubType {
|
||||||
|
@ -130,6 +132,7 @@ struct Aircraft : public Vehicle {
|
||||||
int GetImage(Direction direction) const;
|
int GetImage(Direction direction) const;
|
||||||
int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
|
int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
|
||||||
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 16; }
|
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 16; }
|
||||||
|
Money GetRunningCost() const { return AircraftVehInfo(this->engine_type)->running_cost * _price.aircraft_running; }
|
||||||
void Tick();
|
void Tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ static void AircraftDetailsWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
||||||
SetDParam(2, v->max_age / 366);
|
SetDParam(2, v->max_age / 366);
|
||||||
SetDParam(3, _price.aircraft_running * AircraftVehInfo(v->engine_type)->running_cost >> 8);
|
SetDParam(3, v->GetDisplayRunningCost());
|
||||||
DrawString(2, 15, STR_A00D_AGE_RUNNING_COST_YR, 0);
|
DrawString(2, 15, STR_A00D_AGE_RUNNING_COST_YR, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
#define ROADVEH_H
|
#define ROADVEH_H
|
||||||
|
|
||||||
#include "vehicle.h"
|
#include "vehicle.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "variables.h"
|
||||||
|
|
||||||
enum RoadVehicleSubType {
|
enum RoadVehicleSubType {
|
||||||
RVST_FRONT,
|
RVST_FRONT,
|
||||||
|
@ -83,6 +84,7 @@ struct RoadVehicle : public Vehicle {
|
||||||
int GetImage(Direction direction) const;
|
int GetImage(Direction direction) const;
|
||||||
int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
|
int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
|
||||||
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
|
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
|
||||||
|
Money GetRunningCost() const { return RoadVehInfo(this->engine_type)->running_cost * _price.roadveh_running; }
|
||||||
void Tick();
|
void Tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ static void RoadVehDetailsWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
||||||
SetDParam(2, v->max_age / 366);
|
SetDParam(2, v->max_age / 366);
|
||||||
SetDParam(3, RoadVehInfo(v->engine_type)->running_cost * _price.roadveh_running >> 8);
|
SetDParam(3, v->GetDisplayRunningCost());
|
||||||
DrawString(2, 15, STR_900D_AGE_RUNNING_COST_YR, 0);
|
DrawString(2, 15, STR_900D_AGE_RUNNING_COST_YR, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#define SHIP_H
|
#define SHIP_H
|
||||||
|
|
||||||
#include "vehicle.h"
|
#include "vehicle.h"
|
||||||
|
#include "engine.h"
|
||||||
|
#include "variables.h"
|
||||||
|
|
||||||
void CcBuildShip(bool success, TileIndex tile, uint32 p1, uint32 p2);
|
void CcBuildShip(bool success, TileIndex tile, uint32 p1, uint32 p2);
|
||||||
void RecalcShipStuff(Vehicle *v);
|
void RecalcShipStuff(Vehicle *v);
|
||||||
|
@ -48,6 +50,7 @@ struct Ship: public Vehicle {
|
||||||
int GetImage(Direction direction) const;
|
int GetImage(Direction direction) const;
|
||||||
int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
|
int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
|
||||||
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
|
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
|
||||||
|
Money GetRunningCost() const { return ShipVehInfo(this->engine_type)->running_cost * _price.ship_running; }
|
||||||
void Tick();
|
void Tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ static void ShipDetailsWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
||||||
SetDParam(2, v->max_age / 366);
|
SetDParam(2, v->max_age / 366);
|
||||||
SetDParam(3, ShipVehInfo(v->engine_type)->running_cost * _price.ship_running >> 8);
|
SetDParam(3, v->GetDisplayRunningCost());
|
||||||
DrawString(2, 15, STR_9812_AGE_RUNNING_COST_YR, 0);
|
DrawString(2, 15, STR_9812_AGE_RUNNING_COST_YR, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -274,6 +274,7 @@ struct Train : public Vehicle {
|
||||||
int GetImage(Direction direction) const;
|
int GetImage(Direction direction) const;
|
||||||
int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
|
int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
|
||||||
int GetDisplayMaxSpeed() const { return this->u.rail.cached_max_speed * 10 / 16; }
|
int GetDisplayMaxSpeed() const { return this->u.rail.cached_max_speed * 10 / 16; }
|
||||||
|
Money GetRunningCost() const;
|
||||||
void Tick();
|
void Tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3313,6 +3313,25 @@ static void TrainLocoHandler(Vehicle *v, bool mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Money Train::GetRunningCost() const
|
||||||
|
{
|
||||||
|
Money cost = 0;
|
||||||
|
const Vehicle *v = this;
|
||||||
|
|
||||||
|
do {
|
||||||
|
const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
|
||||||
|
|
||||||
|
byte cost_factor = GetVehicleProperty(v, 0x0D, rvi->running_cost_base);
|
||||||
|
if (cost_factor == 0) continue;
|
||||||
|
|
||||||
|
cost += cost_factor * _price.running_rail[rvi->running_cost_class];
|
||||||
|
} while ((v = GetNextVehicle(v)) != NULL);
|
||||||
|
|
||||||
|
return cost;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Train::Tick()
|
void Train::Tick()
|
||||||
{
|
{
|
||||||
if (_age_cargo_skip_counter == 0) this->cargo.AgeCargo();
|
if (_age_cargo_skip_counter == 0) this->cargo.AgeCargo();
|
||||||
|
@ -3384,22 +3403,6 @@ static void CheckIfTrainNeedsService(Vehicle *v)
|
||||||
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
|
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
Money GetTrainRunningCost(const Vehicle *v)
|
|
||||||
{
|
|
||||||
Money cost = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
|
|
||||||
|
|
||||||
byte cost_factor = GetVehicleProperty(v, 0x0D, rvi->running_cost_base);
|
|
||||||
if (cost_factor == 0) continue;
|
|
||||||
|
|
||||||
cost += cost_factor * _price.running_rail[rvi->running_cost_class];
|
|
||||||
} while ((v = GetNextVehicle(v)) != NULL);
|
|
||||||
|
|
||||||
return cost;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnNewDay_Train(Vehicle *v)
|
void OnNewDay_Train(Vehicle *v)
|
||||||
{
|
{
|
||||||
if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v);
|
if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v);
|
||||||
|
@ -3420,7 +3423,7 @@ void OnNewDay_Train(Vehicle *v)
|
||||||
|
|
||||||
if ((v->vehstatus & VS_STOPPED) == 0) {
|
if ((v->vehstatus & VS_STOPPED) == 0) {
|
||||||
/* running costs */
|
/* running costs */
|
||||||
CommandCost cost(GetTrainRunningCost(v) / 364);
|
CommandCost cost(v->GetRunningCost() / 364);
|
||||||
|
|
||||||
v->profit_this_year -= cost.GetCost() >> 8;
|
v->profit_this_year -= cost.GetCost() >> 8;
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ static void DrawTrainDetailsWindow(Window *w)
|
||||||
|
|
||||||
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
|
||||||
SetDParam(2, v->max_age / 366);
|
SetDParam(2, v->max_age / 366);
|
||||||
SetDParam(3, GetTrainRunningCost(v) >> 8);
|
SetDParam(3, v->GetDisplayRunningCost());
|
||||||
DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0);
|
DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0);
|
||||||
|
|
||||||
SetDParam(2, v->GetDisplayMaxSpeed());
|
SetDParam(2, v->GetDisplayMaxSpeed());
|
||||||
|
|
|
@ -426,11 +426,23 @@ struct Vehicle : PoolItem<Vehicle, VehicleID, &_Vehicle_pool> {
|
||||||
*/
|
*/
|
||||||
virtual int GetDisplayMaxSpeed() const { return 0; }
|
virtual int GetDisplayMaxSpeed() const { return 0; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the running cost of a vehicle
|
||||||
|
* @return the vehicle's running cost
|
||||||
|
*/
|
||||||
|
virtual Money GetRunningCost() const { return 0; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calls the tick handler of the vehicle
|
* Calls the tick handler of the vehicle
|
||||||
*/
|
*/
|
||||||
virtual void Tick() {};
|
virtual void Tick() {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the running cost of a vehicle that can be sent into SetDParam for string processing.
|
||||||
|
* @return the vehicle's running cost
|
||||||
|
*/
|
||||||
|
Money GetDisplayRunningCost() const { return (this->GetRunningCost() >> 8); }
|
||||||
|
|
||||||
bool IsValid() const { return this->type != VEH_INVALID; }
|
bool IsValid() const { return this->type != VEH_INVALID; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue