diff --git a/doc/en/scripting/builtins/libassets.md b/doc/en/scripting/builtins/libassets.md index bd095435..b39239a5 100644 --- a/doc/en/scripting/builtins/libassets.md +++ b/doc/en/scripting/builtins/libassets.md @@ -25,4 +25,12 @@ assets.parse_model( -- Model name after loading name: str ) + +-- Creates a Canvas from a loaded texture. +assets.to_canvas( + -- The name of the loaded texture. + -- Both standalone textures ("texture_name") and + -- those in an atlas ("atlas:texture_name") are supported + name: str +) --> Canvas ``` diff --git a/doc/ru/scripting/builtins/libassets.md b/doc/ru/scripting/builtins/libassets.md index 2c510948..ec069e1a 100644 --- a/doc/ru/scripting/builtins/libassets.md +++ b/doc/ru/scripting/builtins/libassets.md @@ -25,4 +25,12 @@ assets.parse_model( -- Имя модели после загрузки name: str ) + +-- Создаёт холст (Canvas) из загруженной текстуры +assets.to_canvas( + -- Имя загруженной текстуры. + -- Поддерживается как отдельные ("имя_текстуры"), + -- так и находящиеся в атласе ("атлас:имя_текстуры"). + name: str +) --> Canvas ``` diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 6e1280cd..a81c1232 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -298,7 +298,9 @@ function __vc_on_hud_open() end) input.add_callback("key:escape", function() if menu.page ~= "" then - menu:reset() + if not menu:back() then + menu:reset() + end elseif hud.is_inventory_open() then hud.close_inventory() else diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index d865cc1a..4fda3b0d 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -184,7 +184,7 @@ assetload::postfunc assetload::atlas( if (!append_atlas(builder, file)) continue; } std::set names = builder.getNames(); - Atlas* atlas = builder.build(2, false).release(); + Atlas* atlas = builder.build(ATLAS_EXTRUSION, false).release(); return [=](auto assets) { atlas->prepare(); assets->store(std::unique_ptr(atlas), name); @@ -501,7 +501,7 @@ static bool load_animation( } if (!append_atlas(builder, file)) continue; } - auto srcAtlas = builder.build(2, true); + auto srcAtlas = builder.build(ATLAS_EXTRUSION, true); if (frameList.empty()) { for (const auto& frameName : builder.getNames()) { frameList.emplace_back(frameName, 0); diff --git a/src/constants.hpp b/src/constants.hpp index 6544316e..91e2c180 100644 --- a/src/constants.hpp +++ b/src/constants.hpp @@ -61,6 +61,8 @@ inline constexpr int ITEM_ICON_SIZE = 48; inline constexpr int TRANSLUCENT_BLOCKS_SORT_INTERVAL = 8; +inline constexpr int ATLAS_EXTRUSION = 2; + inline const std::string SHADERS_FOLDER = "shaders"; inline const std::string TEXTURES_FOLDER = "textures"; inline const std::string FONTS_FOLDER = "fonts"; diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index a977f354..3053b613 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -26,6 +26,7 @@ #include "graphics/core/ImageData.hpp" #include "graphics/core/Shader.hpp" #include "graphics/ui/GUI.hpp" +#include "graphics/ui/elements/Menu.hpp" #include "objects/rigging.hpp" #include "logic/EngineController.hpp" #include "logic/CommandsInterpreter.hpp" @@ -154,6 +155,14 @@ void Engine::initializeClient() { }, true )); + + keepAlive(this->input->addKeyCallback(Keycode::ESCAPE, [this]() { + auto& menu = *gui->getMenu(); + if (menu.hasOpenPage() && menu.back()) { + return true; + } + return false; + })); } void Engine::initialize(CoreParameters coreParameters) { diff --git a/src/frontend/debug_panel.cpp b/src/frontend/debug_panel.cpp index 10c6b85c..c42b2930 100644 --- a/src/frontend/debug_panel.cpp +++ b/src/frontend/debug_panel.cpp @@ -9,6 +9,7 @@ #include "graphics/ui/elements/TextBox.hpp" #include "graphics/ui/elements/TrackBar.hpp" #include "graphics/ui/elements/InputBindBox.hpp" +#include "graphics/ui/GUI.hpp" #include "graphics/render/WorldRenderer.hpp" #include "graphics/render/ParticlesRenderer.hpp" #include "graphics/render/ChunksRenderer.hpp" @@ -43,10 +44,15 @@ static std::shared_ptr