mirror of https://github.com/OpenTTD/OpenTTD
(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 windowrelease/0.6
parent
b7cd791988
commit
a0ddc43e92
|
@ -112,8 +112,8 @@ static void AiStateVehLoop(Player *p)
|
||||||
|
|
||||||
/* not profitable? */
|
/* not profitable? */
|
||||||
if (v->age >= 730 &&
|
if (v->age >= 730 &&
|
||||||
v->profit_last_year < _price.station_value * 5 &&
|
v->profit_last_year >> 8 < _price.station_value * 5 &&
|
||||||
v->profit_this_year < _price.station_value * 5) {
|
v->profit_this_year >> 8 < _price.station_value * 5) {
|
||||||
_players_ai[p->index].state_counter = 0;
|
_players_ai[p->index].state_counter = 0;
|
||||||
_players_ai[p->index].state = AIS_SELL_VEHICLE;
|
_players_ai[p->index].state = AIS_SELL_VEHICLE;
|
||||||
_players_ai[p->index].cur_veh = v;
|
_players_ai[p->index].cur_veh = v;
|
||||||
|
|
|
@ -1252,7 +1252,7 @@ static void AiNew_CheckVehicle(Player *p, Vehicle *v)
|
||||||
if (v->age > 360) {
|
if (v->age > 360) {
|
||||||
// If both years together are not more than AI_MINIMUM_ROUTE_PROFIT,
|
// If both years together are not more than AI_MINIMUM_ROUTE_PROFIT,
|
||||||
// it is not worth the line I guess...
|
// it is not worth the line I guess...
|
||||||
if (v->profit_last_year + v->profit_this_year < AI_MINIMUM_ROUTE_PROFIT ||
|
if ((v->profit_last_year + v->profit_this_year) >> 8 < AI_MINIMUM_ROUTE_PROFIT ||
|
||||||
(v->reliability * 100 >> 16) < 40) {
|
(v->reliability * 100 >> 16) < 40) {
|
||||||
// There is a possibility that the route is fucked up...
|
// There is a possibility that the route is fucked up...
|
||||||
if (v->cargo.DaysInTransit() > AI_VEHICLE_LOST_DAYS) {
|
if (v->cargo.DaysInTransit() > AI_VEHICLE_LOST_DAYS) {
|
||||||
|
|
|
@ -321,6 +321,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
u->z_pos = GetSlopeZ(x, y);
|
u->z_pos = GetSlopeZ(x, y);
|
||||||
v->z_pos = u->z_pos + 1;
|
v->z_pos = u->z_pos + 1;
|
||||||
|
|
||||||
|
v->running_ticks = 0;
|
||||||
|
|
||||||
// u->delta_x = u->delta_y = 0;
|
// u->delta_x = u->delta_y = 0;
|
||||||
|
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
|
@ -735,11 +737,12 @@ void Aircraft::OnNewDay()
|
||||||
AgeVehicle(this);
|
AgeVehicle(this);
|
||||||
CheckIfAircraftNeedsService(this);
|
CheckIfAircraftNeedsService(this);
|
||||||
|
|
||||||
if (this->vehstatus & VS_STOPPED) return;
|
if (this->running_ticks == 0) return;
|
||||||
|
|
||||||
CommandCost cost = CommandCost(EXPENSES_AIRCRAFT_RUN, GetVehicleProperty(this, 0x0E, AircraftVehInfo(this->engine_type)->running_cost) * _price.aircraft_running / 364);
|
CommandCost cost(EXPENSES_AIRCRAFT_RUN, GetVehicleProperty(this, 0x0E, AircraftVehInfo(this->engine_type)->running_cost) * _price.aircraft_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);
|
SubtractMoneyFromPlayerFract(this->owner, cost);
|
||||||
|
|
||||||
|
@ -2146,6 +2149,8 @@ void Aircraft::Tick()
|
||||||
{
|
{
|
||||||
if (!IsNormalAircraft(this)) return;
|
if (!IsNormalAircraft(this)) return;
|
||||||
|
|
||||||
|
if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++;
|
||||||
|
|
||||||
if (this->subtype == AIR_HELICOPTER) HelicopterTickHandler(this);
|
if (this->subtype == AIR_HELICOPTER) HelicopterTickHandler(this);
|
||||||
|
|
||||||
AgeAircraftCargo(this);
|
AgeAircraftCargo(this);
|
||||||
|
|
|
@ -163,11 +163,9 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
|
||||||
num++;
|
num++;
|
||||||
if (v->age > 730) {
|
if (v->age > 730) {
|
||||||
/* Find the vehicle with the lowest amount of profit */
|
/* Find the vehicle with the lowest amount of profit */
|
||||||
if (min_profit_first == true) {
|
if (min_profit_first || min_profit > v->profit_last_year >> 8) {
|
||||||
min_profit = v->profit_last_year;
|
min_profit = v->profit_last_year >> 8;
|
||||||
min_profit_first = false;
|
min_profit_first = false;
|
||||||
} else if (min_profit > v->profit_last_year) {
|
|
||||||
min_profit = v->profit_last_year;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1505,7 +1503,7 @@ void VehiclePayment(Vehicle *front_v)
|
||||||
cp->days_in_transit,
|
cp->days_in_transit,
|
||||||
v->cargo_type);
|
v->cargo_type);
|
||||||
|
|
||||||
front_v->profit_this_year += profit;
|
front_v->profit_this_year += profit << 8;
|
||||||
virtual_profit += profit; // accumulate transfer profits for whole vehicle
|
virtual_profit += profit; // accumulate transfer profits for whole vehicle
|
||||||
cp->feeder_share += profit; // account for the (virtual) profit already made for the cargo packet
|
cp->feeder_share += profit; // account for the (virtual) profit already made for the cargo packet
|
||||||
cp->paid_for = true; // record that the cargo has been paid for to eliminate double counting
|
cp->paid_for = true; // record that the cargo has been paid for to eliminate double counting
|
||||||
|
@ -1523,7 +1521,7 @@ void VehiclePayment(Vehicle *front_v)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (route_profit != 0) {
|
if (route_profit != 0) {
|
||||||
front_v->profit_this_year += vehicle_profit;
|
front_v->profit_this_year += vehicle_profit << 8;
|
||||||
SubtractMoneyFromPlayer(CommandCost(front_v->GetExpenseType(true), -route_profit));
|
SubtractMoneyFromPlayer(CommandCost(front_v->GetExpenseType(true), -route_profit));
|
||||||
|
|
||||||
if (IsLocalPlayer() && !PlayVehicleSound(front_v, VSE_LOAD_UNLOAD)) {
|
if (IsLocalPlayer() && !PlayVehicleSound(front_v, VSE_LOAD_UNLOAD)) {
|
||||||
|
|
|
@ -483,8 +483,8 @@ static void GroupWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG2) DrawSmallOrderList(v, x + 138, y2);
|
if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG2) DrawSmallOrderList(v, x + 138, y2);
|
||||||
|
|
||||||
SetDParam(0, v->profit_this_year);
|
SetDParam(0, v->profit_this_year >> 8);
|
||||||
SetDParam(1, v->profit_last_year);
|
SetDParam(1, v->profit_last_year >> 8);
|
||||||
DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
|
DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
|
||||||
|
|
||||||
if (IsValidGroupID(v->group_id)) {
|
if (IsValidGroupID(v->group_id)) {
|
||||||
|
|
|
@ -694,14 +694,14 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
|
||||||
case 0x4F: return GB(v->reliability, 8, 8);
|
case 0x4F: return GB(v->reliability, 8, 8);
|
||||||
case 0x50: return v->reliability_spd_dec;
|
case 0x50: return v->reliability_spd_dec;
|
||||||
case 0x51: return GB(v->reliability_spd_dec, 8, 8);
|
case 0x51: return GB(v->reliability_spd_dec, 8, 8);
|
||||||
case 0x52: return ClampToI32(v->profit_this_year);
|
case 0x52: return ClampToI32(v->profit_this_year >> 8);
|
||||||
case 0x53: return GB(ClampToI32(v->profit_this_year), 8, 24);
|
case 0x53: return GB(ClampToI32(v->profit_this_year >> 8), 8, 24);
|
||||||
case 0x54: return GB(ClampToI32(v->profit_this_year), 16, 16);
|
case 0x54: return GB(ClampToI32(v->profit_this_year >> 8), 16, 16);
|
||||||
case 0x55: return GB(ClampToI32(v->profit_this_year), 24, 8);
|
case 0x55: return GB(ClampToI32(v->profit_this_year >> 8), 24, 8);
|
||||||
case 0x56: return ClampToI32(v->profit_last_year);
|
case 0x56: return ClampToI32(v->profit_last_year >> 8);
|
||||||
case 0x57: return GB(ClampToI32(v->profit_last_year), 8, 24);
|
case 0x57: return GB(ClampToI32(v->profit_last_year >> 8), 8, 24);
|
||||||
case 0x58: return GB(ClampToI32(v->profit_last_year), 16, 16);
|
case 0x58: return GB(ClampToI32(v->profit_last_year >> 8), 16, 16);
|
||||||
case 0x59: return GB(ClampToI32(v->profit_last_year), 24, 8);
|
case 0x59: return GB(ClampToI32(v->profit_last_year >> 8), 24, 8);
|
||||||
case 0x5A: return v->Next() == NULL ? INVALID_VEHICLE : v->Next()->index;
|
case 0x5A: return v->Next() == NULL ? INVALID_VEHICLE : v->Next()->index;
|
||||||
case 0x5C: return ClampToI32(v->value);
|
case 0x5C: return ClampToI32(v->value);
|
||||||
case 0x5D: return GB(ClampToI32(v->value), 8, 24);
|
case 0x5D: return GB(ClampToI32(v->value), 8, 24);
|
||||||
|
|
|
@ -2419,6 +2419,16 @@ bool AfterLoadGame()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CheckSavegameVersion(88)) {
|
||||||
|
/* Profits are now with 8 bit fract */
|
||||||
|
Vehicle *v;
|
||||||
|
FOR_ALL_VEHICLES(v) {
|
||||||
|
v->profit_this_year <<= 8;
|
||||||
|
v->profit_last_year <<= 8;
|
||||||
|
v->running_ticks = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return InitializeWindowsAndCaches();
|
return InitializeWindowsAndCaches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,6 +219,8 @@ CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
|
|
||||||
|
v->running_ticks = 0;
|
||||||
|
|
||||||
v->u.road.state = RVSB_IN_DEPOT;
|
v->u.road.state = RVSB_IN_DEPOT;
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
|
|
||||||
|
@ -1966,7 +1968,10 @@ void RoadVehicle::Tick()
|
||||||
{
|
{
|
||||||
AgeRoadVehCargo(this);
|
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)
|
static void CheckIfRoadVehNeedsService(Vehicle *v)
|
||||||
|
@ -2008,8 +2013,6 @@ static void CheckIfRoadVehNeedsService(Vehicle *v)
|
||||||
|
|
||||||
void RoadVehicle::OnNewDay()
|
void RoadVehicle::OnNewDay()
|
||||||
{
|
{
|
||||||
CommandCost cost(EXPENSES_ROADVEH_RUN);
|
|
||||||
|
|
||||||
if (!IsRoadVehFront(this)) return;
|
if (!IsRoadVehFront(this)) return;
|
||||||
|
|
||||||
if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this);
|
if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this);
|
||||||
|
@ -2027,10 +2030,8 @@ void RoadVehicle::OnNewDay()
|
||||||
ClearSlot(this);
|
ClearSlot(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->vehstatus & VS_STOPPED) return;
|
|
||||||
|
|
||||||
/* update destination */
|
/* 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);
|
Station *st = GetStation(this->current_order.dest);
|
||||||
RoadStop *rs = st->GetPrimaryRoadStop(this);
|
RoadStop *rs = st->GetPrimaryRoadStop(this);
|
||||||
RoadStop *best = NULL;
|
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;
|
||||||
|
|
||||||
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);
|
SubtractMoneyFromPlayerFract(this->owner, cost);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
extern const uint16 SAVEGAME_VERSION = 87;
|
extern const uint16 SAVEGAME_VERSION = 88;
|
||||||
uint16 _sl_version; ///< the major savegame version identifier
|
uint16 _sl_version; ///< the major savegame version identifier
|
||||||
byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
|
byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
|
||||||
|
|
||||||
|
|
|
@ -170,8 +170,6 @@ static void CheckIfShipNeedsService(Vehicle *v)
|
||||||
|
|
||||||
void Ship::OnNewDay()
|
void Ship::OnNewDay()
|
||||||
{
|
{
|
||||||
CommandCost cost(EXPENSES_SHIP_RUN);
|
|
||||||
|
|
||||||
if ((++this->day_counter & 7) == 0)
|
if ((++this->day_counter & 7) == 0)
|
||||||
DecreaseVehicleValue(this);
|
DecreaseVehicleValue(this);
|
||||||
|
|
||||||
|
@ -181,10 +179,12 @@ void Ship::OnNewDay()
|
||||||
|
|
||||||
CheckOrders(this);
|
CheckOrders(this);
|
||||||
|
|
||||||
if (this->vehstatus & VS_STOPPED) return;
|
if (this->running_ticks == 0) return;
|
||||||
|
|
||||||
cost.AddCost(GetVehicleProperty(this, 0x0F, ShipVehInfo(this->engine_type)->running_cost) * _price.ship_running / 364);
|
CommandCost cost(EXPENSES_SHIP_RUN, GetVehicleProperty(this, 0x0F, ShipVehInfo(this->engine_type)->running_cost) * _price.ship_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);
|
SubtractMoneyFromPlayerFract(this->owner, cost);
|
||||||
|
|
||||||
|
@ -781,6 +781,8 @@ static void AgeShipCargo(Vehicle *v)
|
||||||
|
|
||||||
void Ship::Tick()
|
void Ship::Tick()
|
||||||
{
|
{
|
||||||
|
if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++;
|
||||||
|
|
||||||
AgeShipCargo(this);
|
AgeShipCargo(this);
|
||||||
ShipController(this);
|
ShipController(this);
|
||||||
}
|
}
|
||||||
|
@ -843,6 +845,8 @@ CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
|
|
||||||
|
v->running_ticks = 0;
|
||||||
|
|
||||||
v->UpdateDeltaXY(v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
|
|
||||||
|
|
|
@ -735,6 +735,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32
|
||||||
v->x_pos = x;
|
v->x_pos = x;
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
|
v->running_ticks = 0;
|
||||||
v->u.rail.track = TRACK_BIT_DEPOT;
|
v->u.rail.track = TRACK_BIT_DEPOT;
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
v->spritenum = rvi->image_index;
|
v->spritenum = rvi->image_index;
|
||||||
|
@ -3595,6 +3596,7 @@ void Train::Tick()
|
||||||
this->tick_counter++;
|
this->tick_counter++;
|
||||||
|
|
||||||
if (IsFrontEngine(this)) {
|
if (IsFrontEngine(this)) {
|
||||||
|
if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++;
|
||||||
this->current_order_time++;
|
this->current_order_time++;
|
||||||
|
|
||||||
TrainLocoHandler(this, false);
|
TrainLocoHandler(this, false);
|
||||||
|
@ -3665,11 +3667,12 @@ void Train::OnNewDay()
|
||||||
if (tile != 0) this->dest_tile = tile;
|
if (tile != 0) this->dest_tile = tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((this->vehstatus & VS_STOPPED) == 0) {
|
if (this->running_ticks != 0) {
|
||||||
/* running costs */
|
/* running costs */
|
||||||
CommandCost cost(EXPENSES_TRAIN_RUN, this->GetRunningCost() / 364);
|
CommandCost cost(EXPENSES_TRAIN_RUN, this->GetRunningCost() * 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);
|
SubtractMoneyFromPlayerFract(this->owner, cost);
|
||||||
|
|
||||||
|
|
|
@ -2797,6 +2797,7 @@ static const SaveLoad _common_veh_desc[] = {
|
||||||
|
|
||||||
SLE_VAR(Vehicle, day_counter, SLE_UINT8),
|
SLE_VAR(Vehicle, day_counter, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, tick_counter, SLE_UINT8),
|
SLE_VAR(Vehicle, tick_counter, SLE_UINT8),
|
||||||
|
SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION),
|
||||||
|
|
||||||
SLE_VAR(Vehicle, cur_order_index, SLE_UINT8),
|
SLE_VAR(Vehicle, cur_order_index, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, num_orders, SLE_UINT8),
|
SLE_VAR(Vehicle, num_orders, SLE_UINT8),
|
||||||
|
|
|
@ -249,8 +249,9 @@ public:
|
||||||
CargoList cargo; ///< The cargo this vehicle is carrying
|
CargoList cargo; ///< The cargo this vehicle is carrying
|
||||||
|
|
||||||
|
|
||||||
byte day_counter; // increased by one for each day
|
byte day_counter; ///< Increased by one for each day
|
||||||
byte tick_counter; // increased by one for each tick
|
byte tick_counter; ///< Increased by one for each tick
|
||||||
|
byte running_ticks; ///< Number of ticks this vehicle was not stopped this day
|
||||||
|
|
||||||
/* Begin Order-stuff */
|
/* Begin Order-stuff */
|
||||||
Order current_order; ///< The current order (+ status, like: loading)
|
Order current_order; ///< The current order (+ status, like: loading)
|
||||||
|
@ -291,8 +292,8 @@ public:
|
||||||
uint16 load_unload_time_rem;
|
uint16 load_unload_time_rem;
|
||||||
byte vehicle_flags; // Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
|
byte vehicle_flags; // Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
|
||||||
|
|
||||||
Money profit_this_year;
|
Money profit_this_year; ///< Profit this year << 8, low 8 bits are fract
|
||||||
Money profit_last_year;
|
Money profit_last_year; ///< Profit last year << 8, low 8 bits are fract
|
||||||
Money value;
|
Money value;
|
||||||
|
|
||||||
GroupID group_id; ///< Index of group Pool array
|
GroupID group_id; ///< Index of group Pool array
|
||||||
|
|
|
@ -173,7 +173,7 @@ void DrawVehicleProfitButton(const Vehicle *v, int x, int y)
|
||||||
pal = PALETTE_TO_GREY;
|
pal = PALETTE_TO_GREY;
|
||||||
} else if (v->profit_last_year < 0) {
|
} else if (v->profit_last_year < 0) {
|
||||||
pal = PALETTE_TO_RED;
|
pal = PALETTE_TO_RED;
|
||||||
} else if (v->profit_last_year < 10000) {
|
} else if (v->profit_last_year >> 8 < 10000) {
|
||||||
pal = PALETTE_TO_YELLOW;
|
pal = PALETTE_TO_YELLOW;
|
||||||
} else {
|
} else {
|
||||||
pal = PALETTE_TO_GREEN;
|
pal = PALETTE_TO_GREEN;
|
||||||
|
@ -598,7 +598,7 @@ static int CDECL VehicleProfitLastYearSorter(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
const Vehicle* va = *(const Vehicle**)a;
|
const Vehicle* va = *(const Vehicle**)a;
|
||||||
const Vehicle* vb = *(const Vehicle**)b;
|
const Vehicle* vb = *(const Vehicle**)b;
|
||||||
int r = ClampToI32(va->profit_last_year - vb->profit_last_year);
|
int r = ClampToI32((va->profit_last_year - vb->profit_last_year) >> 8);
|
||||||
|
|
||||||
VEHICLEUNITNUMBERSORTER(r, va, vb);
|
VEHICLEUNITNUMBERSORTER(r, va, vb);
|
||||||
|
|
||||||
|
@ -983,8 +983,8 @@ static void DrawVehicleListWindow(Window *w)
|
||||||
const Vehicle *v = vl->sort_list[i];
|
const Vehicle *v = vl->sort_list[i];
|
||||||
StringID str;
|
StringID str;
|
||||||
|
|
||||||
SetDParam(0, v->profit_this_year);
|
SetDParam(0, v->profit_this_year >> 8);
|
||||||
SetDParam(1, v->profit_last_year);
|
SetDParam(1, v->profit_last_year >> 8);
|
||||||
|
|
||||||
DrawVehicleImage(v, x + 19, y + 6, INVALID_VEHICLE, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0);
|
DrawVehicleImage(v, x + 19, y + 6, INVALID_VEHICLE, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0);
|
||||||
DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
|
DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
|
||||||
|
@ -1500,8 +1500,8 @@ static void DrawVehicleDetailsWindow(Window *w)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw profit */
|
/* Draw profit */
|
||||||
SetDParam(0, v->profit_this_year);
|
SetDParam(0, v->profit_this_year >> 8);
|
||||||
SetDParam(1, v->profit_last_year);
|
SetDParam(1, v->profit_last_year >> 8);
|
||||||
DrawString(2, 35, _vehicle_translation_table[VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR][v->type], TC_FROMSTRING);
|
DrawString(2, 35, _vehicle_translation_table[VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR][v->type], TC_FROMSTRING);
|
||||||
|
|
||||||
/* Draw breakdown & reliability */
|
/* Draw breakdown & reliability */
|
||||||
|
|
Loading…
Reference in New Issue