summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
authorludde <ludde@openttd.org>2005-07-17 12:44:35 +0000
committerludde <ludde@openttd.org>2005-07-17 12:44:35 +0000
commitb76a0b81585415b36be3f5bf3285b6743a56e895 (patch)
tree531911ab716d5b2514cdcd4e60232832561b94cc /misc.c
parent718307ffa495349cd9d70e6a8b2a0909350f5b9e (diff)
downloadopenttd-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.c39
1 files changed, 6 insertions, 33 deletions
diff --git a/misc.c b/misc.c
index 0601de81d..4fdd7740f 100644
--- a/misc.c
+++ b/misc.c
@@ -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();