mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
Add SetMainView to WindowManager
This commit is contained in:
@@ -18,7 +18,9 @@
|
||||
#include <openrct2-ui/windows/Window.h>
|
||||
#include <openrct2/core/Console.hpp>
|
||||
#include <openrct2/config/Config.h>
|
||||
#include <openrct2/interface/Viewport.h>
|
||||
#include <openrct2/Input.h>
|
||||
#include <openrct2/world/Sprite.h>
|
||||
#include "input/Input.h"
|
||||
#include "input/KeyboardShortcuts.h"
|
||||
#include "WindowManager.h"
|
||||
@@ -439,6 +441,33 @@ public:
|
||||
keyboard_shortcuts_format_string(buffer, sizeof(buffer), shortcut);
|
||||
return std::string(buffer);
|
||||
}
|
||||
|
||||
void SetMainView(sint32 x, sint32 y, sint32 zoom, sint32 rotation) override
|
||||
{
|
||||
auto mainWindow = window_get_main();
|
||||
if (mainWindow != nullptr)
|
||||
{
|
||||
auto viewport = window_get_viewport(mainWindow);
|
||||
mainWindow->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
mainWindow->saved_view_x = x;
|
||||
mainWindow->saved_view_y = y;
|
||||
viewport->zoom = zoom;
|
||||
gCurrentRotation = rotation;
|
||||
auto zoomDifference = zoom - viewport->zoom;
|
||||
if (zoomDifference != 0)
|
||||
{
|
||||
viewport->view_width <<= zoomDifference;
|
||||
viewport->view_height <<= zoomDifference;
|
||||
}
|
||||
mainWindow->saved_view_x -= viewport->view_width >> 1;
|
||||
mainWindow->saved_view_y -= viewport->view_height >> 1;
|
||||
|
||||
// Make sure the viewport has correct coordinates set.
|
||||
viewport_update_position(mainWindow);
|
||||
|
||||
window_invalidate(mainWindow);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
IWindowManager * OpenRCT2::Ui::CreateWindowManager()
|
||||
|
||||
@@ -40,7 +40,10 @@
|
||||
#include "world/Footpath.h"
|
||||
#include "world/Scenery.h"
|
||||
#include "world/Park.h"
|
||||
#include "interface/Window_internal.h"
|
||||
#include "ui/UiContext.h"
|
||||
#include "ui/WindowManager.h"
|
||||
|
||||
using namespace OpenRCT2;
|
||||
|
||||
namespace Editor
|
||||
{
|
||||
@@ -415,45 +418,18 @@ namespace Editor
|
||||
|
||||
static void FinaliseMainView()
|
||||
{
|
||||
rct_window * w = window_get_main();
|
||||
rct_viewport * viewport = window_get_viewport(w);
|
||||
auto windowManager = GetContext()->GetUiContext()->GetWindowManager();
|
||||
windowManager->SetMainView(gSavedViewX, gSavedViewY, gSavedViewZoom, gSavedViewRotation);
|
||||
|
||||
w->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
w->saved_view_x = gSavedViewX;
|
||||
w->saved_view_y = gSavedViewY;
|
||||
gCurrentRotation = gSavedViewRotation;
|
||||
|
||||
sint32 zoom_difference = gSavedViewZoom - viewport->zoom;
|
||||
viewport->zoom = gSavedViewZoom;
|
||||
if (zoom_difference != 0)
|
||||
{
|
||||
if (zoom_difference >= 0)
|
||||
{
|
||||
viewport->view_width <<= zoom_difference;
|
||||
viewport->view_height <<= zoom_difference;
|
||||
}
|
||||
else
|
||||
{
|
||||
zoom_difference = -zoom_difference;
|
||||
viewport->view_width >>= zoom_difference;
|
||||
viewport->view_height >>= zoom_difference;
|
||||
}
|
||||
}
|
||||
w->saved_view_x -= viewport->view_width >> 1;
|
||||
w->saved_view_y -= viewport->view_height >> 1;
|
||||
|
||||
window_invalidate(w);
|
||||
reset_all_sprite_quadrant_placements();
|
||||
scenery_set_default_placement_configuration();
|
||||
|
||||
auto intent = Intent(INTENT_ACTION_REFRESH_NEW_RIDES);
|
||||
context_broadcast_intent(&intent);
|
||||
windowManager->BroadcastIntent(Intent(INTENT_ACTION_REFRESH_NEW_RIDES));
|
||||
|
||||
gWindowUpdateTicks = 0;
|
||||
load_palette();
|
||||
|
||||
intent = Intent(INTENT_ACTION_CLEAR_TILE_INSPECTOR_CLIPBOARD);
|
||||
context_broadcast_intent(&intent);
|
||||
windowManager->BroadcastIntent(Intent(INTENT_ACTION_CLEAR_TILE_INSPECTOR_CLIPBOARD));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
#include "scenario/Scenario.h"
|
||||
#include "title/TitleScreen.h"
|
||||
#include "title/TitleSequencePlayer.h"
|
||||
#include "ui/UiContext.h"
|
||||
#include "ui/WindowManager.h"
|
||||
#include "util/SawyerCoding.h"
|
||||
#include "util/Util.h"
|
||||
#include "windows/Intent.h"
|
||||
@@ -67,7 +69,6 @@
|
||||
#include "world/Surface.h"
|
||||
#include "world/Water.h"
|
||||
#include "object/ObjectList.h"
|
||||
#include "interface/Window_internal.h"
|
||||
|
||||
#define NUMBER_OF_AUTOSAVES_TO_KEEP 9
|
||||
|
||||
@@ -1136,28 +1137,8 @@ void game_load_init()
|
||||
window_unfollow_sprite(mainWindow);
|
||||
}
|
||||
|
||||
if (mainWindow != nullptr)
|
||||
{
|
||||
rct_viewport * viewport = window_get_viewport(mainWindow);
|
||||
mainWindow->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
mainWindow->saved_view_x = gSavedViewX;
|
||||
mainWindow->saved_view_y = gSavedViewY;
|
||||
uint8 zoomDifference = gSavedViewZoom - viewport->zoom;
|
||||
viewport->zoom = gSavedViewZoom;
|
||||
gCurrentRotation = gSavedViewRotation;
|
||||
if (zoomDifference != 0)
|
||||
{
|
||||
viewport->view_width <<= zoomDifference;
|
||||
viewport->view_height <<= zoomDifference;
|
||||
}
|
||||
mainWindow->saved_view_x -= viewport->view_width >> 1;
|
||||
mainWindow->saved_view_y -= viewport->view_height >> 1;
|
||||
|
||||
// Make sure the viewport has correct coordinates set.
|
||||
viewport_update_position(mainWindow);
|
||||
|
||||
window_invalidate(mainWindow);
|
||||
}
|
||||
auto windowManager = GetContext()->GetUiContext()->GetWindowManager();
|
||||
windowManager->SetMainView(gSavedViewX, gSavedViewY, gSavedViewZoom, gSavedViewRotation);
|
||||
|
||||
if (network_get_mode() != NETWORK_MODE_CLIENT)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace OpenRCT2::Ui
|
||||
void HandleInput() override { }
|
||||
void HandleKeyboard(bool /*isTitle*/) override { }
|
||||
std::string GetKeyboardShortcutString(sint32 /*shortcut*/) override { return std::string(); }
|
||||
void SetMainView(sint32 x, sint32 y, sint32 zoom, sint32 rotation) override { }
|
||||
};
|
||||
|
||||
IWindowManager * CreateDummyWindowManager()
|
||||
|
||||
@@ -42,6 +42,7 @@ namespace OpenRCT2::Ui
|
||||
virtual void HandleInput() abstract;
|
||||
virtual void HandleKeyboard(bool isTitle) abstract;
|
||||
virtual std::string GetKeyboardShortcutString(sint32 shortcut) abstract;
|
||||
virtual void SetMainView(sint32 x, sint32 y, sint32 zoom, sint32 rotation) abstract;
|
||||
};
|
||||
|
||||
IWindowManager * CreateDummyWindowManager();
|
||||
|
||||
Reference in New Issue
Block a user