Aaron Suen 01332c2a0b Prevent writing breaking on unloaded areas
If the glyph is in an active area but the node it's
attached to isn't loaded (so we can't check it for
eligibility) then let the writing stay.
2021-03-02 18:53:02 -05:00

71 lines
1.6 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local ItemStack, minetest, nodecore, pairs, table
= ItemStack, minetest, nodecore, pairs, table
local table_sort
= table.sort
-- LUALOCALS > ---------------------------------------------------------
local glyphs = {
{name = "Cav"},
{name = "Odo"},
{name = "Niz"},
{name = "Zin", flipped = "niz"},
{name = "Mew"},
{name = "Fot"},
{name = "Tof", flipped = "fot"},
{name = "Yit"},
{name = "Geq"},
{name = "Qeg", flipped = "geq"},
{name = "Prx"},
{name = "Xrp", flipped = "prx"}
}
nodecore.writing_glyphs = glyphs
local glyph_next = {}
local glyph_alts = {}
for i = 2, #glyphs do
glyph_next[i - 1] = i
if #glyphs[i] > #glyphs[1] then
glyph_next[i - 1] = (i < #glyphs) and i + 1 or 1
glyph_alts[i] = i - 1
glyph_alts[i - 1] = i
end
glyph_next[#glyphs] = 1
end
nodecore.writing_glyph_next = glyph_next
nodecore.writing_glyph_alts = glyph_alts
local spinmap
do
local rots = {}
for i = 0, 23 do
local f = nodecore.facedirs[i]
local r = rots[f.t.n]
if not r then
r = {}
rots[f.t.n] = r
end
r[f.f.n] = i
end
spinmap = {}
for _, v in pairs(rots) do
local t = {}
for _, x in pairs(v) do t[#t + 1] = x end
table_sort(t)
for i = 1, #t - 1 do
spinmap[t[i]] = t[i + 1]
end
spinmap[t[#t]] = t[1]
end
end
nodecore.writing_spinmap = spinmap
local function writable(pos, node, default)
node = node or minetest.get_node_or_nil(pos)
if not node then return default end
local def = minetest.registered_nodes[node.name]
return def.walkable and def.paramtype ~= "light"
and not nodecore.tool_digs(ItemStack(""), def.groups)
end
nodecore.writing_writable = writable