mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #641 from adrian17/viewport_fix
Fix for sub_6E7F34 in viewport.c
This commit is contained in:
commit
d062e7d31e
|
@ -298,13 +298,13 @@ void sub_689174(sint16* x, sint16* y, sint16 *z, uint8 curr_rotation){
|
||||||
//
|
//
|
||||||
//}
|
//}
|
||||||
|
|
||||||
void sub_6E7F34(rct_window* w, rct_viewport* viewport){
|
void sub_6E7F34(rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff){
|
||||||
//RCT2_CALLPROC_X(0x6E7F34, 0, 0, 0, 0, (int)viewport, (int)w, 0);
|
//RCT2_CALLPROC_X(0x6E7F34, 0, 0, 0, x_diff, (int)viewport, (int)w, y_diff);
|
||||||
rct_window* orignal_w = w;
|
rct_window* orignal_w = w;
|
||||||
int left = 0, right = 0, top = 0, bottom = 0;
|
int left = 0, right = 0, top = 0, bottom = 0;
|
||||||
|
|
||||||
for (; w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++){
|
for (; w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++){
|
||||||
if (!w->flags&WF_TRANSPARENT) continue;
|
if (!(w->flags & WF_TRANSPARENT)) continue;
|
||||||
if (w->viewport == viewport) continue;
|
if (w->viewport == viewport) continue;
|
||||||
|
|
||||||
if (viewport->x + viewport->width <= w->x)continue;
|
if (viewport->x + viewport->width <= w->x)continue;
|
||||||
|
@ -318,11 +318,11 @@ void sub_6E7F34(rct_window* w, rct_viewport* viewport){
|
||||||
top = w->y;
|
top = w->y;
|
||||||
bottom = w->y + w->height;
|
bottom = w->y + w->height;
|
||||||
|
|
||||||
if (left >= viewport->x)left = viewport->x;
|
if (left < viewport->x)left = viewport->x;
|
||||||
if (right >= viewport->x + viewport->width) right = viewport->x + viewport->width;
|
if (right > viewport->x + viewport->width) right = viewport->x + viewport->width;
|
||||||
|
|
||||||
if (top >= viewport->y)top = viewport->y;
|
if (top < viewport->y)top = viewport->y;
|
||||||
if (bottom >= viewport->y + viewport->height) bottom = viewport->y + viewport->height;
|
if (bottom > viewport->y + viewport->height) bottom = viewport->y + viewport->height;
|
||||||
|
|
||||||
if (left >= right) continue;
|
if (left >= right) continue;
|
||||||
if (top >= bottom) continue;
|
if (top >= bottom) continue;
|
||||||
|
@ -331,22 +331,22 @@ void sub_6E7F34(rct_window* w, rct_viewport* viewport){
|
||||||
}
|
}
|
||||||
|
|
||||||
w = orignal_w;
|
w = orignal_w;
|
||||||
RCT2_CALLPROC_X(0x6E7FF3, 0, 0, 0, right, (int)viewport, (int)w, bottom);
|
RCT2_CALLPROC_X(0x6E7FF3, 0, 0, 0, x_diff, (int)viewport, (int)w, y_diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* There is a bug in this. */
|
|
||||||
void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){
|
void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){
|
||||||
//RCT2_CALLPROC_X(0x6E7DE1, x, y, 0, 0, w, viewport, 0);
|
//RCT2_CALLPROC_X(0x6E7DE1, x, y, 0, 0, w, viewport, 0);
|
||||||
//return;
|
//return;
|
||||||
uint8 zoom = (1 << viewport->zoom);
|
uint8 zoom = (1 << viewport->zoom);
|
||||||
|
|
||||||
sint16 previous_x = viewport->view_x / zoom;
|
sint16 x_diff = (viewport->view_x - x) / zoom;
|
||||||
sint16 previous_y = viewport->view_y / zoom;
|
sint16 y_diff = (viewport->view_y - y) / zoom;
|
||||||
|
|
||||||
viewport->view_x = x;
|
viewport->view_x = x;
|
||||||
viewport->view_y = y;
|
viewport->view_y = y;
|
||||||
|
|
||||||
if (((x / zoom) == previous_x) && ((y / zoom) == previous_y)) return;
|
// If no change in viewing area
|
||||||
|
if ((!x_diff) && (!y_diff))return;
|
||||||
|
|
||||||
if (w->flags & WF_7){
|
if (w->flags & WF_7){
|
||||||
int left = max(viewport->x, 0);
|
int left = max(viewport->x, 0);
|
||||||
|
@ -400,8 +400,8 @@ void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//sub_6E7F34(w, viewport);
|
sub_6E7F34(w, viewport, x_diff, y_diff);
|
||||||
//RCT2_CALLPROC_X(0x6E7F34, 0, 0, 0, 0, (int)viewport, (int)w, 0);
|
//RCT2_CALLPROC_X(0x6E7F34, 0, 0, 0, x_diff, (int)viewport, (int)w, y_diff);
|
||||||
|
|
||||||
memcpy(viewport, &view_copy, sizeof(rct_viewport));
|
memcpy(viewport, &view_copy, sizeof(rct_viewport));
|
||||||
}
|
}
|
||||||
|
@ -430,8 +430,8 @@ void viewport_update_position(rct_window *window)
|
||||||
int center_x, center_y;
|
int center_x, center_y;
|
||||||
center_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, ¢er_x, ¢er_y, window->viewport);
|
center_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, ¢er_x, ¢er_y, window->viewport);
|
||||||
|
|
||||||
//sub_6E7DE1(center_x, center_y, window, viewport);
|
sub_6E7DE1(center_x, center_y, window, viewport);
|
||||||
RCT2_CALLPROC_X(0x6E7DE1, center_x, center_y, 0, 0, (int)window, (int)viewport, 0);
|
//RCT2_CALLPROC_X(0x6E7DE1, center_x, center_y, 0, 0, (int)window, (int)viewport, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,8 +523,8 @@ void viewport_update_position(rct_window *window)
|
||||||
y += viewport->view_y;
|
y += viewport->view_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
//sub_6E7DE1(x, y, window, viewport);
|
sub_6E7DE1(x, y, window, viewport);
|
||||||
RCT2_CALLPROC_X(0x6E7DE1, x, y, 0, 0, (int)window, (int)viewport, 0);
|
//RCT2_CALLPROC_X(0x6E7DE1, x, y, 0, 0, (int)window, (int)viewport, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void viewport_paint(rct_viewport* viewport, rct_drawpixelinfo* dpi, int left, int top, int right, int bottom);
|
void viewport_paint(rct_viewport* viewport, rct_drawpixelinfo* dpi, int left, int top, int right, int bottom);
|
||||||
|
|
Loading…
Reference in New Issue