Merge pull request #1585 from zsilencer/bugfixes

fix #1572
This commit is contained in:
Ted John 2015-07-09 18:34:54 +01:00
commit 21021cb23b
3 changed files with 24 additions and 14 deletions

View File

@ -442,22 +442,11 @@ void viewport_update_position(rct_window *window)
rct_viewport* viewport = window->viewport;
if (!viewport)return;
if (window->viewport_target_sprite != -1){
rct_sprite* sprite = &g_sprite_list[window->viewport_target_sprite];
int height = (map_element_height(0xFFFF & sprite->unknown.x, 0xFFFF & sprite->unknown.y) & 0xFFFF) - 16;
int underground = sprite->unknown.z < height;
viewport_set_underground_flag(underground, window, viewport);
int center_x, center_y;
center_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, &center_x, &center_y, window->viewport);
sub_6E7DE1(center_x, center_y, window, viewport);
if (window->viewport_target_sprite != -1) {
viewport_update_sprite_follow(window);
return;
}
sint16 x = viewport->view_width / 2 + window->saved_view_x;
sint16 y = viewport->view_height / 2 + window->saved_view_y;
sint16 z;
@ -547,6 +536,23 @@ void viewport_update_position(rct_window *window)
sub_6E7DE1(x, y, window, viewport);
}
void viewport_update_sprite_follow(rct_window *window)
{
if (window->viewport_target_sprite != -1 && window->viewport){
rct_sprite* sprite = &g_sprite_list[window->viewport_target_sprite];
int height = (map_element_height(0xFFFF & sprite->unknown.x, 0xFFFF & sprite->unknown.y) & 0xFFFF) - 16;
int underground = sprite->unknown.z < height;
viewport_set_underground_flag(underground, window, window->viewport);
int center_x, center_y;
center_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, &center_x, &center_y, window->viewport);
sub_6E7DE1(center_x, center_y, window, window->viewport);
}
}
/**
*
* rct2: 0x00685C02

View File

@ -96,6 +96,7 @@ void center_2d_coordinates(int x, int y, int z, int* out_x, int* out_y, rct_view
void viewport_create(rct_window *w, int x, int y, int width, int height, int zoom, int center_x, int center_y, int center_z, char flags, sint16 sprite);
void viewport_update_pointers();
void viewport_update_position(rct_window *window);
void viewport_update_sprite_follow(rct_window *window);
void viewport_render(rct_drawpixelinfo *dpi, rct_viewport *viewport, 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);

View File

@ -27,6 +27,7 @@
#include "game.h"
#include "hook.h"
#include "interface/window.h"
#include "interface/viewport.h"
#include "localisation/localisation.h"
#include "network/http.h"
#include "openrct2.h"
@ -326,7 +327,9 @@ static void openrct2_loop()
}
// Viewports need to be updated to reduce chopiness of those which follow sprites
window_update_all_viewports();
for (rct_window *w = g_window_list; w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++) {
viewport_update_sprite_follow(w);
}
platform_process_messages();
rct2_draw();