Guest User

Untitled

a guest
Oct 31st, 2015
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.39 KB | None | 0 0
  1. os.unloadAPI("buffer")
  2. os.loadAPI("buffer")
  3.  
  4. local width,height = 51,19
  5.  
  6. local buf = buffer.new(width,height,1,1,term.current())
  7. local oldTerm = term.redirect(buf:redirect())
  8.  
  9. local args = {...}
  10. local programPath = args[1]
  11. local func = loadfile(programPath)
  12.  
  13. local programCoroutine = coroutine.create(func)
  14. local bufferMoveCoroutine = coroutine.create(function()
  15.   while true do
  16.     local evt = {coroutine.yield()}
  17.     if(evt[2] == keys.up) then
  18.       buf.y = buf.y-1
  19.     elseif(evt[2] == keys.down) then
  20.       buf.y = buf.y+1
  21.     elseif(evt[2] == keys.left) then
  22.       buf.x = buf.x-1
  23.     elseif(evt[2] == keys.right) then
  24.       buf.x = buf.x+1
  25.     end
  26.   end
  27. end)
  28.  
  29. local function translate(evt)
  30.   local e = evt
  31.   if(evt[1] == "mouse_click" or evt[1] == "mouse_drag") then
  32.     e[3] = e[3]+(buf.x-1)
  33.     e[4] = e[4]+(buf.y-1)
  34.   end
  35.   return e
  36. end
  37.  
  38. --manage the coroutines
  39. local expectedFromProgram = nil
  40. local keepRunning = true
  41. while keepRunning do
  42.   buf:render()
  43.   local evt = {os.pullEvent()}
  44.   local t = evt[1]
  45.   if(expectedFromProgram == nil or expectedFromProgram == t) then
  46.     _,expectedFromProgram = coroutine.resume(programCoroutine,unpack(translate(evt)))
  47.   end
  48.   if(t=="key") then
  49.     coroutine.resume(bufferMoveCoroutine,unpack(evt))
  50.   end
  51.   keepRunning = coroutine.status(programCoroutine) ~= "dead"
  52. end
  53.  
  54. --get back to old term
  55. term.redirect(oldTerm)
Advertisement
Add Comment
Please, Sign In to add comment