add a command to immediately scroll the displayed message by one step

to be used in lieu of the three existing auto-scroll commands in case
you want the LuaC to handle the stepping.
This commit is contained in:
Vanessa Dannenberg 2018-08-17 09:49:26 -04:00
parent d47f2746d7
commit 81a06dc054
2 changed files with 8 additions and 2 deletions

View File

@ -46,6 +46,7 @@ The panels also respond to these control messages:
* "start_scroll" starts the last-displayed message scrolling to the left, automatically moving, and automatically re-starting. The scroll action will spread across and down a multi-line wall (just set a new, different channel on the first row you want to exclude).
* "stop_scroll" actually does nothing, since all printable messages automatically stop the timer, but it's a human-readable way to indicate it.
* "scroll_speed" followed by a decimal number (in the string, not a byte value) sets the time between scroll steps. Minimum 0.5s, maximum 5s.
* "scroll_step" will immediately advance the last-displayed message by one character. Omit the "start_scroll" and "scroll_speed" keywords, and use this instead if you want to let your LuaController control the scrolling speed.
If you need vertical scrolling, you will have to handle that yourself (since the size of a screen/wall is not hard-coded).

View File

@ -175,13 +175,14 @@ local on_digiline_receive_string = function(pos, node, channel, msg)
if setchan ~= channel then return end
if msg and msg ~= "" and type(msg) == "string" then
led_marquee.set_timer(pos, 0)
if string.len(msg) > 1 then
if msg == "off_multi" or msg == "clear" then
led_marquee.set_timer(pos, 0)
msg = string.rep(" ", 1024)
meta:set_string("last_msg", msg)
led_marquee.display_msg(pos, channel, msg)
elseif msg == "allon_multi" then
led_marquee.set_timer(pos, 0)
msg = string.rep(string.char(144), 1024)
meta:set_string("last_msg", msg)
led_marquee.display_msg(pos, channel, msg)
@ -190,13 +191,17 @@ local on_digiline_receive_string = function(pos, node, channel, msg)
if not timeout or timeout < 0.5 or timeout > 5 then timeout = 0 end
led_marquee.set_timer(pos, timeout)
elseif msg == "stop_scroll" then
return -- (the timer is already stopped by receipt of a message)
led_marquee.set_timer(pos, 0)
return
elseif string.sub(msg, 1, 12) == "scroll_speed" then
local timeout = tonumber(string.sub(msg, 13))
if not timeout or timeout < 0.5 or timeout > 5 then timeout = 0 end
meta:set_int("timeout", timeout)
led_marquee.set_timer(pos, timeout)
elseif msg == "scroll_step" then
led_marquee.scroll_text(pos)
else
led_marquee.set_timer(pos, 0)
meta:set_string("last_msg", msg)
led_marquee.display_msg(pos, channel, msg)
end