mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-19 15:25:39 +00:00
(svn r2600) Fix: [vehicles] Fix problem with vehicle loop not distributing the calls evenly over the day.
This commit is contained in:
parent
718307ffa4
commit
b76a0b8158
39
misc.c
39
misc.c
@ -138,7 +138,6 @@ void InitializeGame(uint size_x, uint size_y)
|
|||||||
_tick_counter = 0;
|
_tick_counter = 0;
|
||||||
_date_fract = 0;
|
_date_fract = 0;
|
||||||
_cur_tileloop_tile = 0;
|
_cur_tileloop_tile = 0;
|
||||||
_vehicle_id_ctr_day = 0;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
uint starting = ConvertIntDate(_patches.starting_date);
|
uint starting = ConvertIntDate(_patches.starting_date);
|
||||||
@ -485,40 +484,21 @@ static const uint16 _autosave_months[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs the day_proc of 'amount' vehicles.
|
* Runs the day_proc for every DAY_TICKS vehicle starting at daytick.
|
||||||
*/
|
*/
|
||||||
static void RunVehicleDayProc(uint amount)
|
static void RunVehicleDayProc(uint daytick)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
uint i, total = _vehicle_pool.total_items;
|
||||||
VehicleID ctr;
|
|
||||||
uint i;
|
|
||||||
|
|
||||||
ctr = _vehicle_id_ctr_day;
|
for (i = daytick; i < total; i += DAY_TICKS) {
|
||||||
|
Vehicle *v = GetVehicle(i);
|
||||||
/* If the CTR is already over the size of the pool, don't even run the for-loop */
|
|
||||||
if (ctr >= GetVehiclePoolSize()) {
|
|
||||||
_vehicle_id_ctr_day += amount;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < amount; i++, ctr++) {
|
|
||||||
/* Skip non-existing vehicles */
|
|
||||||
if (ctr >= GetVehiclePoolSize()) {
|
|
||||||
_vehicle_id_ctr_day += amount;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
v = GetVehicle(ctr);
|
|
||||||
if (v->type != 0)
|
if (v->type != 0)
|
||||||
_on_new_vehicle_day_proc[v->type - 0x10](v);
|
_on_new_vehicle_day_proc[v->type - 0x10](v);
|
||||||
}
|
}
|
||||||
|
|
||||||
_vehicle_id_ctr_day = ctr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IncreaseDate(void)
|
void IncreaseDate(void)
|
||||||
{
|
{
|
||||||
uint32 total_vehicles = (1 << _vehicle_pool.block_size_bits) * _vehicle_pool.max_blocks;
|
|
||||||
YearMonthDay ymd;
|
YearMonthDay ymd;
|
||||||
|
|
||||||
if (_game_mode == GM_MENU) {
|
if (_game_mode == GM_MENU) {
|
||||||
@ -526,7 +506,7 @@ void IncreaseDate(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RunVehicleDayProc(total_vehicles / DAY_TICKS);
|
RunVehicleDayProc(_date_fract);
|
||||||
|
|
||||||
/* increase day, and check if a new day is there? */
|
/* increase day, and check if a new day is there? */
|
||||||
_tick_counter++;
|
_tick_counter++;
|
||||||
@ -539,13 +519,6 @@ void IncreaseDate(void)
|
|||||||
/* yeah, increse day counter and call various daily loops */
|
/* yeah, increse day counter and call various daily loops */
|
||||||
_date++;
|
_date++;
|
||||||
|
|
||||||
/* We have a hole because of rounding errors, between the last vehicle checked and the max amount
|
|
||||||
* of vehicles.. correct for that problem here */
|
|
||||||
RunVehicleDayProc(total_vehicles - _vehicle_id_ctr_day);
|
|
||||||
|
|
||||||
assert(_vehicle_id_ctr_day == total_vehicles);
|
|
||||||
_vehicle_id_ctr_day = 0;
|
|
||||||
|
|
||||||
TextMessageDailyLoop();
|
TextMessageDailyLoop();
|
||||||
|
|
||||||
DisasterDailyLoop();
|
DisasterDailyLoop();
|
||||||
|
@ -422,8 +422,6 @@ static void FixOldVehicles(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_vehicle_id_ctr_day = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -62,7 +62,7 @@ VARDEF uint16 _date_fract;
|
|||||||
// Amount of game ticks
|
// Amount of game ticks
|
||||||
VARDEF uint16 _tick_counter;
|
VARDEF uint16 _tick_counter;
|
||||||
|
|
||||||
// Used when calling OnNewDay
|
// This one is not used anymore.
|
||||||
VARDEF VehicleID _vehicle_id_ctr_day;
|
VARDEF VehicleID _vehicle_id_ctr_day;
|
||||||
|
|
||||||
// Skip aging of cargo?
|
// Skip aging of cargo?
|
||||||
|
Loading…
Reference in New Issue
Block a user