diff options
Diffstat (limited to 'lcd.lua')
-rw-r--r-- | lcd.lua | 166 |
1 files changed, 83 insertions, 83 deletions
@@ -20,6 +20,88 @@ else end end +-- CONSTANTS +local LCD_WITH = 100 +local LCD_PADDING = 8 + +local LINE_LENGTH = 12 +local NUMBER_OF_LINES = 5 + +local LINE_HEIGHT = 14 +local CHAR_WIDTH = 5 + +local create_lines = function(text) + local line = "" + local line_num = 1 + local tab = {} + for word in string.gmatch(text, "%S+") do + if string.len(line)+string.len(word) < LINE_LENGTH and word ~= "|" then + if line ~= "" then + line = line.." "..word + else + line = word + end + else + table.insert(tab, line) + if word ~= "|" then + line = word + else + line = "" + end + line_num = line_num+1 + if line_num > NUMBER_OF_LINES then + return tab + end + end + end + table.insert(tab, line) + return tab +end + +local generate_line = function(s, ypos) + local i = 1 + local parsed = {} + local width = 0 + local chars = 0 + while chars < max_chars and i <= #s do + local file = nil + if charmap[s:sub(i, i)] ~= nil then + file = charmap[s:sub(i, i)] + i = i + 1 + elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then + file = charmap[s:sub(i, i + 1)] + i = i + 2 + else + print("[digilines] W: LCD: unknown symbol in '"..s.."' at "..i) + i = i + 1 + end + if file ~= nil then + width = width + CHAR_WIDTH + table.insert(parsed, file) + chars = chars + 1 + end + end + width = width - 1 + + local texture = "" + local xpos = math.floor((LCD_WITH - 2 * LCD_PADDING - width) / 2 + LCD_PADDING) + for ii = 1, #parsed do + texture = texture..":"..xpos..","..ypos.."="..parsed[ii]..".png" + xpos = xpos + CHAR_WIDTH + 1 + end + return texture +end + +local generate_texture = function(lines) + local texture = "[combine:"..LCD_WITH.."x"..LCD_WITH + local ypos = 16 + for i = 1, #lines do + texture = texture..generate_line(lines[i], ypos) + ypos = ypos + LINE_HEIGHT + end + return texture +end + local lcds = { -- on ceiling --* [0] = {delta = {x = 0, y = 0.4, z = 0}, pitch = math.pi / -2}, @@ -118,7 +200,7 @@ minetest.register_node("digilines:lcd", { end end, - digiline = + digiline = { receptor = {}, effector = { @@ -141,88 +223,6 @@ minetest.register_entity(":digilines_lcd:text", { end }) --- CONSTANTS -local LCD_WITH = 100 -local LCD_PADDING = 8 - -local LINE_LENGTH = 12 -local NUMBER_OF_LINES = 5 - -local LINE_HEIGHT = 14 -local CHAR_WIDTH = 5 - -create_lines = function(text) - local line = "" - local line_num = 1 - local tab = {} - for word in string.gmatch(text, "%S+") do - if string.len(line)+string.len(word) < LINE_LENGTH and word ~= "|" then - if line ~= "" then - line = line.." "..word - else - line = word - end - else - table.insert(tab, line) - if word ~= "|" then - line = word - else - line = "" - end - line_num = line_num+1 - if line_num > NUMBER_OF_LINES then - return tab - end - end - end - table.insert(tab, line) - return tab -end - -generate_texture = function(lines) - local texture = "[combine:"..LCD_WITH.."x"..LCD_WITH - local ypos = 16 - for i = 1, #lines do - texture = texture..generate_line(lines[i], ypos) - ypos = ypos + LINE_HEIGHT - end - return texture -end - -generate_line = function(s, ypos) - local i = 1 - local parsed = {} - local width = 0 - local chars = 0 - while chars < max_chars and i <= #s do - local file = nil - if charmap[s:sub(i, i)] ~= nil then - file = charmap[s:sub(i, i)] - i = i + 1 - elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then - file = charmap[s:sub(i, i + 1)] - i = i + 2 - else - print("[digilines] W: LCD: unknown symbol in '"..s.."' at "..i) - i = i + 1 - end - if file ~= nil then - width = width + CHAR_WIDTH - table.insert(parsed, file) - chars = chars + 1 - end - end - width = width - 1 - - local texture = "" - local xpos = math.floor((LCD_WITH - 2 * LCD_PADDING - width) / 2 + LCD_PADDING) - for i = 1, #parsed do - texture = texture..":"..xpos..","..ypos.."="..parsed[i]..".png" - xpos = xpos + CHAR_WIDTH + 1 - end - return texture -end - minetest.register_craft({ output = "digilines:lcd 2", recipe = { |