mirror of https://github.com/OpenRCT2/OpenRCT2.git
refactor ride_get_measurement
This commit is contained in:
parent
19d3852f9c
commit
3ecfee72a2
|
@ -1350,6 +1350,34 @@ void ride_measurements_update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rct_ride_measurement *ride_get_existing_measurement(int rideIndex)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
rct_ride_measurement *measurement;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) {
|
||||||
|
measurement = GET_RIDE_MEASUREMENT(i);
|
||||||
|
if (measurement->ride_index == rideIndex)
|
||||||
|
return measurement;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
rct_ride_measurement *ride_get_free_measurement()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
rct_ride_measurement *measurement;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) {
|
||||||
|
measurement = GET_RIDE_MEASUREMENT(i);
|
||||||
|
if (measurement->ride_index == 255)
|
||||||
|
return measurement;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x006B66D9
|
* rct2: 0x006B66D9
|
||||||
|
@ -1370,45 +1398,37 @@ rct_ride_measurement *ride_get_measurement(int rideIndex, rct_string_id *message
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if a measurement already exists for this ride
|
// Check if a measurement already exists for this ride
|
||||||
for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) {
|
measurement = ride_get_existing_measurement(rideIndex);
|
||||||
measurement = GET_RIDE_MEASUREMENT(i);
|
if (measurement == NULL) {
|
||||||
if (measurement->ride_index == i)
|
// Find a free measurement
|
||||||
goto use_measurement;
|
measurement = ride_get_free_measurement();
|
||||||
}
|
if (measurement == NULL) {
|
||||||
|
// Use last recently used measurement for some other ride
|
||||||
|
lruIndex = 0;
|
||||||
|
lruTicks = 0xFFFFFFFF;
|
||||||
|
for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) {
|
||||||
|
measurement = GET_RIDE_MEASUREMENT(i);
|
||||||
|
|
||||||
// Find a free measurement
|
if (measurement->last_use_tick <= lruTicks) {
|
||||||
for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) {
|
lruTicks = measurement->last_use_tick;
|
||||||
measurement = GET_RIDE_MEASUREMENT(i);
|
lruIndex = i;
|
||||||
if (measurement->ride_index == 255)
|
}
|
||||||
goto new_measurement;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Use last recently used measurement for some other ride
|
i = lruIndex;
|
||||||
lruIndex = 0;
|
measurement = GET_RIDE_MEASUREMENT(i);
|
||||||
lruTicks = 0xFFFFFFFF;
|
ride->measurement_index = 255;
|
||||||
for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) {
|
|
||||||
measurement = GET_RIDE_MEASUREMENT(i);
|
|
||||||
|
|
||||||
if (measurement->last_use_tick <= lruTicks) {
|
|
||||||
lruTicks = measurement->last_use_tick;
|
|
||||||
lruIndex = i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
measurement->ride_index = rideIndex;
|
||||||
|
ride->measurement_index = i;
|
||||||
|
measurement->flags = 0;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x80)
|
||||||
|
measurement->flags |= RIDE_MEASUREMENT_FLAG_G_FORCES;
|
||||||
|
measurement->num_items = 0;
|
||||||
|
measurement->current_item = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = lruIndex;
|
|
||||||
measurement = GET_RIDE_MEASUREMENT(i);
|
|
||||||
ride->measurement_index = 255;
|
|
||||||
|
|
||||||
new_measurement:
|
|
||||||
measurement->ride_index = rideIndex;
|
|
||||||
ride->measurement_index = i;
|
|
||||||
measurement->flags = 0;
|
|
||||||
if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x80)
|
|
||||||
measurement->flags |= RIDE_MEASUREMENT_FLAG_G_FORCES;
|
|
||||||
measurement->num_items = 0;
|
|
||||||
measurement->current_item = 0;
|
|
||||||
|
|
||||||
use_measurement:
|
|
||||||
measurement->last_use_tick = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TICKS, uint32);
|
measurement->last_use_tick = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TICKS, uint32);
|
||||||
if (measurement->flags & 1) {
|
if (measurement->flags & 1) {
|
||||||
if (message != NULL) *message = 0;
|
if (message != NULL) *message = 0;
|
||||||
|
|
Loading…
Reference in New Issue