diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index 440441b90c..0ff4920417 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -64,7 +64,8 @@ endif () # Includes target_include_directories(${PROJECT} PRIVATE "${CMAKE_CURRENT_LIST_DIR}/.." ${SPEEX_INCLUDE_DIRS}) -target_include_directories(${PROJECT} SYSTEM PRIVATE ${SDL2_INCLUDE_DIRS}) +target_include_directories(${PROJECT} SYSTEM PRIVATE ${SDL2_INCLUDE_DIRS} + "${CMAKE_CURRENT_LIST_DIR}/../openrct2/thirdparty") # Compiler flags if (WIN32) diff --git a/src/openrct2-ui/UiContext.cpp b/src/openrct2-ui/UiContext.cpp index 88c15d495d..1f75eac344 100644 --- a/src/openrct2-ui/UiContext.cpp +++ b/src/openrct2-ui/UiContext.cpp @@ -17,6 +17,7 @@ #include "input/KeyboardShortcuts.h" #include "interface/InGameConsole.h" #include "interface/Theme.h" +#include "scripting/UiExtensions.h" #include "title/TitleSequencePlayer.h" #include @@ -38,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +48,7 @@ using namespace OpenRCT2; using namespace OpenRCT2::Drawing; using namespace OpenRCT2::Input; +using namespace OpenRCT2::Scripting; using namespace OpenRCT2::Ui; #ifdef __MACOSX__ @@ -115,6 +118,12 @@ public: delete _platformUiContext; } + void Initialise() override + { + auto& scriptEngine = GetContext()->GetScriptEngine(); + UiScriptExtensions::Extend(scriptEngine); + } + void Update() override { _inGameConsole.Update(); diff --git a/src/openrct2/scripting/ScUi.hpp b/src/openrct2-ui/scripting/ScUi.hpp similarity index 57% rename from src/openrct2/scripting/ScUi.hpp rename to src/openrct2-ui/scripting/ScUi.hpp index a503f619e6..f3dea76ee1 100644 --- a/src/openrct2/scripting/ScUi.hpp +++ b/src/openrct2-ui/scripting/ScUi.hpp @@ -5,62 +5,10 @@ #include #include "../common.h" #include "../Context.h" -#include "../interface/Window.h" -#include "../interface/Window_internal.h" -#include "../ui/UiContext.h" -#include "../ui/WindowManager.h" +#include "ScWindow.hpp" namespace OpenRCT2::Scripting { - class ScWindow - { - private: - rct_windowclass _class; - rct_windownumber _number; - - public: - ScWindow(rct_windowclass c, rct_windownumber n) - : _class(c), - _number(n) - { - } - - sint32 x_get() { return GetWindow()->x; } - void x_set(sint32 value) - { - auto w = GetWindow(); - window_set_position(w, value, w->y); - } - sint32 y_get() { return GetWindow()->y; } - void y_set(sint32 value) - { - auto w = GetWindow(); - window_set_position(w, w->x, value); - } - sint32 width_get() { return GetWindow()->width; } - sint32 height_get() { return GetWindow()->height; } - bool isSticky_get() - { - auto flags = GetWindow()->flags; - return (flags & (WF_STICK_TO_BACK | WF_STICK_TO_FRONT)) != 0; - } - - static void Register(duk_context * ctx) - { - dukglue_register_property(ctx, &ScWindow::x_get, &ScWindow::x_set, "x"); - dukglue_register_property(ctx, &ScWindow::y_get, &ScWindow::y_set, "y"); - dukglue_register_property(ctx, &ScWindow::width_get, nullptr, "width"); - dukglue_register_property(ctx, &ScWindow::height_get, nullptr, "height"); - dukglue_register_property(ctx, &ScWindow::isSticky_get, nullptr, "isSticky"); - } - - private: - rct_window * GetWindow() const - { - return window_find_by_number(_class, _number); - } - }; - class ScUi { public: diff --git a/src/openrct2-ui/scripting/ScWindow.hpp b/src/openrct2-ui/scripting/ScWindow.hpp new file mode 100644 index 0000000000..40493029a0 --- /dev/null +++ b/src/openrct2-ui/scripting/ScWindow.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include +#include "../common.h" +#include "../interface/Window.h" +#include "../interface/Window_internal.h" + +namespace OpenRCT2::Scripting +{ + class ScWindow + { + private: + rct_windowclass _class; + rct_windownumber _number; + + public: + ScWindow(rct_windowclass c, rct_windownumber n) + : _class(c), + _number(n) + { + } + + sint32 x_get() { return GetWindow()->x; } + void x_set(sint32 value) + { + auto w = GetWindow(); + window_set_position(w, value, w->y); + } + sint32 y_get() { return GetWindow()->y; } + void y_set(sint32 value) + { + auto w = GetWindow(); + window_set_position(w, w->x, value); + } + sint32 width_get() { return GetWindow()->width; } + sint32 height_get() { return GetWindow()->height; } + bool isSticky_get() + { + auto flags = GetWindow()->flags; + return (flags & (WF_STICK_TO_BACK | WF_STICK_TO_FRONT)) != 0; + } + + static void Register(duk_context * ctx) + { + dukglue_register_property(ctx, &ScWindow::x_get, &ScWindow::x_set, "x"); + dukglue_register_property(ctx, &ScWindow::y_get, &ScWindow::y_set, "y"); + dukglue_register_property(ctx, &ScWindow::width_get, nullptr, "width"); + dukglue_register_property(ctx, &ScWindow::height_get, nullptr, "height"); + dukglue_register_property(ctx, &ScWindow::isSticky_get, nullptr, "isSticky"); + } + + private: + rct_window * GetWindow() const + { + return window_find_by_number(_class, _number); + } + }; +} diff --git a/src/openrct2-ui/scripting/UiExtensions.cpp b/src/openrct2-ui/scripting/UiExtensions.cpp new file mode 100644 index 0000000000..78e8ee318f --- /dev/null +++ b/src/openrct2-ui/scripting/UiExtensions.cpp @@ -0,0 +1,16 @@ +#include +#include "UiExtensions.h" +#include "ScUi.hpp" +#include "ScWindow.hpp" + +using namespace OpenRCT2::Scripting; + +void UiScriptExtensions::Extend(ScriptEngine& scriptEngine) +{ + auto ctx = scriptEngine.GetContext(); + + dukglue_register_global(ctx, std::make_shared(), "ui"); + + ScUi::Register(ctx); + ScWindow::Register(ctx); +} diff --git a/src/openrct2-ui/scripting/UiExtensions.h b/src/openrct2-ui/scripting/UiExtensions.h new file mode 100644 index 0000000000..08b05edd41 --- /dev/null +++ b/src/openrct2-ui/scripting/UiExtensions.h @@ -0,0 +1,12 @@ +#pragma once + +namespace OpenRCT2::Scripting +{ + class ScriptEngine; + + class UiScriptExtensions + { + public: + static void Extend(ScriptEngine& scriptEngine); + }; +} diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 63597337a9..9e32f46d35 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -464,6 +464,7 @@ namespace OpenRCT2 _gameState->InitAll(150); _titleScreen = std::make_unique(*_gameState); + _uiContext->Initialise(); return true; } diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index ed86d8576e..82ba255bf3 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -25,7 +25,6 @@ #include "ScPark.hpp" #include "ScTile.hpp" #include "ScThing.hpp" -#include "ScUi.hpp" using namespace OpenRCT2; using namespace OpenRCT2::Scripting; @@ -64,14 +63,11 @@ void ScriptEngine::Initialise() ScTile::Register(ctx); ScTileElement::Register(ctx); ScThing::Register(ctx); - ScUi::Register(ctx); - ScWindow::Register(ctx); dukglue_register_global(ctx, std::make_shared(_console), "console"); dukglue_register_global(ctx, std::make_shared(_execInfo, _hookEngine), "context"); dukglue_register_global(ctx, std::make_shared(ctx), "map"); dukglue_register_global(ctx, std::make_shared(), "park"); - dukglue_register_global(ctx, std::make_shared(), "ui"); LoadPlugins(); StartPlugins(); diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index 8d2f7b36a5..59457515d1 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -92,6 +92,7 @@ namespace OpenRCT2::Scripting ScriptEngine(InteractiveConsole& console, IPlatformEnvironment& env); ScriptEngine(ScriptEngine&) = delete; + duk_context * GetContext() { return _context; } HookEngine& GetHookEngine() { return _hookEngine; } void Update(); diff --git a/src/openrct2/ui/DummyUiContext.cpp b/src/openrct2/ui/DummyUiContext.cpp index b81d478557..ceaa7669c0 100644 --- a/src/openrct2/ui/DummyUiContext.cpp +++ b/src/openrct2/ui/DummyUiContext.cpp @@ -24,6 +24,9 @@ namespace OpenRCT2::Ui IWindowManager* const _windowManager = CreateDummyWindowManager(); public: + void Initialise() override + { + } void Update() override { } diff --git a/src/openrct2/ui/UiContext.h b/src/openrct2/ui/UiContext.h index bcf8290421..4be9911130 100644 --- a/src/openrct2/ui/UiContext.h +++ b/src/openrct2/ui/UiContext.h @@ -91,6 +91,7 @@ namespace OpenRCT2 { virtual ~IUiContext() = default; + virtual void Initialise() abstract; virtual void Update() abstract; virtual void Draw(rct_drawpixelinfo * dpi) abstract;