Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- os.unloadAPI("buffer")
- os.loadAPI("buffer")
- local width,height = 51,19
- local buf = buffer.new(width,height,1,1,term.current())
- local oldTerm = term.redirect(buf:redirect())
- local args = {...}
- local programPath = args[1]
- local func = loadfile(programPath)
- local programCoroutine = coroutine.create(func)
- local bufferMoveCoroutine = coroutine.create(function()
- while true do
- local evt = {coroutine.yield()}
- if(evt[2] == keys.up) then
- buf.y = buf.y-1
- elseif(evt[2] == keys.down) then
- buf.y = buf.y+1
- elseif(evt[2] == keys.left) then
- buf.x = buf.x-1
- elseif(evt[2] == keys.right) then
- buf.x = buf.x+1
- end
- end
- end)
- local function translate(evt)
- local e = evt
- if(evt[1] == "mouse_click" or evt[1] == "mouse_drag") then
- e[3] = e[3]+(buf.x-1)
- e[4] = e[4]+(buf.y-1)
- end
- return e
- end
- --manage the coroutines
- local expectedFromProgram = nil
- local keepRunning = true
- while keepRunning do
- buf:render()
- local evt = {os.pullEvent()}
- local t = evt[1]
- if(expectedFromProgram == nil or expectedFromProgram == t) then
- _,expectedFromProgram = coroutine.resume(programCoroutine,unpack(translate(evt)))
- end
- if(t=="key") then
- coroutine.resume(bufferMoveCoroutine,unpack(evt))
- end
- keepRunning = coroutine.status(programCoroutine) ~= "dead"
- end
- --get back to old term
- term.redirect(oldTerm)
Advertisement
Add Comment
Please, Sign In to add comment