(svn r2600) Fix: [vehicles] Fix problem with vehicle loop not distributing the calls evenly over the day.

This commit is contained in:
ludde 2005-07-17 12:44:35 +00:00
parent 718307ffa4
commit b76a0b8158
4 changed files with 7 additions and 39 deletions

39
misc.c
View File

@ -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();

View File

@ -422,8 +422,6 @@ static void FixOldVehicles(void)
} }
} }
} }
_vehicle_id_ctr_day = 0;
} }
/* /*

View File

@ -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?

View File

@ -2149,9 +2149,6 @@ static void Load_VEHS(void)
} }
} }
} }
if (_sl.full_version < 0x0B01)
_vehicle_id_ctr_day = 0;
} }
const ChunkHandler _veh_chunk_handlers[] = { const ChunkHandler _veh_chunk_handlers[] = {