mirror of https://github.com/OpenRCT2/OpenRCT2.git
add sorting and click to ride list window
This commit is contained in:
parent
4fa79e29f6
commit
c28c1eae47
|
@ -33,7 +33,7 @@ typedef struct {
|
|||
uint8 pad_005[0x44];
|
||||
uint8 status; // 0x049
|
||||
uint16 var_04A;
|
||||
uint32 pad_04C;
|
||||
uint32 var_04C;
|
||||
uint16 var_050; // 0x050
|
||||
uint8 pad_052[0x18];
|
||||
uint16 var_06A[4]; // probably entrance map coordinates
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include "addresses.h"
|
||||
#include "ride.h"
|
||||
#include "strings.h"
|
||||
|
@ -70,6 +71,8 @@ static void window_ride_list_mousedown();
|
|||
static void window_ride_list_dropdown();
|
||||
static void window_ride_list_update();
|
||||
static void window_ride_list_scrollgetsize();
|
||||
static void window_ride_list_scrollmousedown();
|
||||
static void window_ride_list_scrollmouseover();
|
||||
static void window_ride_list_tooltip();
|
||||
static void window_ride_list_invalidate();
|
||||
static void window_ride_list_paint();
|
||||
|
@ -92,9 +95,9 @@ static uint32 window_ride_list_events[] = {
|
|||
window_ride_list_emptysub,
|
||||
window_ride_list_emptysub,
|
||||
window_ride_list_scrollgetsize,
|
||||
window_ride_list_scrollmousedown,
|
||||
window_ride_list_emptysub,
|
||||
window_ride_list_emptysub,
|
||||
window_ride_list_emptysub,
|
||||
window_ride_list_scrollmouseover,
|
||||
window_ride_list_emptysub,
|
||||
window_ride_list_emptysub,
|
||||
window_ride_list_emptysub,
|
||||
|
@ -337,6 +340,48 @@ static void window_ride_list_scrollgetsize()
|
|||
__asm mov edx, height
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B361F
|
||||
*/
|
||||
static void window_ride_list_scrollmousedown()
|
||||
{
|
||||
int index;
|
||||
short y;
|
||||
rct_window *w;
|
||||
|
||||
__asm mov y, dx
|
||||
__asm mov w, esi
|
||||
|
||||
index = y / 10;
|
||||
if (index >= w->var_476)
|
||||
return;
|
||||
|
||||
// Open ride window
|
||||
RCT2_CALLPROC_X(0x006ACC28, w->var_076[index], 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B35EF
|
||||
*/
|
||||
static void window_ride_list_scrollmouseover()
|
||||
{
|
||||
int index;
|
||||
short y;
|
||||
rct_window *w;
|
||||
|
||||
__asm mov y, dx
|
||||
__asm mov w, esi
|
||||
|
||||
index = y / 10;
|
||||
if (index >= w->var_476)
|
||||
return;
|
||||
|
||||
w->var_47A = index;
|
||||
window_invalidate(w);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B3861
|
||||
|
@ -427,14 +472,21 @@ static void window_ride_list_scrollpaint()
|
|||
y = 0;
|
||||
for (i = 0; i < w->var_476; i++) {
|
||||
format = 1191;
|
||||
|
||||
// Background highlight
|
||||
if (i == w->var_47A) {
|
||||
gfx_fill_rect(dpi, 0, y, 800, y + 9, 0x02000031);
|
||||
format = 1193;
|
||||
}
|
||||
formatSecondary = 0;
|
||||
|
||||
|
||||
// Get ride
|
||||
ride = &RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[i]];
|
||||
|
||||
// Ride name
|
||||
gfx_draw_string_left_clipped(dpi, format, &ride->var_04A, 0, 0, y - 1, 159);
|
||||
|
||||
// Ride information
|
||||
formatSecondary = 0;
|
||||
switch (_window_ride_list_information_type) {
|
||||
case INFORMATION_TYPE_STATUS:
|
||||
ride_get_status(i, &formatSecondary, &argument);
|
||||
|
@ -539,8 +591,9 @@ static void window_ride_list_draw_tab_images(rct_drawpixelinfo *dpi, rct_window
|
|||
*/
|
||||
static void window_ride_list_refresh_list(rct_window *w)
|
||||
{
|
||||
int i, j, countA, countB;
|
||||
rct_ride *ride;
|
||||
int i, j, k, countA, countB;
|
||||
sint16 swapper;
|
||||
rct_ride *ride, *otherRide;
|
||||
|
||||
countA = countB = 0;
|
||||
for (i = 0; i < MAX_RIDES; i++) {
|
||||
|
@ -573,8 +626,111 @@ static void window_ride_list_refresh_list(rct_window *w)
|
|||
continue;
|
||||
|
||||
w->var_076[j] = i;
|
||||
k = j;
|
||||
switch (w->var_490) {
|
||||
case INFORMATION_TYPE_STATUS:
|
||||
RCT2_GLOBAL(0x013CE952, uint32) = ride->var_04C;
|
||||
RCT2_CALLPROC_X(0x006C2538, ride->var_04A, 0, 0x013CE952, 0, 0, 0x0141ED68, 0);
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
RCT2_GLOBAL(0x013CE952, uint32) = otherRide->var_04C;
|
||||
RCT2_CALLPROC_X(0x006C2538, otherRide->var_04A, 0, 0x013CE952, 0, 0, 0x0141EF68, 0);
|
||||
if (strcmp(0x0141ED68, 0x0141EF68) >= 0)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_POPULARITY:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if ((ride->var_158 * 4) & 0xFF <= (otherRide->var_158 * 4) & 0xFF)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_SATISFACTION:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if ((ride->var_14A * 5) & 0xFF <= (otherRide->var_14A * 5) & 0xFF)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_PROFIT:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if (ride->profit <= otherRide->profit)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_QUEUE_LENGTH:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if (ride_get_total_queue_length(ride) <= ride_get_total_queue_length(otherRide))
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_QUEUE_TIME:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if (ride_get_max_queue_time(ride) <= ride_get_max_queue_time(otherRide))
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_RELIABILITY:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if (ride->var_196 >> 8 <= otherRide->var_196 >> 8)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_DOWN_TIME:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if (ride->var_199 <= otherRide->var_199)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
case INFORMATION_TYPE_GUESTS_FAVOURITE:
|
||||
while (--k >= 0) {
|
||||
otherRide = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[w->var_076[k]]);
|
||||
if (ride->guests_favourite <= otherRide->guests_favourite)
|
||||
break;
|
||||
|
||||
swapper = w->var_076[k];
|
||||
w->var_076[k] = w->var_076[k + 1];
|
||||
w->var_076[k + 1] = swapper;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
j++;
|
||||
|
|
Loading…
Reference in New Issue