diff --git a/res/project_script.lua b/res/project_script.lua
index 5f28c300..0da3b54d 100644
--- a/res/project_script.lua
+++ b/res/project_script.lua
@@ -1,13 +1,13 @@
local menubg
-function on_screen_changed(screen)
- if screen ~= "menu" then
- if menubg then
- menubg:destruct()
- menubg = nil
- end
- return
+local function clear_menu()
+ if menubg then
+ menubg:destruct()
+ menubg = nil
end
+end
+
+local function configure_menu()
local controller = {}
function controller.resize_menu_bg()
local w, h = unpack(gui.get_viewport())
@@ -19,8 +19,16 @@ function on_screen_changed(screen)
end
_GUI_ROOT.root:add(
"", controller)
+ "z-index='-1' interactive='true'/>", controller)
menubg = _GUI_ROOT.menubg
controller.resize_menu_bg()
menu.page = "main"
end
+
+function on_screen_changed(screen)
+ if screen ~= "menu" then
+ clear_menu()
+ else
+ configure_menu()
+ end
+end
diff --git a/src/devtools/Project.cpp b/src/devtools/Project.cpp
index c1d382ee..881f6cc7 100644
--- a/src/devtools/Project.cpp
+++ b/src/devtools/Project.cpp
@@ -1,6 +1,9 @@
#include "Project.hpp"
#include "data/dv_util.hpp"
+#include "logic/scripting/scripting.hpp"
+
+Project::~Project() = default;
dv::value Project::serialize() const {
return dv::object({
diff --git a/src/devtools/Project.hpp b/src/devtools/Project.hpp
index 857b58f1..3824ecfd 100644
--- a/src/devtools/Project.hpp
+++ b/src/devtools/Project.hpp
@@ -2,13 +2,21 @@
#include
#include
+#include
#include "interfaces/Serializable.hpp"
+namespace scripting {
+ class IProjectScript;
+}
+
struct Project : Serializable {
std::string name;
std::string title;
std::vector basePacks;
+ std::unique_ptr script;
+
+ ~Project();
dv::value serialize() const override;
void deserialize(const dv::value& src) override;
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp
index 5e5ba681..3f1ae9e5 100644
--- a/src/engine/Engine.cpp
+++ b/src/engine/Engine.cpp
@@ -185,7 +185,7 @@ void Engine::initialize(CoreParameters coreParameters) {
langs::setup(lang, paths.resPaths.collectRoots());
}, true));
- projectScript = load_project_script();
+ project->script = load_project_script();
}
void Engine::loadSettings() {
@@ -242,7 +242,6 @@ void Engine::run() {
}
}
-#include "graphics/ui/elements/Container.hpp"
void Engine::postUpdate() {
network->update();
postRunnables.run();
@@ -285,7 +284,6 @@ void Engine::saveSettings() {
}
void Engine::close() {
- projectScript.reset();
saveSettings();
logger.info() << "shutting down";
if (screen) {
@@ -302,6 +300,7 @@ void Engine::close() {
audio::close();
network.reset();
clearKeepedObjects();
+ project.reset();
scripting::close();
logger.info() << "scripting finished";
if (!params.headless) {
@@ -368,8 +367,8 @@ void Engine::setScreen(std::shared_ptr screen) {
if (this->screen) {
this->screen->onOpen();
}
- if (projectScript && this->screen) {
- projectScript->onScreenChange(this->screen->getName());
+ if (project->script && this->screen) {
+ project->script->onScreenChange(this->screen->getName());
}
}
diff --git a/src/engine/Engine.hpp b/src/engine/Engine.hpp
index d82fc4e6..35619a2a 100644
--- a/src/engine/Engine.hpp
+++ b/src/engine/Engine.hpp
@@ -75,7 +75,6 @@ class Engine : public util::ObjectsKeeper {
std::unique_ptr input;
std::unique_ptr gui;
std::unique_ptr editor;
- std::unique_ptr projectScript;
PostRunnables postRunnables;
Time time;
OnWorldOpen levelConsumer;
@@ -183,8 +182,4 @@ public:
const Project& getProject() {
return *project;
}
-
- scripting::IProjectScript* getProjectScript() {
- return projectScript.get();
- }
};