Mercurial > hg > openttd
changeset 2090:d5376deacf44 draft
(svn r2600) Fix: [vehicles] Fix problem with vehicle loop not distributing the calls evenly over the day.
author | ludde <ludde@openttd.org> |
---|---|
date | Sun, 17 Jul 2005 12:44:35 +0000 |
parents | 3452d9a81bd8 |
children | 98dd255a204e |
files | misc.c oldloader.c variables.h vehicle.c |
diffstat | 4 files changed, 7 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/misc.c +++ b/misc.c @@ -138,7 +138,6 @@ _tick_counter = 0; _date_fract = 0; _cur_tileloop_tile = 0; - _vehicle_id_ctr_day = 0; { uint starting = ConvertIntDate(_patches.starting_date); @@ -485,40 +484,21 @@ }; /** - * 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; - VehicleID ctr; - uint i; - - ctr = _vehicle_id_ctr_day; + uint i, total = _vehicle_pool.total_items; - /* 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); + for (i = daytick; i < total; i += DAY_TICKS) { + Vehicle *v = GetVehicle(i); if (v->type != 0) _on_new_vehicle_day_proc[v->type - 0x10](v); } - - _vehicle_id_ctr_day = ctr; } void IncreaseDate(void) { - uint32 total_vehicles = (1 << _vehicle_pool.block_size_bits) * _vehicle_pool.max_blocks; YearMonthDay ymd; if (_game_mode == GM_MENU) { @@ -526,7 +506,7 @@ return; } - RunVehicleDayProc(total_vehicles / DAY_TICKS); + RunVehicleDayProc(_date_fract); /* increase day, and check if a new day is there? */ _tick_counter++; @@ -539,13 +519,6 @@ /* yeah, increse day counter and call various daily loops */ _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(); DisasterDailyLoop();