core.remove_packs
This commit is contained in:
parent
1c82eeafd2
commit
13ae6c6950
@ -1,7 +1,7 @@
|
||||
# Menu
|
||||
menu.missing-content=Missing Content!
|
||||
world.convert-request=Content indices have changed! Convert world files?
|
||||
pack.remove-confirm=Do you want to erase all pack content from the world forever?
|
||||
pack.remove-confirm=Do you want to erase all pack(s) content from the world forever?
|
||||
error.pack-not-found=Could not to find pack
|
||||
error.dependency-not-found=Dependency pack is not found
|
||||
world.delete-confirm=Do you want to delete world forever?
|
||||
@ -24,4 +24,4 @@ player.build=Place Block
|
||||
player.flight=Flight
|
||||
player.noclip=No-clip
|
||||
camera.zoom=Zoom
|
||||
camera.mode=Switch Camera Mode
|
||||
camera.mode=Switch Camera Mode
|
||||
|
||||
@ -10,7 +10,7 @@ Converting world...=Выполняется конвертация мира...
|
||||
|
||||
error.pack-not-found=Не удалось найти пакет
|
||||
error.dependency-not-found=Используемая зависимость не найдена
|
||||
pack.remove-confirm=Удалить весь поставляемый паком контент из мира (безвозвратно)?
|
||||
pack.remove-confirm=Удалить весь поставляемый паком/паками контент из мира (безвозвратно)?
|
||||
|
||||
# Меню
|
||||
menu.New World=Новый Мир
|
||||
@ -68,4 +68,4 @@ player.attack=Атаковать / Сломать
|
||||
player.build=Поставить Блок
|
||||
player.flight=Полёт
|
||||
camera.zoom=Приближение
|
||||
camera.mode=Сменить Режим Камеры
|
||||
camera.mode=Сменить Режим Камеры
|
||||
|
||||
@ -47,6 +47,12 @@ namespace menus {
|
||||
/// @param engine engine instance
|
||||
void delete_world(std::string name, Engine* engine);
|
||||
|
||||
void remove_packs(
|
||||
Engine* engine,
|
||||
LevelController* controller,
|
||||
std::vector<std::string> packs
|
||||
);
|
||||
|
||||
/// @brief Create development version label at the top-right screen corner
|
||||
void create_version_label(Engine* engine);
|
||||
void create_menus(Engine* engine);
|
||||
|
||||
@ -60,21 +60,23 @@ std::shared_ptr<Container> create_pack_panel(
|
||||
if (!pack.creator.empty()) {
|
||||
packpanel->add(guiutil::create(
|
||||
"<label color='#CCFFE5B2' size='300,20' align='right' pos='215,60'>"+
|
||||
pack.creator+
|
||||
pack.creator+
|
||||
"</label>"
|
||||
));
|
||||
}
|
||||
|
||||
auto descriptionlabel = std::make_shared<Label>(pack.description);
|
||||
descriptionlabel->setColor(glm::vec4(1, 1, 1, 0.7f));
|
||||
packpanel->add(descriptionlabel, glm::vec2(80, 28));
|
||||
packpanel->add(guiutil::create(
|
||||
"<label pos='80,28' color='#FFFFFFB2'>" +
|
||||
pack.description +
|
||||
"</label>"
|
||||
));
|
||||
|
||||
packpanel->add(std::make_shared<Image>(icon, glm::vec2(64)), glm::vec2(8));
|
||||
|
||||
if (remover && pack.id != "base") {
|
||||
auto rembtn = guiutil::create(
|
||||
"<button color='#00000000' hover-color='#FFFFFF2B'>"
|
||||
" <image src='gui/cross' size='32,32'/>"
|
||||
"<image src='gui/cross' size='32,32'/>"
|
||||
"</button>"
|
||||
);
|
||||
rembtn->listenAction([=](GUI* gui) {
|
||||
@ -134,6 +136,46 @@ static bool try_add_dependency(Engine* engine, World* world, const ContentPack&
|
||||
return false;
|
||||
}
|
||||
|
||||
void menus::remove_packs(
|
||||
Engine* engine,
|
||||
LevelController* controller,
|
||||
std::vector<std::string> packsToRemove
|
||||
) {
|
||||
auto content = engine->getContent();
|
||||
auto world = controller->getLevel()->getWorld();
|
||||
bool hasIndices = false;
|
||||
|
||||
std::stringstream ss;
|
||||
for (const auto& id : packsToRemove) {
|
||||
if (content->getPackRuntime(id)->getStats().hasSavingContent()) {
|
||||
if (hasIndices) {
|
||||
ss << ", ";
|
||||
}
|
||||
hasIndices = true;
|
||||
ss << id;
|
||||
}
|
||||
}
|
||||
|
||||
runnable removeFunc = [=]() {
|
||||
controller->saveWorld();
|
||||
for (const auto& id : packsToRemove) {
|
||||
world->wfile->removePack(world, id);
|
||||
}
|
||||
reopen_world(engine, world);
|
||||
};
|
||||
|
||||
if (hasIndices) {
|
||||
guiutil::confirm(
|
||||
engine->getGUI(),
|
||||
langs::get(L"remove-confirm", L"pack")+
|
||||
L" ("+util::str2wstr_utf8(ss.str())+L")",
|
||||
[=]() {removeFunc();}
|
||||
);
|
||||
} else {
|
||||
removeFunc();
|
||||
}
|
||||
}
|
||||
|
||||
void create_content_panel(Engine* engine, LevelController* controller) {
|
||||
auto level = controller->getLevel();
|
||||
auto menu = engine->getGUI()->getMenu();
|
||||
@ -149,24 +191,11 @@ void create_content_panel(Engine* engine, LevelController* controller) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto panel = menus::create_packs_panel(
|
||||
engine->getContentPacks(), engine, false, nullptr,
|
||||
[=](const ContentPack& pack) {
|
||||
auto world = level->getWorld();
|
||||
auto runtime = engine->getContent()->getPackRuntime(pack.id);
|
||||
if (runtime->getStats().hasSavingContent()) {
|
||||
guiutil::confirm(engine->getGUI(), langs::get(L"remove-confirm", L"pack")+
|
||||
L" ("+util::str2wstr_utf8(pack.id)+L")", [=]() {
|
||||
controller->saveWorld();
|
||||
world->wfile->removePack(world, pack.id);
|
||||
reopen_world(engine, world);
|
||||
});
|
||||
} else {
|
||||
controller->saveWorld();
|
||||
world->wfile->removePack(world, pack.id);
|
||||
reopen_world(engine, world);
|
||||
}
|
||||
std::vector<std::string> packsToRemove {pack.id};
|
||||
menus::remove_packs(engine, controller, packsToRemove);
|
||||
}
|
||||
);
|
||||
mainPanel->add(panel);
|
||||
|
||||
@ -57,6 +57,21 @@ static int l_delete_world(lua_State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_remove_packs(lua_State* L) {
|
||||
if (!lua_istable(L, 1)) {
|
||||
luaL_error(L, "strings array expected as an argument");
|
||||
}
|
||||
std::vector<std::string> packs;
|
||||
int len = lua_objlen(L, 1);
|
||||
for (int i = 0; i < len; i++) {
|
||||
lua_rawgeti(L, -1, i+1);
|
||||
packs.push_back(lua_tostring(L, -1));
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
menus::remove_packs(scripting::engine, scripting::controller, packs);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_get_bindings(lua_State* L) {
|
||||
auto& bindings = Events::bindings;
|
||||
lua_createtable(L, bindings.size(), 0);
|
||||
@ -101,6 +116,7 @@ const luaL_Reg corelib [] = {
|
||||
{"open_world", lua_wrap_errors<l_open_world>},
|
||||
{"close_world", lua_wrap_errors<l_close_world>},
|
||||
{"delete_world", lua_wrap_errors<l_delete_world>},
|
||||
{"remove_packs", lua_wrap_errors<l_remove_packs>},
|
||||
{"get_bindings", lua_wrap_errors<l_get_bindings>},
|
||||
{"get_setting", lua_wrap_errors<l_get_setting>},
|
||||
{"set_setting", lua_wrap_errors<l_set_setting>},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user