Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- inv_client_loop.lua (Advanced Wireless Pocket Computer)
- local PROTO = "inv"
- local REFRESH = 2 -- seconds
- local side = peripheral.getName(peripheral.find("modem")) or error("no modem")
- rednet.open(side)
- local items, top = {}, 1
- local function fetch()
- rednet.broadcast("list", PROTO)
- local id, resp = rednet.receive(PROTO, 3)
- if id and type(resp) == "table" then items = resp end
- end
- local function draw()
- term.clear()
- term.setCursorPos(1,1)
- print(("Items (%d) — %s"):format(#items, textutils.formatTime(os.clock(), true)))
- print(("-"):rep(28))
- local w,h = term.getSize()
- local visible = h - 3
- for i = 0, visible-1 do
- local row = items[top + i]
- if not row then break end
- term.setCursorPos(1, 3 + i)
- print(("%-24s x%d"):format(row.name or "?", row.count or 0))
- end
- term.setCursorPos(1, h)
- print("[Q] quit [↑/↓] scroll")
- end
- local function clampTop()
- local w,h = term.getSize()
- local visible = h - 3
- if top < 1 then top = 1 end
- local maxTop = math.max(1, #items - visible + 1)
- if top > maxTop then top = maxTop end
- end
- -- main loop
- while true do
- fetch()
- clampTop()
- draw()
- -- wait up to REFRESH seconds for input; otherwise refresh again
- local t = os.startTimer(REFRESH)
- while true do
- local e, a = os.pullEvent()
- if e == "timer" and a == t then
- break
- elseif e == "key" then
- if a == keys.q then
- term.clear(); term.setCursorPos(1,1); return
- elseif a == keys.up then
- top = top - 1; clampTop(); draw()
- elseif a == keys.down then
- top = top + 1; clampTop(); draw()
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment