mirror of https://github.com/OpenRCT2/OpenRCT2.git
commit
21021cb23b
|
@ -443,21 +443,10 @@ void viewport_update_position(rct_window *window)
|
|||
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, ¢er_x, ¢er_y, window->viewport);
|
||||
|
||||
sub_6E7DE1(center_x, center_y, window, viewport);
|
||||
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, ¢er_x, ¢er_y, window->viewport);
|
||||
|
||||
sub_6E7DE1(center_x, center_y, window, window->viewport);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x00685C02
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue