mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-26 04:21:07 +01:00
Update Signs API to only use timer functions when there is text to display.
This commit is contained in:
parent
4a1e37d9c6
commit
67296c7a37
1 changed files with 40 additions and 57 deletions
|
@ -28,6 +28,7 @@ local NUMBER_OF_LINES = 4
|
||||||
|
|
||||||
local LINE_HEIGHT = 14
|
local LINE_HEIGHT = 14
|
||||||
local CHAR_WIDTH = 5
|
local CHAR_WIDTH = 5
|
||||||
|
local TIMER_INTERVAL = 40.0
|
||||||
-- -----------------------
|
-- -----------------------
|
||||||
-- CACHE LOCAL COPIES
|
-- CACHE LOCAL COPIES
|
||||||
local table = table
|
local table = table
|
||||||
|
@ -166,18 +167,14 @@ mcl_signs.wall_standard = {
|
||||||
on_timer = function(pos)
|
on_timer = function(pos)
|
||||||
-- fix for /ClearObjects
|
-- fix for /ClearObjects
|
||||||
mcl_signs:update_sign(pos)
|
mcl_signs:update_sign(pos)
|
||||||
minetest.get_node_timer(pos):start(40.0)
|
-- note: update_sign decides to keep the timer running based on if there is text.
|
||||||
|
-- This prevents every sign from having a timer, when not needed.
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
local above = pointed_thing.above
|
local above = pointed_thing.above
|
||||||
local under = pointed_thing.under
|
local under = pointed_thing.under
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Use pointed node's on_rightclick function first, if present
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
local node_under = minetest.get_node(under)
|
local node_under = minetest.get_node(under)
|
||||||
if placer and not placer:get_player_control().sneak then
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
@ -285,10 +282,6 @@ mcl_signs.wall_standard = {
|
||||||
-- Not Useless Code. force updates the sign.
|
-- Not Useless Code. force updates the sign.
|
||||||
on_punch = function(pos, node, puncher)
|
on_punch = function(pos, node, puncher)
|
||||||
mcl_signs:update_sign(pos)
|
mcl_signs:update_sign(pos)
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
on_rotate = function(pos, node, user, mode)
|
on_rotate = function(pos, node, user, mode)
|
||||||
if mode == screwdriver.ROTATE_FACE then
|
if mode == screwdriver.ROTATE_FACE then
|
||||||
|
@ -311,11 +304,6 @@ mcl_signs.wall_standard = {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
local iname = item:get_name()
|
local iname = item:get_name()
|
||||||
|
|
||||||
|
@ -400,10 +388,6 @@ mcl_signs.standing_standard = {
|
||||||
-- Not Useless Code. this force updates the sign.
|
-- Not Useless Code. this force updates the sign.
|
||||||
on_punch = function(pos, node, puncher)
|
on_punch = function(pos, node, puncher)
|
||||||
mcl_signs:update_sign(pos)
|
mcl_signs:update_sign(pos)
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
on_rotate = function(pos, node, user, mode)
|
on_rotate = function(pos, node, user, mode)
|
||||||
if mode == screwdriver.ROTATE_FACE then
|
if mode == screwdriver.ROTATE_FACE then
|
||||||
|
@ -427,11 +411,6 @@ mcl_signs.standing_standard = {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
local iname = item:get_name()
|
local iname = item:get_name()
|
||||||
|
|
||||||
|
@ -590,11 +569,6 @@ function mcl_signs.register_sign (modname, color, _name, ttsign)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local dir = vector.subtract(under, above)
|
local dir = vector.subtract(under, above)
|
||||||
|
|
||||||
-- Only build when it's legal
|
-- Only build when it's legal
|
||||||
|
@ -840,11 +814,6 @@ function mcl_signs.register_sign_custom (modname, _name, tiles, color, inventory
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local dir = vector.subtract(under, above)
|
local dir = vector.subtract(under, above)
|
||||||
|
|
||||||
-- Only build when it's legal
|
-- Only build when it's legal
|
||||||
|
@ -1063,11 +1032,6 @@ function mcl_signs.reregister_sign (modname, color, _name, ttsign)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local dir = vector.subtract(under, above)
|
local dir = vector.subtract(under, above)
|
||||||
|
|
||||||
-- Only build when it's legal
|
-- Only build when it's legal
|
||||||
|
@ -1306,11 +1270,6 @@ function mcl_signs.reregister_sign_custom (modname, _name, tiles, color, invento
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local timer = minetest.get_node_timer(pos)
|
|
||||||
if timer:is_started() == false then
|
|
||||||
timer:start(40.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local dir = vector.subtract(under, above)
|
local dir = vector.subtract(under, above)
|
||||||
|
|
||||||
-- Only build when it's legal
|
-- Only build when it's legal
|
||||||
|
@ -1860,7 +1819,7 @@ function mcl_signs:update_sign(pos, fields, sender, force_remove, text_color)
|
||||||
if not meta then
|
if not meta then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local text = meta:get_string("text")
|
local text = meta:get_string("text", "")
|
||||||
if fields and (text == "" and fields.text) then
|
if fields and (text == "" and fields.text) then
|
||||||
meta:set_string("text", fields.text)
|
meta:set_string("text", fields.text)
|
||||||
text = fields.text
|
text = fields.text
|
||||||
|
@ -1941,19 +1900,8 @@ function mcl_signs:update_sign(pos, fields, sender, force_remove, text_color)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
|
||||||
local text_entity
|
local text_entity
|
||||||
for _, v in ipairs(objects) do
|
text_entity = mcl_signs:get_text_entity(pos,force_remove)
|
||||||
local ent = v:get_luaentity()
|
|
||||||
if ent and ent.name == "mcl_signs:text" then
|
|
||||||
if force_remove then
|
|
||||||
v:remove()
|
|
||||||
else
|
|
||||||
text_entity = v
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not text_entity then
|
if not text_entity then
|
||||||
if DEBUG then
|
if DEBUG then
|
||||||
|
@ -2002,6 +1950,24 @@ function mcl_signs:update_sign(pos, fields, sender, force_remove, text_color)
|
||||||
|
|
||||||
-- save sign metadata.
|
-- save sign metadata.
|
||||||
meta:set_string("mcl_signs:text_color", text_color)
|
meta:set_string("mcl_signs:text_color", text_color)
|
||||||
|
|
||||||
|
-- Moved timer stuff to here, to make sure that it's called and only has one set of code.
|
||||||
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
if text_entity and text ~= "" then
|
||||||
|
-- Do timer related stuff - but only if there is text to display.
|
||||||
|
-- Also, prevent excessive use with punching. (see node def.)
|
||||||
|
if timer:is_started() == false then
|
||||||
|
timer:start(TIMER_INTERVAL)
|
||||||
|
else
|
||||||
|
timer:stop()
|
||||||
|
timer:start(TIMER_INTERVAL)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if timer:is_started() == true then
|
||||||
|
timer:stop()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- debug step
|
-- debug step
|
||||||
if DEBUG then
|
if DEBUG then
|
||||||
minetest.log("action", "[mcl_signs] Update_Sign: Post-Sign Update: " .. meta:get_string("mcl_signs:text_color") .. " " .. meta:get_string("mcl_signs:glowing_sign") .. ".\n" .. dump(pos))
|
minetest.log("action", "[mcl_signs] Update_Sign: Post-Sign Update: " .. meta:get_string("mcl_signs:text_color") .. " " .. meta:get_string("mcl_signs:glowing_sign") .. ".\n" .. dump(pos))
|
||||||
|
@ -2018,3 +1984,20 @@ function mcl_signs:show_formspec(player, pos)
|
||||||
"size[6,3]textarea[0.25,0.25;6,1.5;text;" .. F(S("Enter sign text:")) .. ";]label[0,1.5;" .. F(S("Maximum line length: 15")) .. "\n" .. F(S("Maximum lines: 4")) .. "]button_exit[0,2.5;6,1;submit;" .. F(S("Done")) .. "]"
|
"size[6,3]textarea[0.25,0.25;6,1.5;text;" .. F(S("Enter sign text:")) .. ";]label[0,1.5;" .. F(S("Maximum line length: 15")) .. "\n" .. F(S("Maximum lines: 4")) .. "]button_exit[0,2.5;6,1;submit;" .. F(S("Done")) .. "]"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function mcl_signs:get_text_entity (pos, force_remove)
|
||||||
|
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
||||||
|
local text_entity = false -- just to have a check for failure.
|
||||||
|
for _, v in ipairs(objects) do
|
||||||
|
local ent = v:get_luaentity()
|
||||||
|
if ent and ent.name == "mcl_signs:text" then
|
||||||
|
if force_remove ~= nil and force_remove == true then
|
||||||
|
v:remove()
|
||||||
|
else
|
||||||
|
text_entity = v
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return text_entity
|
||||||
|
end
|
Loading…
Reference in a new issue