add rules & add 'show-content-access' rule
This commit is contained in:
parent
a50cb109c8
commit
2e24d60404
@ -223,3 +223,35 @@ console.add_command(
|
||||
fragment:place({x, y, z}, rotation)
|
||||
end
|
||||
)
|
||||
|
||||
console.add_command(
|
||||
"rule.set name:str value:bool",
|
||||
"Set rule value",
|
||||
function(args, kwargs)
|
||||
local name = args[1]
|
||||
local value = args[2]
|
||||
rules.set(name, value)
|
||||
return "rule '"..name.."' set to "..tostring(value)
|
||||
end
|
||||
)
|
||||
|
||||
console.add_command(
|
||||
"rule.list",
|
||||
"Show registered rules list",
|
||||
function(args, kwargs)
|
||||
local names = ""
|
||||
for name, rule in pairs(rules.rules) do
|
||||
if #names > 0 then
|
||||
names = names .. "\n "
|
||||
else
|
||||
names = " "
|
||||
end
|
||||
local value = rule.value
|
||||
if value == nil then
|
||||
value = "not set"
|
||||
end
|
||||
names = names .. name .. ":\t" .. tostring(value)
|
||||
end
|
||||
return "registered rules:\n" .. names
|
||||
end
|
||||
)
|
||||
|
||||
@ -168,6 +168,64 @@ end
|
||||
|
||||
math.randomseed(time.uptime() * 1536227939)
|
||||
|
||||
rules = {nexid = 1, rules = {}}
|
||||
local _rules = rules
|
||||
|
||||
function _rules.get_rule(name)
|
||||
local rule = _rules.rules[name]
|
||||
if rule == nil then
|
||||
rule = {listeners={}}
|
||||
_rules.rules[name] = rule
|
||||
end
|
||||
return rule
|
||||
end
|
||||
|
||||
function _rules.get(name)
|
||||
local rule = _rules.rules[name]
|
||||
if rule == nil then
|
||||
return nil
|
||||
end
|
||||
return rule.value
|
||||
end
|
||||
|
||||
function _rules.set(name, value)
|
||||
local rule = _rules.get_rule(name)
|
||||
rule.value = value
|
||||
for _, handler in pairs(rule.listeners) do
|
||||
handler(value)
|
||||
end
|
||||
end
|
||||
|
||||
function _rules.listen(name, handler)
|
||||
local rule = _rules.get_rule(name)
|
||||
local id = _rules.nexid
|
||||
_rules.nextid = _rules.nexid + 1
|
||||
rule.listeners[utf8.encode(id)] = handler
|
||||
return id
|
||||
end
|
||||
|
||||
function _rules.create(name, value, handler)
|
||||
print(name, value, handler)
|
||||
_rules.set(name, value)
|
||||
return _rules.listen(name, handler)
|
||||
end
|
||||
|
||||
function _rules.unlisten(name, id)
|
||||
local rule = _rules.get_rule(name)
|
||||
rule.listeners[utf8.encode(id)] = nil
|
||||
end
|
||||
|
||||
function _rules.clear()
|
||||
_rules.rules = {}
|
||||
_rules.nextid = 1
|
||||
end
|
||||
|
||||
function __vc_create_hud_rules()
|
||||
_rules.create("show-content-access", hud._is_content_access(), function(value)
|
||||
hud._set_content_access(value)
|
||||
end)
|
||||
end
|
||||
|
||||
-- --------- Deprecated functions ------ --
|
||||
local function wrap_deprecated(func, name, alternatives)
|
||||
return function (...)
|
||||
|
||||
@ -348,7 +348,7 @@ void Hud::update(bool visible) {
|
||||
}
|
||||
|
||||
glm::vec2 invSize = contentAccessPanel->getSize();
|
||||
contentAccessPanel->setVisible(inventoryView != nullptr);
|
||||
contentAccessPanel->setVisible(inventoryView != nullptr && showContentPanel);
|
||||
contentAccessPanel->setSize(glm::vec2(invSize.x, Window::height));
|
||||
contentAccess->setMinSize(glm::vec2(1, Window::height));
|
||||
hotbarView->setVisible(visible && !(secondUI && !inventoryView));
|
||||
@ -553,7 +553,9 @@ void Hud::updateElementsPosition(const Viewport& viewport) {
|
||||
const uint height = viewport.getHeight();
|
||||
|
||||
if (inventoryOpen) {
|
||||
float caWidth = inventoryView ? contentAccess->getSize().x : 0.0f;
|
||||
float caWidth = inventoryView && showContentPanel
|
||||
? contentAccess->getSize().x
|
||||
: 0.0f;
|
||||
contentAccessPanel->setPos(glm::vec2(width-caWidth, 0));
|
||||
|
||||
glm::vec2 invSize = inventoryView ? inventoryView->getSize() : glm::vec2();
|
||||
@ -628,3 +630,11 @@ std::shared_ptr<Inventory> Hud::getBlockInventory() {
|
||||
}
|
||||
return blockUI->getInventory();
|
||||
}
|
||||
|
||||
bool Hud::isContentAccess() const {
|
||||
return showContentPanel;
|
||||
}
|
||||
|
||||
void Hud::setContentAccess(bool flag) {
|
||||
showContentPanel = flag;
|
||||
}
|
||||
|
||||
@ -105,6 +105,8 @@ class Hud : public util::ObjectsKeeper {
|
||||
glm::ivec3 blockPos {};
|
||||
/// @brief Id of the block open (used to detect block destruction or replacement)
|
||||
blockid_t currentblockid = 0;
|
||||
/// @brief Show content access panel
|
||||
bool showContentPanel = true;
|
||||
|
||||
/// @brief UI element will be dynamicly positioned near to inventory or in screen center
|
||||
std::shared_ptr<gui::UINode> secondUI = nullptr;
|
||||
@ -172,6 +174,10 @@ public:
|
||||
|
||||
std::shared_ptr<Inventory> getBlockInventory();
|
||||
|
||||
bool isContentAccess() const;
|
||||
|
||||
void setContentAccess(bool flag);
|
||||
|
||||
static bool showGeneratorMinimap;
|
||||
|
||||
/// @brief Runtime updating debug visualization texture
|
||||
|
||||
@ -22,21 +22,21 @@ namespace scripting {
|
||||
}
|
||||
using namespace scripting;
|
||||
|
||||
static int l_hud_open_inventory(lua::State*) {
|
||||
static int l_open_inventory(lua::State*) {
|
||||
if (!hud->isInventoryOpen()) {
|
||||
hud->openInventory();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_hud_close_inventory(lua::State*) {
|
||||
static int l_close_inventory(lua::State*) {
|
||||
if (hud->isInventoryOpen()) {
|
||||
hud->closeInventory();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_hud_open_block(lua::State* L) {
|
||||
static int l_open_block(lua::State* L) {
|
||||
auto x = lua::tointeger(L, 1);
|
||||
auto y = lua::tointeger(L, 2);
|
||||
auto z = lua::tointeger(L, 3);
|
||||
@ -69,7 +69,7 @@ static int l_hud_open_block(lua::State* L) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
static int l_hud_show_overlay(lua::State* L) {
|
||||
static int l_show_overlay(lua::State* L) {
|
||||
auto name = lua::require_string(L, 1);
|
||||
bool playerInventory = lua::toboolean(L, 2);
|
||||
|
||||
@ -93,29 +93,29 @@ static UiDocument* require_layout(const char* name) {
|
||||
return layout;
|
||||
}
|
||||
|
||||
static int l_hud_open_permanent(lua::State* L) {
|
||||
static int l_open_permanent(lua::State* L) {
|
||||
auto layout = require_layout(lua::require_string(L, 1));
|
||||
hud->openPermanent(layout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_hud_close(lua::State* L) {
|
||||
static int l_close(lua::State* L) {
|
||||
auto layout = require_layout(lua::require_string(L, 1));
|
||||
hud->remove(layout->getRoot());
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_hud_pause(lua::State*) {
|
||||
static int l_pause(lua::State*) {
|
||||
hud->setPause(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_hud_resume(lua::State*) {
|
||||
static int l_resume(lua::State*) {
|
||||
hud->setPause(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_hud_get_block_inventory(lua::State* L) {
|
||||
static int l_get_block_inventory(lua::State* L) {
|
||||
auto inventory = hud->getBlockInventory();
|
||||
if (inventory == nullptr) {
|
||||
return lua::pushinteger(L, 0);
|
||||
@ -124,30 +124,41 @@ static int l_hud_get_block_inventory(lua::State* L) {
|
||||
}
|
||||
}
|
||||
|
||||
static int l_hud_get_player(lua::State* L) {
|
||||
static int l_get_player(lua::State* L) {
|
||||
auto player = hud->getPlayer();
|
||||
return lua::pushinteger(L, player->getId());
|
||||
}
|
||||
|
||||
static int l_hud_is_paused(lua::State* L) {
|
||||
static int l_is_paused(lua::State* L) {
|
||||
return lua::pushboolean(L, hud->isPause());
|
||||
}
|
||||
|
||||
static int l_hud_is_inventory_open(lua::State* L) {
|
||||
static int l_is_inventory_open(lua::State* L) {
|
||||
return lua::pushboolean(L, hud->isInventoryOpen());
|
||||
}
|
||||
|
||||
static int l_is_content_access(lua::State* L) {
|
||||
return lua::pushboolean(L, hud->isContentAccess());
|
||||
}
|
||||
|
||||
static int l_set_content_access(lua::State* L) {
|
||||
hud->setContentAccess(lua::toboolean(L, 1));
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg hudlib[] = {
|
||||
{"open_inventory", lua::wrap<l_hud_open_inventory>},
|
||||
{"close_inventory", lua::wrap<l_hud_close_inventory>},
|
||||
{"open_block", lua::wrap<l_hud_open_block>},
|
||||
{"open_permanent", lua::wrap<l_hud_open_permanent>},
|
||||
{"show_overlay", lua::wrap<l_hud_show_overlay>},
|
||||
{"get_block_inventory", lua::wrap<l_hud_get_block_inventory>},
|
||||
{"close", lua::wrap<l_hud_close>},
|
||||
{"pause", lua::wrap<l_hud_pause>},
|
||||
{"resume", lua::wrap<l_hud_resume>},
|
||||
{"is_paused", lua::wrap<l_hud_is_paused>},
|
||||
{"is_inventory_open", lua::wrap<l_hud_is_inventory_open>},
|
||||
{"get_player", lua::wrap<l_hud_get_player>},
|
||||
{"open_inventory", lua::wrap<l_open_inventory>},
|
||||
{"close_inventory", lua::wrap<l_close_inventory>},
|
||||
{"open_block", lua::wrap<l_open_block>},
|
||||
{"open_permanent", lua::wrap<l_open_permanent>},
|
||||
{"show_overlay", lua::wrap<l_show_overlay>},
|
||||
{"get_block_inventory", lua::wrap<l_get_block_inventory>},
|
||||
{"close", lua::wrap<l_close>},
|
||||
{"pause", lua::wrap<l_pause>},
|
||||
{"resume", lua::wrap<l_resume>},
|
||||
{"is_paused", lua::wrap<l_is_paused>},
|
||||
{"is_inventory_open", lua::wrap<l_is_inventory_open>},
|
||||
{"get_player", lua::wrap<l_get_player>},
|
||||
{"_is_content_access", lua::wrap<l_is_content_access>},
|
||||
{"_set_content_access", lua::wrap<l_set_content_access>},
|
||||
{NULL, NULL}};
|
||||
|
||||
@ -204,6 +204,11 @@ void scripting::cleanup() {
|
||||
}
|
||||
lua::pop(L);
|
||||
|
||||
lua::getglobal(L, "rules");
|
||||
lua::getfield(L, "clear");
|
||||
lua::call_nothrow(L, 0);
|
||||
lua::pop(L);
|
||||
|
||||
if (lua::getglobal(L, "__scripts_cleanup")) {
|
||||
lua::call_nothrow(L, 0);
|
||||
}
|
||||
|
||||
@ -21,8 +21,14 @@ void scripting::on_frontend_init(Hud* hud, WorldRenderer* renderer) {
|
||||
scripting::hud = hud;
|
||||
scripting::renderer = renderer;
|
||||
|
||||
lua::openlib(lua::get_main_state(), "hud", hudlib);
|
||||
lua::openlib(lua::get_main_state(), "particles", particleslib);
|
||||
auto L = lua::get_main_state();
|
||||
|
||||
lua::openlib(L, "hud", hudlib);
|
||||
lua::openlib(L, "particles", particleslib);
|
||||
|
||||
if (lua::getglobal(L, "__vc_create_hud_rules")) {
|
||||
lua::call_nothrow(L, 0, 0);
|
||||
}
|
||||
|
||||
for (auto& pack : engine->getContentPacks()) {
|
||||
lua::emit_event(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user