Merge branch 'main' into release-0.25
This commit is contained in:
commit
7d89fb86bd
@ -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.
|
||||
|
||||
@ -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 - бросается исключение.
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user