From 5915b811f2ca3406d60f3831362b65662e128770 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 2 May 2024 04:07:07 +0300 Subject: [PATCH] new content menu (WIP) --- res/layouts/pages/404.xml | 2 +- res/layouts/pages/add_packs.xml | 6 -- res/layouts/pages/add_packs.xml.lua | 14 ---- res/layouts/pages/content.xml | 16 +++-- res/layouts/pages/content.xml.lua | 88 +++++++++++++++++++++---- res/layouts/templates/pack.xml | 10 +-- res/scripts/stdlib.lua | 31 +++++++++ res/texts/de_DE.txt | 40 +++++------ res/texts/pl_PL.txt | 45 ++++++++----- res/texts/ru_RU.txt | 45 +++++++------ res/texts/uk_UA.txt | 40 +++++++---- res/textures/gui/circle.png | Bin 0 -> 5737 bytes res/textures/gui/cross.png | Bin 6275 -> 5787 bytes res/textures/gui/refresh.png | Bin 0 -> 5752 bytes src/assets/AssetsLoader.cpp | 1 + src/frontend/hud.cpp | 3 + src/graphics/ui/elements/Container.cpp | 8 +++ src/graphics/ui/elements/Container.hpp | 1 + src/graphics/ui/elements/Image.cpp | 8 ++- src/graphics/ui/elements/Panel.cpp | 4 ++ src/graphics/ui/elements/UINode.cpp | 13 +++- src/graphics/ui/elements/UINode.hpp | 6 +- src/logic/EngineController.cpp | 34 ++-------- src/logic/EngineController.hpp | 10 +-- src/logic/scripting/lua/libcore.cpp | 48 +++++++------- src/logic/scripting/lua/libgui.cpp | 67 ++++++++++++------- src/settings.h | 2 +- 27 files changed, 340 insertions(+), 202 deletions(-) delete mode 100644 res/layouts/pages/add_packs.xml delete mode 100644 res/layouts/pages/add_packs.xml.lua create mode 100644 res/textures/gui/circle.png create mode 100644 res/textures/gui/refresh.png diff --git a/res/layouts/pages/404.xml b/res/layouts/pages/404.xml index 1912fc2f..c53262bc 100644 --- a/res/layouts/pages/404.xml +++ b/res/layouts/pages/404.xml @@ -1,4 +1,4 @@ - + diff --git a/res/layouts/pages/add_packs.xml b/res/layouts/pages/add_packs.xml deleted file mode 100644 index e70993a6..00000000 --- a/res/layouts/pages/add_packs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/layouts/pages/add_packs.xml.lua b/res/layouts/pages/add_packs.xml.lua deleted file mode 100644 index c27697c3..00000000 --- a/res/layouts/pages/add_packs.xml.lua +++ /dev/null @@ -1,14 +0,0 @@ -function add_pack(packid, packinfo) - local callback = string.format('core.add_packs({%q})', packid) - packinfo.id = packid - packinfo.callback = callback - packinfo.icon = "gui/no_icon" - document.packs_panel:add(gui.template("pack", packinfo)) -end - -function on_open() - local packs = pack.get_available() - for i,id in ipairs(packs) do - add_pack(id, pack.get_info(id)) - end -end diff --git a/res/layouts/pages/content.xml b/res/layouts/pages/content.xml index 82037dfa..d070212d 100644 --- a/res/layouts/pages/content.xml +++ b/res/layouts/pages/content.xml @@ -1,7 +1,13 @@ - - + + - - - + + + + + + + diff --git a/res/layouts/pages/content.xml.lua b/res/layouts/pages/content.xml.lua index e6c88c7c..c0edf7f9 100644 --- a/res/layouts/pages/content.xml.lua +++ b/res/layouts/pages/content.xml.lua @@ -1,19 +1,85 @@ -function add_pack(packid, packinfo) - local remover = '' - if packid ~= "base" then - remover = string.format('core.remove_packs({%q})', packid) +function on_open() + refresh() +end + +-- // FIXME: dependency checks +add_packs = {} +rem_packs = {} + +function apply() + core.reconfig_packs(add_packs, rem_packs) +end + +function refresh_changes() + document.apply_btn.enabled = (#add_packs>0) or (#rem_packs>0) +end + +function move_pack(id) + -- cancel pack addition + if table.has(add_packs, id) then + document["pack_"..id]:move_into(document.packs_add) + table.remove_value(add_packs, id) + -- cancel pack removal + elseif table.has(rem_packs, id) then + document["pack_"..id]:move_into(document.packs_cur) + table.remove_value(rem_packs, id) + -- add pack + elseif table.has(packs_installed, id) then + document["pack_"..id]:move_into(document.packs_add) + table.insert(rem_packs, id) + -- remove pack + else + document["pack_"..id]:move_into(document.packs_cur) + table.insert(add_packs, id) end + refresh_changes() +end + +function place_pack(panel, packid, packinfo, callback) + packinfo.id = packid + callback = callback or "" if packinfo.has_indices then packid = packid.."*" end - packinfo.id = packid - packinfo.remover = remover - document.packs_panel:add(gui.template("pack", packinfo)) + packinfo.id_verbose = packid + packinfo.callback = callback + panel:add(gui.template("pack", packinfo)) end -function on_open() - local packs = pack.get_installed() - for i,id in ipairs(packs) do - add_pack(id, pack.get_info(id)) +function refresh() + packs_installed = pack.get_installed() + packs_available = pack.get_available() + + local packs_cur = document.packs_cur + local packs_add = document.packs_add + + packs_cur:clear() + packs_add:clear() + refresh_changes() + + for i,id in ipairs(packs_installed) do + local packinfo = pack.get_info(id) + packinfo.index = i + callback = id ~= "base" and string.format('move_pack("%s")', id) or nil + place_pack(packs_cur, id, packinfo, callback) + end + + for i,id in ipairs(packs_available) do + local packinfo = pack.get_info(id) + packinfo.index = i + callback = string.format('move_pack("%s")', id) + place_pack(packs_add, id, packinfo, callback) + end + + -- apply packs movements + for i,id in ipairs(packs_installed) do + if table.has(rem_packs, id) then + document["pack_"..id]:move_into(packs_add) + end + end + for i,id in ipairs(packs_available) do + if table.has(add_packs, id) then + document["pack_"..id]:move_into(packs_cur) + end end end diff --git a/res/layouts/templates/pack.xml b/res/layouts/templates/pack.xml index 691c4173..ae637cc0 100644 --- a/res/layouts/templates/pack.xml +++ b/res/layouts/templates/pack.xml @@ -1,6 +1,6 @@ - + - - + diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index faf85909..422a6edb 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -232,6 +232,37 @@ function session.reset_entry(name) session.entries[name] = nil end +function timeit(func, ...) + local tm = time.uptime() + func(...) + print("[time mcs]", (time.uptime()-tm) * 1000000) +end + +function table.has(t, x) + for i,v in ipairs(t) do + if v == x then + return true + end + end + return false +end + +function table.index(t, x) + for i,v in ipairs(t) do + if v == x then + return i + end + end + return -1 +end + +function table.remove_value(t, x) + local index = table.index(t, x) + if index ~= -1 then + table.remove(t, index) + end +end + -- Deprecated functions block_index = block.index block_name = block.name diff --git a/res/texts/de_DE.txt b/res/texts/de_DE.txt index ce6b21ec..0251f395 100644 --- a/res/texts/de_DE.txt +++ b/res/texts/de_DE.txt @@ -13,44 +13,44 @@ error.dependency-not-found=Die verwendete Abhängigkeit wurde nicht gefunden pack.remove-confirm=Alle vom Paket bereitgestellten Inhalte (dauerhaft) aus der Welt löschen? # Меню +menu.Apply=Anwenden +menu.Audio=Klang +menu.Back to Main Menu=Zurück zum Menü +menu.Content Error=Inhaltsfehler +menu.Content=Inhalt +menu.Continue=Weitermachen +menu.Controls=Kontrolle +menu.Create World=Erschaffe eine Welt +menu.missing-content=Fehlender Inhalt! menu.New World=Neue Welt menu.Quit=Ausfahrt -menu.Continue=Weitermachen menu.Save and Quit to Menu=Speichern und zum Menü zurückkehren -menu.missing-content=Fehlender Inhalt! -menu.Content Error=Inhaltsfehler -menu.Controls=Kontrolle -menu.Back to Main Menu=Zurück zum Menü menu.Settings=Einstellungen -menu.Content=Inhalt -menu.Audio=Klang + world.Seed=Mais world.Name=Name - world.World generator=Weltgenerator world.generators.default=Normal world.generators.flat=Wohnung -menu.Create World=Erschaffe eine Welt - +world.Create World=Welt Erschaffen world.convert-request=Es gibt Änderungen in den Indizes! Die Welt bekehren? world.delete-confirm=Die Welt dauerhaft löschen? # Настройки +settings.Ambient=Hintergrund +settings.Backlight=Hintergrundbeleuchtung +settings.Camera Shaking=Wackelnde Kamera +settings.Fog Curve=Nebelkurve +settings.FOV=Sichtlinie +settings.Language=Sprache settings.Load Distance=Ladeentfernung settings.Load Speed=Download-Geschwindigkeit -settings.Fog Curve=Nebelkurve -settings.Backlight=Hintergrundbeleuchtung -settings.V-Sync=Vertikale Synchronisation -settings.Camera Shaking=Wackelnde Kamera settings.Master Volume=Allgemeine Lautstärke +settings.Mouse Sensitivity=Maus-Empfindlichkeit +settings.Music=Musik settings.Regular Sounds=Normale Geräusche settings.UI Sounds=Interface-Sounds -settings.Ambient=Hintergrund -settings.Music=Musik - -settings.FOV=Sichtlinie -settings.Mouse Sensitivity=Maus-Empfindlichkeit -settings.Language=Sprache +settings.V-Sync=Vertikale Synchronisation # Управление movement.forward=Vorwärts diff --git a/res/texts/pl_PL.txt b/res/texts/pl_PL.txt index aebdab1c..39f1a1a7 100644 --- a/res/texts/pl_PL.txt +++ b/res/texts/pl_PL.txt @@ -5,38 +5,53 @@ Ok=OK Cancel=Anulowanie Back=Powrót Continue=Kontynuacja +Add=Dodać +Converting world...=Konwersja świata w toku... error.pack-not-found=Nie udało się znaleźć pakietu # Menu -menu.New World=Nowy Świat -menu.Quit=Wyjście -menu.Continue=Kontynuacja -menu.Save and Quit to Menu=Zapisz i wyjdź do menu -menu.missing-content=Brak treści! -menu.Controls=Zarządzanie +menu.Apply=Zastosować +menu.Audio=Dźwięki menu.Back to Main Menu=Powrót do menu -menu.Settings=Ustawienia menu.Content=Treść +menu.Continue=Kontynuacja +menu.Controls=Zarządzanie +menu.Graphics=Grafika +menu.Create World=Stwórz świat +menu.missing-content=Brakująca treść! +menu.New World=Nowy Świat +menu.Page not found=Strona nie znaleziona +menu.Quit=Wyjście +menu.Save and Quit to Menu=Zapisz i wyjdź do menu +menu.Settings=Ustawienia + world.Seed=Ziarno world.Name=Nazwa -menu.Create World=Stwórz świat - world.World generator=Generator światła world.generators.default=Ekstremalne world.generators.flat=Mieszkanie +world.Create World=Stwórz świat world.convert-request=Szykują się zmiany w indeksach! Przekształcić świat? +world.delete-confirm=Trwale usunąć świat? # Ustawienia +settings.Ambient=Tło +settings.Backlight=Podświetlenie +settings.Camera Shaking=Drżąca kamera +settings.Fog Curve=Krzywa mgły +settings.FOV=Wzrok +settings.Fullscreen=Pełny ekran +settings.Gamma=Gamma +settings.Language=Język settings.Load Distance=Odległość ładowania settings.Load Speed=Prędkość pobierania -settings.Fog Curve=Krzywa mgły -settings.Backlight=Podświetlenie -settings.V-Sync=Synchronizacja pionowa - -settings.FOV=Wzrok +settings.Master Volume=Głośność główna settings.Mouse Sensitivity=Wrażliwość myszy -settings.Language=Język +settings.Music=Muzyka +settings.Regular Sounds=Normalne dźwięki +settings.UI Sounds=Dźwięki interfejsu +settings.V-Sync=Synchronizacja pionowa # Zarządzanie movement.forward=Naprzód diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt index cd57751a..04ee4e69 100644 --- a/res/texts/ru_RU.txt +++ b/res/texts/ru_RU.txt @@ -13,48 +13,47 @@ error.dependency-not-found=Используемая зависимость не pack.remove-confirm=Удалить весь поставляемый паком/паками контент из мира (безвозвратно)? # Меню -menu.New World=Новый Мир -menu.Quit=Выход -menu.Continue=Продолжить -menu.Save and Quit to Menu=Сохранить и Выйти в Меню -menu.missing-content=Отсутствует Контент! -menu.Page does not exists=Страница не существует +menu.Apply=Применить +menu.Audio=Звук +menu.Back to Main Menu=Вернуться в Меню menu.Content Error=Ошибка Контента +menu.Content=Контент +menu.Continue=Продолжить menu.Controls=Управление menu.Graphics=Графика -menu.Back to Main Menu=Вернуться в Меню +menu.missing-content=Отсутствует Контент! +menu.New World=Новый Мир +menu.Page not found=Страница не найдена +menu.Quit=Выход +menu.Save and Quit to Menu=Сохранить и Выйти в Меню menu.Settings=Настройки -menu.Content=Контент -menu.Audio=Звук + world.Seed=Зерно world.Name=Название - world.World generator=Генератор мира world.generators.default=Обычный world.generators.flat=Плоский world.Create World=Создать Мир - world.convert-request=Есть изменения в индексах! Конвертировать мир? world.delete-confirm=Удалить мир безвозвратно? # Настройки +settings.Ambient=Фон +settings.Backlight=Подсветка +settings.Camera Shaking=Тряска Камеры +settings.Fog Curve=Кривая Тумана +settings.FOV=Поле Зрения +settings.Fullscreen=Полный экран +settings.Gamma=Гамма +settings.Language=Язык settings.Load Distance=Дистанция Загрузки settings.Load Speed=Скорость Загрузки -settings.Fog Curve=Кривая Тумана -settings.Backlight=Подсветка -settings.Gamma=Гамма -settings.Fullscreen=Полноэкранный -settings.V-Sync=Вертикальная Синхронизация -settings.Camera Shaking=Тряска Камеры settings.Master Volume=Общая Громкость +settings.Mouse Sensitivity=Чувствительность Мыши +settings.Music=Музыка settings.Regular Sounds=Обычные Звуки settings.UI Sounds=Звуки Интерфейса -settings.Ambient=Фон -settings.Music=Музыка - -settings.FOV=Поле Зрения -settings.Mouse Sensitivity=Чувствительность Мыши -settings.Language=Язык +settings.V-Sync=Вертикальная Синхронизация # Управление movement.forward=Вперёд diff --git a/res/texts/uk_UA.txt b/res/texts/uk_UA.txt index 4030d650..175c172f 100644 --- a/res/texts/uk_UA.txt +++ b/res/texts/uk_UA.txt @@ -5,19 +5,26 @@ Ok=Гаразд Cancel=Скасувати Back=Назад Continue=Продовжити +Add=Додати +Converting world...=Виконується конвертація світу... error.pack-not-found=Не вдалося знайти пакет # Меню -menu.New World=Новий Світ -menu.Quit=Вихід -menu.Continue=Продовжити -menu.Save and Quit to Menu=Зберегти і Вийти в Меню -menu.missing-content=Відсутній Контент! -menu.Controls=Керування +menu.Apply=Застосувати +menu.Audio=Звук menu.Back to Main Menu=Повернутися до Меню -menu.Settings=Налаштування +menu.Content Error=Помилка Контенту menu.Content=Контент +menu.Continue=Продовжити +menu.Controls=Керування +menu.Graphics=Графіка +menu.missing-content=Відсутній Контент! +menu.New World=Новий Світ +menu.Page not found=Сторінка не знайдена +menu.Quit=Вихід +menu.Save and Quit to Menu=Зберегти і Вийти в Меню +menu.Settings=Налаштування world.Seed=Зерно world.Name=Назва menu.Create World=Створити Світ @@ -28,15 +35,22 @@ world.generators.flat=Плоскі world.convert-request=Є зміни в індексах! Конвертувати світ? # Налаштування +settings.Ambient=Фон +settings.Backlight=Підсвічування +settings.Camera Shaking=Тряска Камери +settings.Fog Curve=Крива Туману +settings.FOV=Поле зору +settings.Fullscreen=Повний екран +settings.Gamma=Гамма +settings.Language=Мова settings.Load Distance=Дистанція Завантаження settings.Load Speed=Швидкість Завантаження -settings.Fog Curve=Крива Туману -settings.Backlight=Підсвічування -settings.V-Sync=Вертикальна Синхронізація - -settings.FOV=Поле зору +settings.Master Volume=Загальна Гучність settings.Mouse Sensitivity=Чутливість Миші -settings.Language=Мова +settings.Music=Музика +settings.Regular Sounds=Звичайні Звуки +settings.UI Sounds=Звуки інтерфейсу +settings.V-Sync=Вертикальна Синхронізація # Керування movement.forward=Уперед diff --git a/res/textures/gui/circle.png b/res/textures/gui/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..b82a72ee46fa6e9293365042e9eaa779189fee87 GIT binary patch literal 5737 zcmeHLdsGu=79XoZihzhLAXUjm6kMDnlT4DCNU)L+z#2q(2#DIrJi?T`NJ0|v)fMqn zK|+EZ3rL2G@q)*@Ox6sr~XOF)I){^RN6FLO>_-*@lt z-rw)u?@lsnlM>^6yh6Mn2=YmYSIqVEBkCcqxp*(v-}Rcrp+=J2Kei2`mbxFaxy>K(-Ydf(<<(&9UZKkSo6(_%#Is^ z%kOtMx0h^NW~TC1CK*F3_ua3X9=DV`L!`Bx>x#Hh8f6-t?O0#O!pQ3@%40I>4lZQ0 z?Kjj{^X?s$AMTqFa9z^ymTr;amyrj0mOithqv4m5(v}d*@rdoA%VJu4MX8+Ivv>Wt zdHvkbsx`aRvXojyesotCJMx0&*NV@6Iu|{`5q7F-_75{uz6X2m+Uv_&H!tXF3w7LV zy;m+~HYiuO<-XZQ|6{-B2dn%hy^r55F1{3a=yZmE5s^ASDd&ZSUbA+pyt68vku@KV@j0g_u32So=T{mW&|1ID_1;VTAj$2R4S{qTkHbP`8{|^IAV2OHWBkT~o-z88 zxa|7vs3s%$W8ceI%kwe&ngjIvnxV)M4fnoyFi2vX=j;5-Qs;}oJkjaCF{^#|Dr?w#etDkSBkDC zD>sK!r&U*d_era)JQS81&dh6$tVy4hlTNRzu08m+#4+ta*TT^Y^E=Pg?Ao@s&Aw;! zRY-EK>ZdS?clRux9lL{q(9*HvTA-4JT)(sbghp-k+}FeoFVX zlgqDmpE~{OnF(9&Rj9+!Ut-rKzI1zfNJG;Dl{6g9-`2X%^3C776L(lgeOrgh>-<)v z@8~*u3}2MpxY(oj=a%Tm?&1&a>D>Fv_D)!|{+nJ^uj$x>yH@7c#rFhrkq-Jl&hf(_ zXjmbuR3;@Tl@CuFIAi6@Hz?viP6{ZTlU&S$eeHg^pCwgHd!>lO&n)Dna1O*&`%V!& zD461tP*l9*Vy5|)?%nGbFYT!=sOEBdU&f|mQ;)>2?U`H{h%9p6%Dtf2a{uJ;)#^ev z?QHN{KOB5LaZ01!nA*7_mNQJ{_i0JXG%|7HyjwMUmtNm_r1(xo@A8#ts@4VGoL3t6 zw+IcFd@faK+Ar468Bb5nm>eBGQNqr=6jvKL@mMbZ$h2Fp&lPXl7GCOKe8M+P{@Ui* z>zo_0w_lRC2E8}2y1Wj{*&LE{WEvQ}0+Y(bN3dRGI3O&B=F6e8xsjvB{@sMn4ITRx(y@Pn$Za&j`4|qn zaH5CL&u?FBfWCaQ@@#u%C+Awb2fwy`>wBJAUC{73YxGUE0hN;iypG==w>;VR+Od)O zXX`sMd$8q@s4Vrm2ZoJM7okhfe}7(4ari;|mrXZ4cX?Rq)gO&p2S(v07L31i&1^Yo zGVlq?q^0>zgBgrR2#T8FG!tYFZR2Wb9cxtZZhml#$7Lx6Z@xq$)R>iYHXEOBp_B6y zQ^@=r5~p}GqP?P=asXhUZ3Ne8&>O9Cr-J9km4nZ&WdV=tHnHU>c{kh+rOVHRV}II@V4bZIcE=P~;dI>58&lO)znMjtB_kR?UQUWDJFh)uxFp7x8FfO8Kn9?#NNlK*@hSGze5{yo`^4eypp6RYz%Nv@Mg2dJm=$$6xKi|+X$DMhzvm`GDIwuN`MSf{IO9QZLxw* zbYUVwzPKOPRTeoQ1B4}9eF^~F9)OEnX`u<5$&z9+=@mRzN?ezxyS=$l{Y8mqt-xZ5 ztK$cHKAFz#|JHv5^sIY}%XPP{oFMyySP45#xdQ>e{w*?_FzRSvH;V)IS(*h$)nl6OPQg-Ra+pWjn7^@z?`^^4S=h#Zl i{h&(0+!agSw)-s9KOZ>tR9p#&0VTvHs%m3iT=ie><{U8q literal 0 HcmV?d00001 diff --git a/res/textures/gui/cross.png b/res/textures/gui/cross.png index 2656b8bc7bc270faf119f39469090114fde92617..021a5ef16fa0a31a9837dbef05f560b86b67a9a8 100644 GIT binary patch delta 1644 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 diff --git a/res/textures/gui/refresh.png b/res/textures/gui/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..ffbbb387aeace0a775ff0464c45725f27449df81 GIT binary patch literal 5752 zcmeHLc~}!?8jn>F5j-hH%IXkNbYYS?azl_K94Q2%P^BytCzA;bKE1HI~eZi)R)Q8IaLr(9l{6Vls^s zL|JGJi)Hzydhx~vW8m|=kDe|Op8JVXCEM2r2I|-9S6|HITyIjhZ|S^`1XKx^ zj{kAe4-ft3eN~w!|MHaOhv^A@M_JjqdHplS&VajCEv$>bko?XU@U$tWy5^ z#+3i;tPj|AJ#%3H;`YY61sgpE28~xYdQ@V2Yx+I3uim}xe|CMEET(5*Pj#xUXU561 zo_XEJblpcbqj_ykue4Q*+dr4zb%2;lt5Zdn?J6$si^5aimpL7Gx2q`I_b=>zu$`y< zQV$>dhJr`$@D7w8W1MrkHoI5Ge3q4emO4Arzwh7$Tkj-obn9!jx%pcUCNqFF&oFJI$u_~-hVvzPDsk+ zkf556Cem%Jz^RE7^E@Zp?R3w4KcW=#nYxDOP&QREZB6pLKz8C(ukkmW4x_zQcZ)6} z6cOdua2?B^mggIrQkq>D@9EIA-u}#t`i?nkB3xcB^%CEA+g0br|1lD+Y-x|hUznl*6ssmdeg?(cq2SuD70 znRnTF`4Zr{K`u&=jRcg zTf&65Jq{GD_%7gLBW<}*eBjTWCm8R|4=P$WrdH<`)+@D*wb9)-Hs-`9`5yXi@Zf`s zCu`vH+qrIg8xQPSs_5aDuRQbZ_HBO0ygPgAqf2&~`@;L(ul}hcslDONbvG-`8HL?T zjJ*=!`h}lnK$Djxr87mPNu6EA?YV6F+Z$ciQ#fX(Y+~>9-Jf-K)du|(T2gg-kQaX2 zEXw$~JGZkbAm-lrM8B4kX@fO>8)jwCYx^?$@3|B9UW-wf9*+t5`l?UOt3Ug&SYrz4 zkPxLjB;-lEfhH@@*(i-TqjV{ViCxErC#{&0epb2NcTJH4C!v5H=TIG7IcYBUQT|+K zdC|HL+7pa-k`H#bckHjsuY?>1SBd;Y^G`&q9hg(#iY~R>Nxv$6`$5y#)nNtn;ug1^ z-yeB5dTyOo|9a0~LmkG*ru_4*246CI)1o^cA6VJF`^38bHwJTZ7t0#|;^eTV?ob1w z>u~Par)X_I72`q8d1Fq1_e?$=)Dd3gGqWb0bHew|y9@Es_q1U(O2Vmh_`eOy5h5C$4AD@{8^t=MXS< zNmgr;j@7*5!B9*3@0drnpB)=$PK_Oiyt6l&|MTt1xb;`omTGjd`lb=BBqwVb+= zFd)idVP&s(+lxfw!isn++dA8%+mAnLZLaSdzsKHmDy()!F_?v=G?;(!iYN(b&~XU0 zK}B&aIwP2mESCQQi;*DHCwHIhZLuwe*rC1s~Dj8VenW@Kb=GH{N;l*~oNVlfxNxEKZl3D}&eX9x?d zH_x_03}MJ9GijoY3~kUuR!l-=Sk6e8ZbS}T6I z=3}Y!p{t=5(9*Uo2(p!}gdm5En28mX+GYso4Q-Jrgg%)9{XJYzPuA&QNES+Ha7rlR z!4xhKz&y2x535Ka0&4_(jfzrXYK`E3(9H%7lR=oMpkxp!hz1mpEgEQ^jmr6>eaT3n ztUMtY4@NK;<;5YWgvXQMVjl#TAPAfL`-e!0#kdG3#IOkG5im%n3Ko-~!YP8JaFIZS zY54ePr+;mTAU>f4`2#~#qe7Kftwv#jhiX8}VM3SyjSLGhN=>LyjR+SG730$y`3*u8 zf&Be(SyU5z62(y*7E&Y_Oe99aDlr&QIKf9ns7fppQJP<$#Xl|{jQ~dx0ujKJz*?08 zjS$2Grld$L+GX)cAA%Zx{^;jJW@T zh8lZ_m~~}? z=O@*Lb{U>>A+%~s;3n2iL4dpC)GOw#;a|J>q59 x%D)kvS(sz9^H=-5?iS~j-Cy>>!vVbb7Aw>zYQo`Q=T2aeB@d03RRu50`!DE1HcbEk literal 0 HcmV?d00001 diff --git a/src/assets/AssetsLoader.cpp b/src/assets/AssetsLoader.cpp index 0c8368ba..d626582e 100644 --- a/src/assets/AssetsLoader.cpp +++ b/src/assets/AssetsLoader.cpp @@ -184,6 +184,7 @@ void AssetsLoader::addDefaults(AssetsLoader& loader, const Content* content) { loader.add(AssetType::texture, TEXTURES_FOLDER+"/gui/warning", "gui/warning"); loader.add(AssetType::texture, TEXTURES_FOLDER+"/gui/error", "gui/error"); loader.add(AssetType::texture, TEXTURES_FOLDER+"/gui/cross", "gui/cross"); + loader.add(AssetType::texture, TEXTURES_FOLDER+"/gui/refresh", "gui/refresh"); if (content) { loader.processPreloadConfigs(content); diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index e301d5b5..f067989e 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -203,6 +203,9 @@ void Hud::processInput(bool visible) { setPause(true); } } + if (!Window::isFocused() && !pause && !isInventoryOpen()) { + setPause(true); + } if (!pause && visible && Events::jactive(BIND_HUD_INVENTORY)) { if (inventoryOpen) { diff --git a/src/graphics/ui/elements/Container.cpp b/src/graphics/ui/elements/Container.cpp index 579ae8d9..93dead99 100644 --- a/src/graphics/ui/elements/Container.cpp +++ b/src/graphics/ui/elements/Container.cpp @@ -125,6 +125,14 @@ void Container::remove(std::shared_ptr selected) { refresh(); } +void Container::clear() { + for (auto node : nodes) { + node->setParent(nullptr); + } + nodes.clear(); + refresh(); +} + void Container::listenInterval(float interval, ontimeout callback, int repeat) { intervalEvents.push_back({callback, interval, 0.0f, repeat}); } diff --git a/src/graphics/ui/elements/Container.hpp b/src/graphics/ui/elements/Container.hpp index 96a29491..8aa38b2f 100644 --- a/src/graphics/ui/elements/Container.hpp +++ b/src/graphics/ui/elements/Container.hpp @@ -24,6 +24,7 @@ namespace gui { virtual std::shared_ptr getAt(glm::vec2 pos, std::shared_ptr self) override; virtual void add(std::shared_ptr node); virtual void add(std::shared_ptr node, glm::vec2 pos); + virtual void clear(); virtual void remove(std::shared_ptr node); virtual void scrolled(int value) override; virtual void setScrollable(bool flag); diff --git a/src/graphics/ui/elements/Image.cpp b/src/graphics/ui/elements/Image.cpp index d337a2c4..0b2d4945 100644 --- a/src/graphics/ui/elements/Image.cpp +++ b/src/graphics/ui/elements/Image.cpp @@ -22,9 +22,13 @@ void Image::draw(const DrawContext* pctx, Assets* assets) { setSize(glm::vec2(texture->getWidth(), texture->getHeight())); } batch->texture(texture); - batch->setColor(color); + if (enabled) { + batch->setColor(isPressed() ? pressedColor : (hover ? hoverColor : color)); + } else { + batch->setColor({color.r, color.g, color.b, color.a * 0.5f}); + } batch->rect(pos.x, pos.y, size.x, size.y, - 0, 0, 0, UVRegion(), false, true, color); + 0, 0, 0, UVRegion(), false, true, batch->getColor()); } void Image::setAutoResize(bool flag) { diff --git a/src/graphics/ui/elements/Panel.cpp b/src/graphics/ui/elements/Panel.cpp index 2cf1c432..036161ed 100644 --- a/src/graphics/ui/elements/Panel.cpp +++ b/src/graphics/ui/elements/Panel.cpp @@ -52,6 +52,10 @@ void Panel::add(std::shared_ptr node) { void Panel::refresh() { UINode::refresh(); + std::stable_sort(nodes.begin(), nodes.end(), [](auto a, auto b) { + return a->getZIndex() < b->getZIndex(); + }); + float x = padding.x; float y = padding.y; glm::vec2 size = getSize(); diff --git a/src/graphics/ui/elements/UINode.cpp b/src/graphics/ui/elements/UINode.cpp index ca08513e..cd85e265 100644 --- a/src/graphics/ui/elements/UINode.cpp +++ b/src/graphics/ui/elements/UINode.cpp @@ -198,7 +198,18 @@ int UINode::getZIndex() const { return zindex; } -void UINode::lock() { +void UINode::moveInto( + std::shared_ptr node, + std::shared_ptr dest +) { + auto parent = node->getParent(); + if (auto container = dynamic_cast(parent)) { + container->remove(node); + } + if (parent) { + parent->scrolled(0); + } + dest->add(node); } vec2supplier UINode::getPositionFunc() const { diff --git a/src/graphics/ui/elements/UINode.hpp b/src/graphics/ui/elements/UINode.hpp index cc2abf68..236b968d 100644 --- a/src/graphics/ui/elements/UINode.hpp +++ b/src/graphics/ui/elements/UINode.hpp @@ -17,6 +17,7 @@ class Assets; namespace gui { class UINode; class GUI; + class Container; using onaction = std::function; using onnumberchange = std::function; @@ -188,7 +189,10 @@ namespace gui { parent->fullRefresh(); } }; - virtual void lock(); + static void moveInto( + std::shared_ptr node, + std::shared_ptr dest + ); virtual vec2supplier getPositionFunc() const; virtual void setPositionFunc(vec2supplier); diff --git a/src/logic/EngineController.cpp b/src/logic/EngineController.cpp index 889498a6..79670eb1 100644 --- a/src/logic/EngineController.cpp +++ b/src/logic/EngineController.cpp @@ -217,8 +217,9 @@ void EngineController::reopenWorld(World* world) { openWorld(wname, true); } -void EngineController::removePacks( +void EngineController::reconfigPacks( LevelController* controller, + std::vector packsToAdd, std::vector packsToRemove ) { auto content = engine->getContent(); @@ -242,6 +243,9 @@ void EngineController::removePacks( manager.scan(); auto names = PacksManager::getNames(world->getPacks()); + for (const auto& id : packsToAdd) { + names.push_back(id); + } for (const auto& id : packsToRemove) { manager.exclude(id); names.erase(std::find(names.begin(), names.end(), id)); @@ -262,31 +266,3 @@ void EngineController::removePacks( removeFunc(); } } - -void EngineController::addPacks( - LevelController* controller, - std::vector packs -) { - auto level = controller->getLevel(); - auto gui = engine->getGUI(); - auto world = level->getWorld(); - auto new_packs = PacksManager::getNames(world->getPacks()); - for (auto& id : packs) { - new_packs.push_back(id); - } - - auto manager = engine->createPacksManager(world->wfile->getFolder()); - manager.scan(); - try { - new_packs = manager.assembly(new_packs); - } catch (const contentpack_error& err) { - guiutil::alert( - gui, langs::get(L"error.dependency-not-found")+ - L": "+util::str2wstr_utf8(err.getPackId()) - ); - return; - } - world->wfile->writePacks(manager.getAll(new_packs)); - controller->saveWorld(); - reopenWorld(world); -} diff --git a/src/logic/EngineController.hpp b/src/logic/EngineController.hpp index b2aebee0..b1041366 100644 --- a/src/logic/EngineController.hpp +++ b/src/logic/EngineController.hpp @@ -22,14 +22,10 @@ public: /// @param name world name void deleteWorld(std::string name); - void removePacks( - LevelController* controller, - std::vector packs - ); - - void addPacks( + void reconfigPacks( LevelController* controller, - std::vector packs + std::vector packsToAdd, + std::vector packsToRemove ); void createWorld( diff --git a/src/logic/scripting/lua/libcore.cpp b/src/logic/scripting/lua/libcore.cpp index 4cd90244..c6f262a5 100644 --- a/src/logic/scripting/lua/libcore.cpp +++ b/src/logic/scripting/lua/libcore.cpp @@ -8,6 +8,7 @@ #include "../../../frontend/screens/MenuScreen.hpp" #include "../../../logic/LevelController.h" #include "../../../logic/EngineController.hpp" +#include "../../../world/Level.h" #include "../../../window/Events.h" #include "../../../window/Window.h" #include "../../../world/WorldGenerators.h" @@ -37,6 +38,12 @@ static int l_open_world(lua_State* L) { return 0; } +static int l_reopen_world(lua_State* L) { + auto controller = scripting::engine->getController(); + controller->reopenWorld(scripting::level->getWorld()); + return 0; +} + static int l_close_world(lua_State* L) { if (scripting::controller == nullptr) { luaL_error(L, "no world open"); @@ -59,35 +66,30 @@ static int l_delete_world(lua_State* L) { return 0; } -static int l_remove_packs(lua_State* L) { +static int l_reconfig_packs(lua_State* L) { if (!lua_istable(L, 1)) { - luaL_error(L, "strings array expected as an argument"); + luaL_error(L, "strings array expected as the first argument"); } - std::vector 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)); + if (!lua_istable(L, 2)) { + luaL_error(L, "strings array expected as the second argument"); + } + std::vector addPacks; + int addLen = lua_objlen(L, 1); + for (int i = 0; i < addLen; i++) { + lua_rawgeti(L, 1, i+1); + addPacks.push_back(lua_tostring(L, -1)); lua_pop(L, 1); } - auto controller = scripting::engine->getController(); - controller->removePacks(scripting::controller, packs); - return 0; -} -static int l_add_packs(lua_State* L) { - if (!lua_istable(L, 1)) { - luaL_error(L, "strings array expected as an argument"); - } - std::vector 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)); + std::vector remPacks; + int remLen = lua_objlen(L, 2); + for (int i = 0; i < remLen; i++) { + lua_rawgeti(L, 2, i+1); + remPacks.push_back(lua_tostring(L, -1)); lua_pop(L, 1); } auto controller = scripting::engine->getController(); - controller->addPacks(scripting::controller, packs); + controller->reconfigPacks(scripting::controller, addPacks, remPacks); return 0; } @@ -174,10 +176,10 @@ static int l_get_generators(lua_State* L) { const luaL_Reg corelib [] = { {"new_world", lua_wrap_errors}, {"open_world", lua_wrap_errors}, + {"reopen_world", lua_wrap_errors}, {"close_world", lua_wrap_errors}, {"delete_world", lua_wrap_errors}, - {"add_packs", lua_wrap_errors}, - {"remove_packs", lua_wrap_errors}, + {"reconfig_packs", lua_wrap_errors}, {"get_bindings", lua_wrap_errors}, {"get_setting", lua_wrap_errors}, {"set_setting", lua_wrap_errors}, diff --git a/src/logic/scripting/lua/libgui.cpp b/src/logic/scripting/lua/libgui.cpp index 82acf228..6a093da3 100644 --- a/src/logic/scripting/lua/libgui.cpp +++ b/src/logic/scripting/lua/libgui.cpp @@ -27,7 +27,7 @@ using namespace gui; struct DocumentNode { UiDocument* document; - UINode* node; + std::shared_ptr node; }; static DocumentNode getDocumentNode(lua_State* L, const std::string& name, const std::string& nodeName) { @@ -39,7 +39,7 @@ static DocumentNode getDocumentNode(lua_State* L, const std::string& name, const if (node == nullptr) { luaL_error(L, "document '%s' has no element with id '%s'", name.c_str(), nodeName.c_str()); } - return {doc, node.get()}; + return {doc, node}; } static bool getattr(lua_State* L, TrackBar* bar, const std::string& attr) { @@ -137,9 +137,9 @@ static bool getattr(lua_State* L, TextBox* box, const std::string& attr) { return false; } -static DocumentNode getDocumentNode(lua_State* L) { - lua_getfield(L, 1, "docname"); - lua_getfield(L, 1, "name"); +static DocumentNode getDocumentNode(lua_State* L, int idx=1) { + lua_getfield(L, idx, "docname"); + lua_getfield(L, idx, "name"); auto docname = lua_tostring(L, -2); auto name = lua_tostring(L, -1); auto node = getDocumentNode(L, docname, name); @@ -149,14 +149,14 @@ static DocumentNode getDocumentNode(lua_State* L) { static int menu_back(lua_State* L) { auto node = getDocumentNode(L); - auto menu = dynamic_cast(node.node); + auto menu = dynamic_cast(node.node.get()); menu->back(); return 0; } static int menu_reset(lua_State* L) { auto node = getDocumentNode(L); - auto menu = dynamic_cast(node.node); + auto menu = dynamic_cast(node.node.get()); menu->reset(); return 0; } @@ -249,7 +249,7 @@ static bool setattr(lua_State* L, InventoryView* view, const std::string& attr) static int container_add(lua_State* L) { auto docnode = getDocumentNode(L); - auto node = dynamic_cast(docnode.node); + auto node = dynamic_cast(docnode.node.get()); auto xmlsrc = lua_tostring(L, 2); try { auto subnode = guiutil::create(xmlsrc, docnode.document->getEnvironment()); @@ -261,6 +261,14 @@ static int container_add(lua_State* L) { return 0; } +static int container_clear(lua_State* L) { + auto node = getDocumentNode(L, 1); + if (auto container = std::dynamic_pointer_cast(node.node)) { + container->clear(); + } + return 0; +} + static bool getattr(lua_State* L, Container* container, const std::string& attr) { if (container == nullptr) return false; @@ -268,6 +276,9 @@ static bool getattr(lua_State* L, Container* container, const std::string& attr) if (attr == "add") { lua_pushcfunction(L, container_add); return true; + } else if (attr == "clear") { + lua_pushcfunction(L, container_clear); + return true; } return false; } @@ -283,6 +294,13 @@ static bool getattr(lua_State* L, InventoryView* inventory, const std::string& a return false; } +static int uinode_move_into(lua_State* L) { + auto node = getDocumentNode(L, 1); + auto dest = getDocumentNode(L, 2); + UINode::moveInto(node.node, std::dynamic_pointer_cast(dest.node)); + return 0; +} + static int l_gui_getattr(lua_State* L) { auto docname = lua_tostring(L, 1); auto element = lua_tostring(L, 2); @@ -307,23 +325,26 @@ static int l_gui_getattr(lua_State* L) { } else if (attr == "enabled") { lua_pushboolean(L, node->isEnabled()); return 1; + } else if (attr == "move_into") { + lua_pushcfunction(L, uinode_move_into); + return 1; } - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; - if (getattr(L, dynamic_cast(node), attr)) + if (getattr(L, dynamic_cast(node.get()), attr)) return 1; return 0; @@ -356,19 +377,19 @@ static int l_gui_setattr(lua_State* L) { } else if (attr == "enabled") { node->setEnabled(lua_toboolean(L, 4)); } else { - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; - if (setattr(L, dynamic_cast(node), attr)) + if (setattr(L, dynamic_cast(node.get()), attr)) return 0; } return 0; diff --git a/src/settings.h b/src/settings.h index cad7934e..28e3b780 100644 --- a/src/settings.h +++ b/src/settings.h @@ -61,7 +61,7 @@ struct GraphicsSettings { /// @brief Enable blocks backlight to prevent complete darkness FlagSetting backlight {true}; /// @brief Enable chunks frustum culling - FlagSetting frustumCulling {true}; // redutant? + FlagSetting frustumCulling {true}; IntegerSetting skyboxResolution {64 + 32, 64, 128}; };