mirror of
https://github.com/joe7575/techpack.git
synced 2024-11-25 16:43:50 +01:00
Some performance improvements
This commit is contained in:
parent
16fefca1fa
commit
16f62e30bc
@ -27,6 +27,11 @@ function display_update(pos, objref)
|
||||
visual_size = {x=0.94, y=0.94} })
|
||||
end
|
||||
|
||||
local function on_timer(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
display_lib.update_entities(pos)
|
||||
return false
|
||||
end
|
||||
|
||||
local lcd_box = {
|
||||
type = "wallmounted",
|
||||
@ -59,6 +64,7 @@ minetest.register_node("smartline:display", {
|
||||
display_lib.update_entities(pos)
|
||||
end,
|
||||
|
||||
on_timer = on_timer,
|
||||
on_place = display_lib.on_place,
|
||||
on_construct = display_lib.on_construct,
|
||||
on_destruct = display_lib.on_destruct,
|
||||
@ -121,18 +127,25 @@ end
|
||||
tubelib.register_node("smartline:display", {}, {
|
||||
on_recv_message = function(pos, topic, payload)
|
||||
local node = minetest.get_node(pos)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if topic == "text" then -- add one line and scroll if necessary
|
||||
local meta = minetest.get_meta(pos)
|
||||
add_line(meta, payload)
|
||||
display_lib.update_entities(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(2)
|
||||
end
|
||||
elseif topic == "row" then -- overwrite the given row
|
||||
local meta = minetest.get_meta(pos)
|
||||
write_row(meta, payload)
|
||||
display_lib.update_entities(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(2)
|
||||
end
|
||||
elseif topic == "clear" then -- clear the screen
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("text", "")
|
||||
display_lib.update_entities(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(2)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
@ -94,6 +94,20 @@ local function generate_Key2Number()
|
||||
end
|
||||
end
|
||||
|
||||
local function not_protected(pos, placer_name, clicker_name)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta then
|
||||
local cached_name = meta:get_string("tubelib_cached_name")
|
||||
if placer_name and (placer_name == cached_name or not minetest.is_protected(pos, placer_name)) then
|
||||
meta:set_string("tubelib_cached_name", placer_name)
|
||||
if clicker_name == nil or not minetest.is_protected(pos, clicker_name) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- API helper functions
|
||||
-------------------------------------------------------------------
|
||||
@ -224,11 +238,9 @@ function tubelib.send_message(numbers, placer_name, clicker_name, topic, payload
|
||||
for _,num in ipairs(string_split(numbers, " ")) do
|
||||
if Number2Pos[num] and Number2Pos[num].name then
|
||||
local data = Number2Pos[num]
|
||||
if placer_name and not minetest.is_protected(data.pos, placer_name) then
|
||||
if clicker_name == nil or not minetest.is_protected(data.pos, clicker_name) then
|
||||
if tubelib_NodeDef[data.name] and tubelib_NodeDef[data.name].on_recv_message then
|
||||
tubelib_NodeDef[data.name].on_recv_message(data.pos, topic, payload)
|
||||
end
|
||||
if not_protected(data.pos, placer_name, clicker_name) then
|
||||
if tubelib_NodeDef[data.name] and tubelib_NodeDef[data.name].on_recv_message then
|
||||
tubelib_NodeDef[data.name].on_recv_message(data.pos, topic, payload)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user