Fix entity overloading and add missing entity check

This commit is contained in:
GreenXenith 2018-11-25 15:24:02 -08:00
parent 8b73f9e11d
commit cc7044671c
1 changed files with 34 additions and 11 deletions

45
lcd.lua
View File

@ -129,15 +129,29 @@ local clearscreen = function(pos)
end end
local prepare_writing = function(pos) local prepare_writing = function(pos)
local lcd_info = lcds[minetest.get_node(pos).param2] local existing
if lcd_info == nil then return end local objects = minetest.get_objects_inside_radius(pos, 0.5)
local text = minetest.add_entity( for _, o in ipairs(objects) do
{x = pos.x + lcd_info.delta.x, local o_entity = o:get_luaentity()
y = pos.y + lcd_info.delta.y, if o_entity and o_entity.name == "digilines_lcd:text" then
z = pos.z + lcd_info.delta.z}, "digilines_lcd:text") existing = o_entity
text:setyaw(lcd_info.yaw or 0) break
--* text:setpitch(lcd_info.yaw or 0) end
return text end
if not existing or existing == nil then
local lcd_info = lcds[minetest.get_node(pos).param2]
if lcd_info == nil then return end
local text = minetest.add_entity(
{x = pos.x + lcd_info.delta.x,
y = pos.y + lcd_info.delta.y,
z = pos.z + lcd_info.delta.z}, "digilines_lcd:text")
text:setyaw(lcd_info.yaw or 0)
return text
else
local meta = minetest.get_meta(existing.object:getpos())
local text = meta:get_string("text")
existing.object:set_properties({textures={generate_texture(create_lines(text))}})
end
end end
local on_digiline_receive = function(pos, _, channel, msg) local on_digiline_receive = function(pos, _, channel, msg)
@ -178,7 +192,7 @@ minetest.register_node("digilines:lcd", {
if param2 == 0 or param2 == 1 then if param2 == 0 or param2 == 1 then
minetest.add_node(pos, {name = "digilines:lcd", param2 = 3}) minetest.add_node(pos, {name = "digilines:lcd", param2 = 3})
end end
prepare_writing (pos) prepare_writing(pos)
end, end,
on_construct = function(pos) on_construct = function(pos)
@ -211,11 +225,20 @@ minetest.register_node("digilines:lcd", {
light_source = 6, light_source = 6,
}) })
minetest.register_lbm({
label = "Replace Missing Text Entities",
name = "digilines:replace_text",
nodenames = {"digilines:lcd"},
run_at_every_load = true,
action = function(pos)
prepare_writing(pos)
end,
})
minetest.register_entity(":digilines_lcd:text", { minetest.register_entity(":digilines_lcd:text", {
collisionbox = { 0, 0, 0, 0, 0, 0 }, collisionbox = { 0, 0, 0, 0, 0, 0 },
visual = "upright_sprite", visual = "upright_sprite",
textures = {}, textures = {},
on_activate = function(self) on_activate = function(self)
local meta = minetest.get_meta(self.object:getpos()) local meta = minetest.get_meta(self.object:getpos())
local text = meta:get_string("text") local text = meta:get_string("text")