mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-26 18:09:33 +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 CHAR_WIDTH = 5
|
||||
local TIMER_INTERVAL = 40.0
|
||||
-- -----------------------
|
||||
-- CACHE LOCAL COPIES
|
||||
local table = table
|
||||
|
@ -166,18 +167,14 @@ mcl_signs.wall_standard = {
|
|||
on_timer = function(pos)
|
||||
-- fix for /ClearObjects
|
||||
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,
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local above = pointed_thing.above
|
||||
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
|
||||
local node_under = minetest.get_node(under)
|
||||
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.
|
||||
on_punch = function(pos, node, puncher)
|
||||
mcl_signs:update_sign(pos)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if timer:is_started() == false then
|
||||
timer:start(40.0)
|
||||
end
|
||||
end,
|
||||
on_rotate = function(pos, node, user, mode)
|
||||
if mode == screwdriver.ROTATE_FACE then
|
||||
|
@ -311,11 +304,6 @@ mcl_signs.wall_standard = {
|
|||
return
|
||||
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 iname = item:get_name()
|
||||
|
||||
|
@ -400,10 +388,6 @@ mcl_signs.standing_standard = {
|
|||
-- Not Useless Code. this force updates the sign.
|
||||
on_punch = function(pos, node, puncher)
|
||||
mcl_signs:update_sign(pos)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if timer:is_started() == false then
|
||||
timer:start(40.0)
|
||||
end
|
||||
end,
|
||||
on_rotate = function(pos, node, user, mode)
|
||||
if mode == screwdriver.ROTATE_FACE then
|
||||
|
@ -427,11 +411,6 @@ mcl_signs.standing_standard = {
|
|||
return
|
||||
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 iname = item:get_name()
|
||||
|
||||
|
@ -590,11 +569,6 @@ function mcl_signs.register_sign (modname, color, _name, ttsign)
|
|||
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)
|
||||
|
||||
-- Only build when it's legal
|
||||
|
@ -840,11 +814,6 @@ function mcl_signs.register_sign_custom (modname, _name, tiles, color, inventory
|
|||
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)
|
||||
|
||||
-- Only build when it's legal
|
||||
|
@ -1063,11 +1032,6 @@ function mcl_signs.reregister_sign (modname, color, _name, ttsign)
|
|||
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)
|
||||
|
||||
-- Only build when it's legal
|
||||
|
@ -1306,11 +1270,6 @@ function mcl_signs.reregister_sign_custom (modname, _name, tiles, color, invento
|
|||
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)
|
||||
|
||||
-- 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
|
||||
return false
|
||||
end
|
||||
local text = meta:get_string("text")
|
||||
local text = meta:get_string("text", "")
|
||||
if fields and (text == "" and fields.text) then
|
||||
meta:set_string("text", fields.text)
|
||||
text = fields.text
|
||||
|
@ -1941,19 +1900,8 @@ function mcl_signs:update_sign(pos, fields, sender, force_remove, text_color)
|
|||
return false
|
||||
end
|
||||
|
||||
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
local text_entity
|
||||
for _, v in ipairs(objects) do
|
||||
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
|
||||
text_entity = mcl_signs:get_text_entity(pos,force_remove)
|
||||
|
||||
if not text_entity then
|
||||
if DEBUG then
|
||||
|
@ -2002,6 +1950,24 @@ function mcl_signs:update_sign(pos, fields, sender, force_remove, text_color)
|
|||
|
||||
-- save sign metadata.
|
||||
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
|
||||
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))
|
||||
|
@ -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")) .. "]"
|
||||
)
|
||||
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