Compare commits
No commits in common. "9789676cad318678da87ca9991cf86ecb21791a0" and "59c9c151ce1f0d7c6be4661c6b382f92c9509e84" have entirely different histories.
9789676cad
...
59c9c151ce
2 changed files with 0 additions and 195 deletions
|
@ -1,131 +0,0 @@
|
||||||
local function new_config(name)
|
|
||||||
local path = "/etc/" .. name
|
|
||||||
|
|
||||||
local function read_key_in_line(line, key)
|
|
||||||
local prefix = key .. ":"
|
|
||||||
local prefix_len = string.len(prefix)
|
|
||||||
local actual = string.sub(line, 0, prefix_len)
|
|
||||||
if not (prefix == actual) then return nil end
|
|
||||||
local value = string.sub(line, prefix_len + 1)
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get(key, default)
|
|
||||||
local file = fs.open(path, "r")
|
|
||||||
if file == nil then return default end
|
|
||||||
while true do
|
|
||||||
local line = file.readLine()
|
|
||||||
if line == nil then return default end
|
|
||||||
local value = read_key_in_line(line, key)
|
|
||||||
if not (value == nil) then return value end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_num(key, default)
|
|
||||||
local str = get(key, nil)
|
|
||||||
if str == nil then return default end
|
|
||||||
local result = tonumber(str)
|
|
||||||
if result == nil then
|
|
||||||
error("Tried to parse conf '" .. path .. "'\nkey \"" .. key .. "\": \"" .. str .. "\" as number.")
|
|
||||||
end
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
return { get = get, get_num = get_num }
|
|
||||||
end
|
|
||||||
|
|
||||||
local function item_list_to_map(item_list)
|
|
||||||
local result_ = {}
|
|
||||||
for _, item in pairs(item_list) do
|
|
||||||
local name = item.name
|
|
||||||
result_[name] = item.amount
|
|
||||||
end
|
|
||||||
return result_
|
|
||||||
end
|
|
||||||
|
|
||||||
local function diff_items(prev_item_map, item_map)
|
|
||||||
local diff = {}
|
|
||||||
for name, amount in pairs(item_map) do
|
|
||||||
local prev_amount = prev_item_map[name]
|
|
||||||
if prev_amount == nil then
|
|
||||||
diff[#diff + 1] = { name = name, amount = amount }
|
|
||||||
else
|
|
||||||
local item_diff = amount - prev_amount
|
|
||||||
if not (item_diff == 0) then
|
|
||||||
diff[#diff + 1] = { name = name, amount = item_diff }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return diff
|
|
||||||
end
|
|
||||||
|
|
||||||
local function add_frame_item_pos(frame, max)
|
|
||||||
for _, item in pairs(frame) do
|
|
||||||
item.pos = math.random(max)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function display_name(complete)
|
|
||||||
local index = string.find(complete, ":")
|
|
||||||
local name = string.sub(complete, index + 1)
|
|
||||||
local initials = string.sub(name, 1, 2)
|
|
||||||
local last_found = 1
|
|
||||||
while true do
|
|
||||||
local index_ = string.find(name, "_", last_found)
|
|
||||||
if index_ == nil then break end
|
|
||||||
last_found = index_ + 1
|
|
||||||
initials = initials .. "_" .. string.sub(name, last_found, last_found + 1)
|
|
||||||
end
|
|
||||||
return initials
|
|
||||||
end
|
|
||||||
|
|
||||||
local function main()
|
|
||||||
local ae = peripheral.find("meBridge")
|
|
||||||
if ae == nil then
|
|
||||||
print("ME bridge not found")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local monitor = peripheral.find("monitor")
|
|
||||||
if monitor == nil then
|
|
||||||
print("Monitor not found")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
monitor.setTextScale(0.5)
|
|
||||||
local width, height = monitor.getSize()
|
|
||||||
local delay = new_config("me-matrix").get_num("delay", 0.1)
|
|
||||||
print("Running with: res (", width, ",", height, "), delay ", delay, "s")
|
|
||||||
|
|
||||||
local prev_item_map = item_list_to_map(ae.listItems())
|
|
||||||
local frames = {}
|
|
||||||
local iteration = 0
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
local item_map = item_list_to_map(ae.listItems())
|
|
||||||
local frame = diff_items(prev_item_map, item_map)
|
|
||||||
prev_item_map = item_map
|
|
||||||
|
|
||||||
add_frame_item_pos(frame, width)
|
|
||||||
table.insert(frames, 1, frame)
|
|
||||||
table.remove(frames, height + 1)
|
|
||||||
|
|
||||||
monitor.clear()
|
|
||||||
for frame_index, frame_ in ipairs(frames) do
|
|
||||||
for _, item in ipairs(frame_) do
|
|
||||||
monitor.setCursorPos(item.pos, frame_index)
|
|
||||||
if item.amount > 0 then
|
|
||||||
monitor.setTextColour(colors.lightBlue)
|
|
||||||
else
|
|
||||||
monitor.setTextColour(colors.purple)
|
|
||||||
end
|
|
||||||
monitor.write(display_name(item.name))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
iteration = iteration + 1
|
|
||||||
if iteration % 10 == 0 then print("Iteration", iteration) end
|
|
||||||
os.sleep(delay)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
|
@ -1,64 +0,0 @@
|
||||||
local function dbg(item)
|
|
||||||
local function indent(indentation)
|
|
||||||
return string.rep(" ", indentation)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function dbg_indent(item_, indentation)
|
|
||||||
local result = ""
|
|
||||||
if type(item_) == "table" then
|
|
||||||
result = "{"
|
|
||||||
for key, value in pairs(item_) do
|
|
||||||
result = result
|
|
||||||
.. "\n" .. indent(indentation + 1)
|
|
||||||
.. dbg_indent(key, indentation + 1) .. ": "
|
|
||||||
.. dbg_indent(value, indentation + 1)
|
|
||||||
end
|
|
||||||
result = result
|
|
||||||
.. "\n" .. indent(indentation) .. "}"
|
|
||||||
elseif type(item_) == "string" then
|
|
||||||
result = "\"" .. item_ .. "\""
|
|
||||||
else
|
|
||||||
result = tostring(item_)
|
|
||||||
end
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
print(dbg_indent(item, 0))
|
|
||||||
return item
|
|
||||||
end
|
|
||||||
|
|
||||||
local function new_config(name)
|
|
||||||
local path = "/etc/" .. name
|
|
||||||
|
|
||||||
local function read_key_in_line(line, key)
|
|
||||||
local prefix = key .. ":"
|
|
||||||
local prefix_len = string.len(prefix)
|
|
||||||
local actual = string.sub(line, 0, prefix_len)
|
|
||||||
if not (prefix == actual) then return nil end
|
|
||||||
local value = string.sub(line, prefix_len + 1)
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get(key, default)
|
|
||||||
local file = fs.open(path, "r")
|
|
||||||
if file == nil then return default end
|
|
||||||
while true do
|
|
||||||
local line = file.readLine()
|
|
||||||
if line == nil then return default end
|
|
||||||
local value = read_key_in_line(line, key)
|
|
||||||
if not (value == nil) then return value end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_num(key, default)
|
|
||||||
local str = get(key, nil)
|
|
||||||
if str == nil then return default end
|
|
||||||
local result = tonumber(str)
|
|
||||||
if result == nil then
|
|
||||||
error("Tried to parse conf '" .. path .. "'\nkey \"" .. key .. "\": \"" .. str .. "\" as number.")
|
|
||||||
end
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
return { get = get, get_num = get_num }
|
|
||||||
end
|
|
Loading…
Add table
Add a link
Reference in a new issue