diff options
author | ludde <ludde@openttd.org> | 2005-07-17 12:44:35 +0000 |
---|---|---|
committer | ludde <ludde@openttd.org> | 2005-07-17 12:44:35 +0000 |
commit | b76a0b81585415b36be3f5bf3285b6743a56e895 (patch) | |
tree | 531911ab716d5b2514cdcd4e60232832561b94cc /misc.c | |
parent | 718307ffa495349cd9d70e6a8b2a0909350f5b9e (diff) | |
download | openttd-b76a0b81585415b36be3f5bf3285b6743a56e895.tar.xz |
(svn r2600) Fix: [vehicles] Fix problem with vehicle loop not distributing the calls evenly over the day.
Diffstat (limited to 'misc.c')
-rw-r--r-- | misc.c | 39 |
1 files changed, 6 insertions, 33 deletions
@@ -138,7 +138,6 @@ void InitializeGame(uint size_x, uint size_y) _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 @@ 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; - VehicleID ctr; - uint i; - - ctr = _vehicle_id_ctr_day; - - /* 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; - } + uint i, total = _vehicle_pool.total_items; - 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 @@ void IncreaseDate(void) 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 @@ void IncreaseDate(void) /* 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(); |