Merge branch 'main' into release-0.25

This commit is contained in:
MihailRis 2024-11-28 16:03:43 +03:00
commit 7d89fb86bd
6 changed files with 44 additions and 28 deletions

View File

@ -8,8 +8,17 @@ hud.open_inventory()
hud.close_inventory()
-- Open UI and inventory.
-- Throws an exception if has no UI layout.
hud.open(invid: int, layoutid: str)
-- Throws an exception if has UI layout does not exists.
-- If invid is not specified, a virtual (temporary) inventory is created.
-- Returns the invid or id of the virtual inventory.
hud.open(
-- UI layout name
layoutid: str,
-- Don't open player inventory
[optional] disablePlayerInventory: bool,
-- Inventory that UI layout will be bound to
[optional] invid: int
) -> int
-- Open block UI and inventory.
-- Throws an exception if block has no UI layout.

View File

@ -8,8 +8,18 @@ hud.open_inventory()
hud.close_inventory()
-- Открывает инвентарь и UI.
-- Если не имеет макета UI - бросается исключение.
hud.open(invid: int, layoutid: str)
-- Если макет UI не существует - бросается исключение.
-- Если invid не указан, создаётся виртуальный (временный) инвентарь.
-- Возвращает invid или id виртуального инвентаря.
hud.open(
-- Макет UI
layoutid: str,
-- Не открывать инвентарь игрока
[опционально] disablePlayerInventory: bool,
-- Инвентарь, к которому будет привязан UI макет
[опционально] invid: int
) -> int
-- Открывает инвентарь и UI блока.
-- Если блок не имеет макета UI - бросается исключение.

View File

@ -132,14 +132,14 @@ static VoxelStructureMeta load_structure_meta(
}
static std::vector<std::unique_ptr<VoxelStructure>> load_structures(
const fs::path& structuresFile
const dv::value& map, const fs::path& filesFolder, const ResPaths& paths
) {
auto structuresDir = structuresFile.parent_path() / fs::path("fragments");
auto map = files::read_object(structuresFile);
auto structuresDir = filesFolder / fs::path("fragments");
std::vector<std::unique_ptr<VoxelStructure>> structures;
for (auto& [name, config] : map.asObject()) {
auto structFile = structuresDir / fs::u8path(name + ".vox");
structFile = paths.find(structFile.u8string());
logger.debug() << "loading voxel fragment " << structFile.u8string();
if (!fs::exists(structFile)) {
throw std::runtime_error("structure file does not exist (" +
@ -159,8 +159,13 @@ static std::vector<std::unique_ptr<VoxelStructure>> load_structures(
return structures;
}
static void load_structures(GeneratorDef& def, const fs::path& structuresFile) {
auto rawStructures = load_structures(structuresFile);
static void load_structures(
GeneratorDef& def,
const dv::value& map,
const fs::path& filesFolder,
const ResPaths& paths
) {
auto rawStructures = load_structures(map, filesFolder, paths);
def.structures.resize(rawStructures.size());
for (int i = 0; i < rawStructures.size(); i++) {
@ -231,10 +236,9 @@ void ContentLoader::loadGenerator(
auto folder = generatorsDir / fs::u8path(name + ".files");
auto scriptFile = folder / fs::u8path("script.lua");
auto structuresFile = folder / STRUCTURES_FILE;
if (fs::exists(structuresFile)) {
load_structures(def, structuresFile);
}
auto structuresFile = GENERATORS_DIR / fs::u8path(name + ".files") / STRUCTURES_FILE;
auto structuresMap = paths.readCombinedObject(structuresFile.u8string());
load_structures(def, structuresMap, structuresFile.parent_path(), paths);
auto biomesFile = GENERATORS_DIR / fs::u8path(name + ".files") / BIOMES_FILE;
auto biomesMap = paths.readCombinedObject(biomesFile.u8string());

View File

@ -382,16 +382,11 @@ void Hud::openInventory() {
add(HudElement(hud_element_mode::inventory_bound, nullptr, exchangeSlot, false));
}
void Hud::openInventory(
std::shared_ptr<Inventory> Hud::openInventory(
UiDocument* doc,
std::shared_ptr<Inventory> inv,
bool playerInventory
) {
if (inv == nullptr) {
// why try to open nox-existent inventory??
return;
}
if (isInventoryOpen()) {
closeInventory();
}
@ -413,6 +408,7 @@ void Hud::openInventory(
}
secondInvView->bind(inv, content);
add(HudElement(hud_element_mode::inventory_bound, doc, secondUI, false));
return inv;
}
void Hud::openInventory(

View File

@ -153,7 +153,7 @@ public:
/// @param doc ui layout
/// @param inv inventory
/// @param playerInventory show player inventory too
void openInventory(
std::shared_ptr<Inventory> openInventory(
UiDocument* doc,
std::shared_ptr<Inventory> inv,
bool playerInventory

View File

@ -37,23 +37,20 @@ static int l_close_inventory(lua::State*) {
}
static int l_open(lua::State* L) {
auto invid = lua::tointeger(L, 1);
auto layoutid = lua::require_string(L, 2);
bool playerInventory = !lua::toboolean(L, 3);
auto layoutid = lua::require_string(L, 1);
bool playerInventory = !lua::toboolean(L, 2);
auto invid = lua::tointeger(L, 3);
auto assets = engine->getAssets();
auto layout = assets->get<UiDocument>(layoutid);
if (layout == nullptr) {
throw std::runtime_error("there is no ui layout " + util::quote(layoutid));
}
hud->openInventory(
return lua::pushinteger(L, hud->openInventory(
layout,
level->inventories->get(invid),
playerInventory
);
return 0;
)->getId());
}
static int l_open_block(lua::State* L) {