31-color support

This commit is contained in:
Vanessa Dannenberg 2018-08-15 10:45:40 -04:00
parent 54b5ac53ad
commit bb9f8575bc
6 changed files with 55 additions and 47 deletions

@ -31,7 +31,15 @@ The panels also respond to these control messages:
* "off_multi" turns all panels in a lineup off * "off_multi" turns all panels in a lineup off
* "allon_multi" turns on all LEDs of all panels in a lineup. * "allon_multi" turns on all LEDs of all panels in a lineup.
A byte value of 0 to 7 will change colors (i.e. string.char(0 to 7) ). You can select from red (0), orange, yellow, green, cyan, blue, purple, or magenta (7). The left-most/"master" panel will remember the last color used, and defaults to red. A byte value of 0 to 30 will change colors (i.e. string.char(0 to 30) ). Color values 0 to 11 are:
Red (0), orange, yellow, lime, green, aqua, cyan, sky blue, blue, violet, magenta, or red-violet (11)
Colors 12 to 23 are the same as 0 to 11, but lower brightness.
Colors 23 - 30 are white, light grey, medium grey, dim grey, light blue, brown, and pink.
The left-most/"master" panel will remember the last color used, and defaults to red.
You can use "get" and "getstr" to read the one character from the connected panel. These messages will not read the other panels in the lineup. You can use "get" and "getstr" to read the one character from the connected panel. These messages will not read the other panels in the lineup.

@ -12,7 +12,7 @@ end
local marquee_cbox = { local marquee_cbox = {
type = "fixed", type = "fixed",
fixed = { -16/32, -8/16, 15/32, 16/32, 8/16, 16/32 } fixed = { -16/32, -8/16, -16/32, 16/32, 8/16, -15/32 }
} }
-- the following functions based on the so-named ones in Jeija's digilines mod -- the following functions based on the so-named ones in Jeija's digilines mod
@ -54,7 +54,7 @@ local display_string = function(pos, channel, string)
string = allon string = allon
end end
local padded_string = string.sub(string..padding, 1, 64) local padded_string = string.sub(string..padding, 1, 64)
local fdir = minetest.get_node(pos).param2 % 4 local fdir = minetest.get_node(pos).param2 % 8
local pos2 = pos local pos2 = pos
local mastermeta = minetest.get_meta(pos) local mastermeta = minetest.get_meta(pos)
local lastcolor = mastermeta:get_int("lastcolor") local lastcolor = mastermeta:get_int("lastcolor")
@ -69,11 +69,11 @@ local display_string = function(pos, channel, string)
if not string.match(node.name, "led_marquee:char_") or (setchan ~= nil and setchan ~= "" and setchan ~= channel) then break end if not string.match(node.name, "led_marquee:char_") or (setchan ~= nil and setchan ~= "" and setchan ~= channel) then break end
local asc = string.byte(padded_string, i, i) local asc = string.byte(padded_string, i, i)
if (node.param2 % 4) == fdir and asc > 31 and asc < 130 then if (node.param2 % 8) == fdir and asc > 31 and asc < 130 then
minetest.swap_node(pos2, { name = "led_marquee:char_"..asc, param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos2, { name = "led_marquee:char_"..asc, param2 = (node.param2 % 8) + (lastcolor*8)})
pos2.x = pos2.x + fdir_to_right[fdir+1][1] pos2.x = pos2.x + fdir_to_right[fdir+1][1]
pos2.z = pos2.z + fdir_to_right[fdir+1][2] pos2.z = pos2.z + fdir_to_right[fdir+1][2]
elseif asc < 8 then elseif asc < 31 then
lastcolor = asc lastcolor = asc
mastermeta:set_int("lastcolor", asc) mastermeta:set_int("lastcolor", asc)
end end
@ -93,25 +93,25 @@ local on_digiline_receive_string = function(pos, node, channel, msg)
if msg and msg ~= "" and type(msg) == "string" then if msg and msg ~= "" and type(msg) == "string" then
if string.len(msg) > 1 then if string.len(msg) > 1 then
if msg == "off" then if msg == "off" then
minetest.swap_node(pos, { name = "led_marquee:char_32", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_32", param2 = (node.param2 % 8) + (lastcolor*8)})
elseif msg == "colon" then elseif msg == "colon" then
minetest.swap_node(pos, { name = "led_marquee:char_58", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_58", param2 = (node.param2 % 8) + (lastcolor*8)})
elseif msg == "period" then elseif msg == "period" then
minetest.swap_node(pos, { name = "led_marquee:char_46", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_46", param2 = (node.param2 % 8) + (lastcolor*8)})
elseif msg == "del" then elseif msg == "del" then
minetest.swap_node(pos, { name = "led_marquee:char_127", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_127", param2 = (node.param2 % 8) + (lastcolor*8)})
elseif msg == "allon" then elseif msg == "allon" then
minetest.swap_node(pos, { name = "led_marquee:char_128", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_128", param2 = (node.param2 % 8) + (lastcolor*8)})
elseif msg == "cursor" then elseif msg == "cursor" then
minetest.swap_node(pos, { name = "led_marquee:char_129", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_129", param2 = (node.param2 % 8) + (lastcolor*8)})
else else
display_string(pos, channel, msg) display_string(pos, channel, msg)
end end
else else
local asc = string.byte(msg) local asc = string.byte(msg)
if asc > 31 and asc < 130 then if asc > 31 and asc < 130 then
minetest.swap_node(pos, { name = "led_marquee:char_"..asc, param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_"..asc, param2 = (node.param2 % 8) + (lastcolor*8)})
elseif asc < 8 then elseif asc < 31 then
lastcolor = asc lastcolor = asc
meta:set_int("lastcolor", asc) meta:set_int("lastcolor", asc)
elseif msg == "get" then -- get value as ASCII numerical value elseif msg == "get" then -- get value as ASCII numerical value
@ -122,9 +122,9 @@ local on_digiline_receive_string = function(pos, node, channel, msg)
end end
elseif msg and type(msg) == "number" then elseif msg and type(msg) == "number" then
if msg == 0 then if msg == 0 then
minetest.swap_node(pos, { name = "led_marquee:char_32", param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_32", param2 = (node.param2 % 8) + (lastcolor*8)})
elseif msg > 31 and alnum_chars[msg - 31] ~= nil then elseif msg > 31 and alnum_chars[msg - 31] ~= nil then
minetest.swap_node(pos, { name = "led_marquee:char_"..tostring(msg), param2 = (node.param2 % 4) + (lastcolor*32)}) minetest.swap_node(pos, { name = "led_marquee:char_"..tostring(msg), param2 = (node.param2 % 8) + (lastcolor*8)})
end end
end end
end end
@ -165,7 +165,7 @@ for i = 32, 129 do
use_texture_alpha = true, use_texture_alpha = true,
groups = groups, groups = groups,
paramtype = "light", paramtype = "light",
paramtype2 = "colorfacedir", paramtype2 = "colorwallmounted",
light_source = light, light_source = light,
selection_box = marquee_cbox, selection_box = marquee_cbox,
collision_box = marquee_cbox, collision_box = marquee_cbox,

Binary file not shown.

Binary file not shown.

@ -1,30 +1,30 @@
# Blender v2.79 (sub 0) OBJ File: 'LED marquee.blend' # Blender v2.79 (sub 0) OBJ File: 'LED marquee.blend'
# www.blender.org # www.blender.org
o Cube_Cube_LEDs o Cube_Cube_LEDs
v 0.500000 -0.468750 0.453125 v -0.453125 -0.500000 -0.468750
v -0.500000 -0.468750 0.453125 v -0.453125 0.500000 -0.468750
v -0.500000 0.468750 0.453125 v -0.453125 0.500000 0.468750
v 0.500000 0.468750 0.453125 v -0.453125 -0.500000 0.468750
v 0.500000 -0.500000 0.437500 v -0.437500 -0.500000 -0.500000
v 0.500000 -0.484375 0.437500 v -0.437500 -0.500000 -0.484375
v 0.500000 -0.468750 0.453125 v -0.453125 -0.500000 -0.468750
v 0.500000 0.468750 0.453125 v -0.453125 -0.500000 0.468750
v 0.500000 0.484375 0.437500 v -0.437500 -0.500000 0.484375
v 0.500000 0.500000 0.437500 v -0.437500 -0.500000 0.500000
v 0.500000 0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.437500 v -0.500000 -0.500000 -0.500000
v -0.500000 0.484375 0.437500 v -0.500000 0.500000 0.500000
v -0.500000 0.468750 0.453125 v -0.500000 0.500000 -0.500000
v -0.500000 -0.468750 0.453125 v -0.437500 0.500000 0.500000
v -0.500000 -0.484375 0.437500 v -0.437500 0.500000 0.484375
v -0.500000 -0.500000 0.437500 v -0.453125 0.500000 0.468750
v 0.500000 -0.468750 0.449125 v -0.453125 0.500000 -0.468750
v -0.500000 -0.468750 0.449125 v -0.437500 0.500000 -0.484375
v -0.500000 0.468750 0.449125 v -0.437500 0.500000 -0.500000
v 0.500000 0.468750 0.449125 v -0.449125 -0.500000 -0.468750
v -0.449125 0.500000 -0.468750
v -0.449125 0.500000 0.468750
v -0.449125 -0.500000 0.468750
vt 0.667843 0.000000 vt 0.667843 0.000000
vt 0.667843 0.015513 vt 0.667843 0.015513
vt 0.681855 0.031026 vt 0.681855 0.031026
@ -73,14 +73,14 @@ vt 0.000000 0.000000
vt 1.000000 0.000000 vt 1.000000 0.000000
vt 1.000000 1.000000 vt 1.000000 1.000000
vt 0.000000 1.000000 vt 0.000000 1.000000
vn 1.0000 0.0000 -0.0000
vn 0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 0.0000
vn 0.0000 -1.0000 0.0000 vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000 vn -1.0000 -0.0000 -0.0000
vn -0.0000 0.0000 -1.0000 vn -0.0000 1.0000 0.0000
vn -0.0000 -0.7071 -0.7071 vn 0.0000 0.0000 -1.0000
vn -0.0000 0.7071 -0.7071 vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn 0.7071 0.0000 -0.7071
vn 0.7071 0.0000 0.7071
g Cube_Cube_LEDs_Cube_Cube_LEDs_base g Cube_Cube_LEDs_Cube_Cube_LEDs_base
s off s off
f 5/1/1 6/2/1 7/3/1 8/4/1 9/5/1 10/6/1 11/7/1 12/8/1 f 5/1/1 6/2/1 7/3/1 8/4/1 9/5/1 10/6/1 11/7/1 12/8/1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

After

Width:  |  Height:  |  Size: 131 B