From 443e17c8fcf1ec861ff84d2360a105922359738e Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 10 Jan 2017 19:27:49 +0000 Subject: [PATCH] Force rating update on each ride before testing --- src/openrct2/ride/ride_ratings.c | 25 +++++++++++++++++++++++++ src/openrct2/ride/ride_ratings.h | 1 + test/tests/RideRatings.cpp | 2 ++ 3 files changed, 28 insertions(+) diff --git a/src/openrct2/ride/ride_ratings.c b/src/openrct2/ride/ride_ratings.c index 0487394d88..365112b1a1 100644 --- a/src/openrct2/ride/ride_ratings.c +++ b/src/openrct2/ride/ride_ratings.c @@ -68,6 +68,7 @@ rct_ride_rating_calc_data gRideRatingsCalcData; static const ride_ratings_calculation ride_ratings_calculate_func_table[RIDE_TYPE_COUNT]; +static void ride_ratings_update_state(); static void ride_ratings_update_state_0(); static void ride_ratings_update_state_1(); static void ride_ratings_update_state_2(); @@ -79,6 +80,25 @@ static void ride_ratings_calculate(rct_ride *ride); static void ride_ratings_calculate_value(rct_ride *ride); static void ride_ratings_score_close_proximity(rct_map_element *mapElement); +/** + * This is a small hack function to keep calling the ride rating processor until + * the given ride's ratings have been calculated. What ever is currently being + * processed will be overwritten. + * Only purpose of this function currently is for testing. + */ +void ride_ratings_update_ride(int rideIndex) +{ + rct_ride *ride = get_ride(rideIndex); + if (ride->type != RIDE_TYPE_NULL && ride->status != RIDE_STATUS_CLOSED) { + gRideRatingsCalcData.current_ride = rideIndex; + gRideRatingsCalcData.state = RIDE_RATINGS_STATE_INITIALISE; + while (gRideRatingsCalcData.state != RIDE_RATINGS_STATE_FIND_NEXT_RIDE) + { + ride_ratings_update_state(); + } + } +} + /** * * rct2: 0x006B5A2A @@ -88,6 +108,11 @@ void ride_ratings_update_all() if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) return; + ride_ratings_update_state(); +} + +static void ride_ratings_update_state() +{ switch (gRideRatingsCalcData.state) { case RIDE_RATINGS_STATE_FIND_NEXT_RIDE: ride_ratings_update_state_0(); diff --git a/src/openrct2/ride/ride_ratings.h b/src/openrct2/ride/ride_ratings.h index fdb6afe403..88969d3cde 100644 --- a/src/openrct2/ride/ride_ratings.h +++ b/src/openrct2/ride/ride_ratings.h @@ -44,6 +44,7 @@ typedef struct rct_ride_rating_calc_data { extern rct_ride_rating_calc_data gRideRatingsCalcData; +void ride_ratings_update_ride(int rideIndex); void ride_ratings_update_all(); #endif diff --git a/test/tests/RideRatings.cpp b/test/tests/RideRatings.cpp index 358d7be382..5f31ef1438 100644 --- a/test/tests/RideRatings.cpp +++ b/test/tests/RideRatings.cpp @@ -36,6 +36,8 @@ TEST_F(RideRatings, all) rct_ride * ride = get_ride(rideId); if (ride->type != RIDE_TYPE_NULL) { + ride_ratings_update_ride(rideId); + rating_tuple ratings = ride->ratings; std::string actual = String::StdFormat("Ride type: %d, Ratings: %d, %d, %d", (int)ride->type,