hud.get_block_inventory and inventory.move
This commit is contained in:
parent
cbdc151373
commit
0dc3ab50a2
@ -157,6 +157,13 @@ inventory.clone(invid: int) -> int
|
|||||||
|
|
||||||
Create inventory copy. Returns the created copy ID.
|
Create inventory copy. Returns the created copy ID.
|
||||||
|
|
||||||
|
```python
|
||||||
|
inventory.move(invA: int, slotA: int, invB: int, slotB: int)
|
||||||
|
```
|
||||||
|
|
||||||
|
Move item from slotA of invA to slotB of invB. invA may be the same as invB.
|
||||||
|
If slotB will be chosen automaticly if argument is not specified.
|
||||||
|
|
||||||
## *block* library
|
## *block* library
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@ -333,6 +340,13 @@ hud.close(layoutid: str)
|
|||||||
|
|
||||||
Remove an element from the screen
|
Remove an element from the screen
|
||||||
|
|
||||||
|
|
||||||
|
```python
|
||||||
|
hud.get_block_inventory() -> int
|
||||||
|
```
|
||||||
|
|
||||||
|
Get open block inventory ID or 0
|
||||||
|
|
||||||
## Block events
|
## Block events
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
|
|||||||
@ -152,6 +152,14 @@ inventory.clone(invid: int) -> int
|
|||||||
|
|
||||||
Создает копию инвентаря и возвращает id копии. Если копируемого инвентаря не существует, возвращает 0.
|
Создает копию инвентаря и возвращает id копии. Если копируемого инвентаря не существует, возвращает 0.
|
||||||
|
|
||||||
|
```python
|
||||||
|
inventory.move(invA: int, slotA: int, invB: int, slotB: int)
|
||||||
|
```
|
||||||
|
|
||||||
|
Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB.
|
||||||
|
invA и invB могут указывать на один инвентарь.
|
||||||
|
slotB будет выбран автоматически, если не указывать явно.
|
||||||
|
|
||||||
## Библиотека block
|
## Библиотека block
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@ -323,6 +331,13 @@ hud.close(layoutid: str)
|
|||||||
```
|
```
|
||||||
|
|
||||||
Удаляет элемент с экрана
|
Удаляет элемент с экрана
|
||||||
|
|
||||||
|
```python
|
||||||
|
hud.get_block_inventory() -> int
|
||||||
|
```
|
||||||
|
|
||||||
|
Получить ID инвентаря открытого блока или 0
|
||||||
|
|
||||||
## События блоков
|
## События блоков
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
function inventory_share_func(invid, slotid)
|
function inventory_share_func(invid, slotid)
|
||||||
inventory.set(invid, slotid, 0, 0)
|
local blockinv = hud.get_block_inventory()
|
||||||
|
if blockinv ~= 0 then
|
||||||
|
inventory.move(invid, slotid, blockinv)
|
||||||
|
else
|
||||||
|
inventory.set(invid, slotid, 0, 0)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -564,3 +564,10 @@ void Hud::setPause(bool pause) {
|
|||||||
Player* Hud::getPlayer() const {
|
Player* Hud::getPlayer() const {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Inventory> Hud::getBlockInventory() {
|
||||||
|
if (blockUI == nullptr) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return blockUI->getInventory();
|
||||||
|
}
|
||||||
|
|||||||
@ -155,6 +155,8 @@ public:
|
|||||||
void remove(std::shared_ptr<gui::UINode> node);
|
void remove(std::shared_ptr<gui::UINode> node);
|
||||||
|
|
||||||
Player* getPlayer() const;
|
Player* getPlayer() const;
|
||||||
|
|
||||||
|
std::shared_ptr<Inventory> getBlockInventory();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SRC_HUD_H_
|
#endif // SRC_HUD_H_
|
||||||
|
|||||||
@ -109,12 +109,23 @@ static int l_hud_resume(lua_State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int l_hud_get_block_inventory(lua_State* L) {
|
||||||
|
auto inventory = scripting::hud->getBlockInventory();
|
||||||
|
if (inventory == nullptr) {
|
||||||
|
lua_pushinteger(L, 0);
|
||||||
|
} else {
|
||||||
|
lua_pushinteger(L, inventory->getId());
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
const luaL_Reg hudlib [] = {
|
const luaL_Reg hudlib [] = {
|
||||||
{"open_inventory", lua_wrap_errors<l_hud_open_inventory>},
|
{"open_inventory", lua_wrap_errors<l_hud_open_inventory>},
|
||||||
{"close_inventory", lua_wrap_errors<l_hud_close_inventory>},
|
{"close_inventory", lua_wrap_errors<l_hud_close_inventory>},
|
||||||
{"open_block", lua_wrap_errors<l_hud_open_block>},
|
{"open_block", lua_wrap_errors<l_hud_open_block>},
|
||||||
{"open_permanent", lua_wrap_errors<l_hud_open_permanent>},
|
{"open_permanent", lua_wrap_errors<l_hud_open_permanent>},
|
||||||
{"show_overlay", lua_wrap_errors<l_hud_show_overlay>},
|
{"show_overlay", lua_wrap_errors<l_hud_show_overlay>},
|
||||||
|
{"get_block_inventory", lua_wrap_errors<l_hud_get_block_inventory>},
|
||||||
{"close", lua_wrap_errors<l_hud_close>},
|
{"close", lua_wrap_errors<l_hud_close>},
|
||||||
{"pause", lua_wrap_errors<l_hud_pause>},
|
{"pause", lua_wrap_errors<l_hud_pause>},
|
||||||
{"resume", lua_wrap_errors<l_hud_resume>},
|
{"resume", lua_wrap_errors<l_hud_resume>},
|
||||||
|
|||||||
@ -113,11 +113,35 @@ static int l_inventory_clone(lua_State* L) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int l_inventory_move(lua_State* L) {
|
||||||
|
lua::luaint invAid = lua_tointeger(L, 1);
|
||||||
|
lua::luaint slotAid = lua_tointeger(L, 2);
|
||||||
|
auto invA = scripting::level->inventories->get(invAid);
|
||||||
|
if (invA == nullptr) {
|
||||||
|
luaL_error(L, "inventory A does not exists in runtime: %d", invAid);
|
||||||
|
}
|
||||||
|
|
||||||
|
lua::luaint invBid = lua_tointeger(L, 3);
|
||||||
|
lua::luaint slotBid = lua_isnil(L, 4) ? -1 : lua_tointeger(L, 4);
|
||||||
|
auto invB = scripting::level->inventories->get(invBid);
|
||||||
|
if (invB == nullptr) {
|
||||||
|
luaL_error(L, "inventory B does not exists in runtime: %d", invBid);
|
||||||
|
}
|
||||||
|
auto& slot = invA->getSlot(slotAid);
|
||||||
|
if (slotBid == -1) {
|
||||||
|
invB->move(slot, scripting::content->getIndices());
|
||||||
|
} else {
|
||||||
|
invB->move(slot, scripting::content->getIndices(), slotBid, slotBid+1);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const luaL_Reg inventorylib [] = {
|
const luaL_Reg inventorylib [] = {
|
||||||
{"get", lua_wrap_errors<l_inventory_get>},
|
{"get", lua_wrap_errors<l_inventory_get>},
|
||||||
{"set", lua_wrap_errors<l_inventory_set>},
|
{"set", lua_wrap_errors<l_inventory_set>},
|
||||||
{"size", lua_wrap_errors<l_inventory_size>},
|
{"size", lua_wrap_errors<l_inventory_size>},
|
||||||
{"add", lua_wrap_errors<l_inventory_add>},
|
{"add", lua_wrap_errors<l_inventory_add>},
|
||||||
|
{"move", lua_wrap_errors<l_inventory_move>},
|
||||||
{"get_block", lua_wrap_errors<l_inventory_get_block>},
|
{"get_block", lua_wrap_errors<l_inventory_get_block>},
|
||||||
{"bind_block", lua_wrap_errors<l_inventory_bind_block>},
|
{"bind_block", lua_wrap_errors<l_inventory_bind_block>},
|
||||||
{"unbind_block", lua_wrap_errors<l_inventory_unbind_block>},
|
{"unbind_block", lua_wrap_errors<l_inventory_unbind_block>},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user