Advertisement
blunty666

objectManagerTest

Aug 29th, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.17 KB | None | 0 0
  1. if not objectManager then
  2.     if not os.loadAPI("objectManager") then
  3.         error("could not load objectManager API")
  4.     end
  5. end
  6.  
  7. local manager = objectManager.new(term.current(), colours.black)
  8.  
  9. local function createObjectFunctions(objectID)
  10.     local lastClickX, lastClickY = false, false
  11.     local lastDragX, lastDragY = false, false
  12.    
  13.     local object = manager:GetObject(objectID)
  14.    
  15.     local function click(button, xPos, yPos)
  16.         if lastClickX and lastClickY then
  17.             local text, textColour, backgroundColour = object:GetCoord(lastClickX, lastClickY)
  18.             object:SetCoord(lastClickX, lastClickY, " ", textColour, backgroundColour)
  19.         end
  20.         lastClickX, lastClickY = xPos, yPos
  21.         lastDragX, lastDragY = xPos, yPos
  22.         local text, textColour, backgroundColour = object:GetCoord(xPos, yPos)
  23.         if button == 1 then
  24.             object:SetCoord(xPos, yPos, "L", textColour, backgroundColour)
  25.             object:ToFront()
  26.             object:SetCursorPos(xPos, yPos)
  27.             manager:SetActive(objectID)
  28.         elseif button == 2 then
  29.             object:SetCoord(xPos, yPos, "R", textColour, backgroundColour)
  30.             object:ToBack()
  31.         end
  32.     end
  33.    
  34.     local function drag(button, xPos, yPos)
  35.         local xOffset, yOffset = object:GetOffset()
  36.         object:SetOffset(xOffset + (xPos - lastClickX), yOffset + (yPos - lastClickY))
  37.         lastDragX, lastDragY = xPos, yPos
  38.     end
  39.    
  40.     local function release(button, xPos, yPos)
  41.         if lastClickX and lastClickY then
  42.             local text, textColour, backgroundColour = object:GetCoord(lastClickX, lastClickY)
  43.             object:SetCoord(lastClickX, lastClickY, " ", textColour, backgroundColour)
  44.         end
  45.         lastClickX, lastClickY = false, false
  46.         lastDragX, lastDragY = false, false
  47.     end
  48.    
  49.     local function scroll(direction, xPos, yPos)
  50.         object:ToFront()
  51.         local xOffset, yOffset = object:GetOffset()
  52.         if direction == -1 then
  53.             object:SetOffset(xOffset, yOffset - 1)
  54.         elseif direction == 1 then
  55.             object:SetOffset(xOffset, yOffset + 1)
  56.         end
  57.     end
  58.    
  59.     return click, drag, release, scroll
  60. end
  61.  
  62. local object1, object2, object3
  63. local clickObject1, clickObject2, clickObject3
  64. local dragObject1, dragObject2, dragObject3
  65. local releaseObject1, releaseObject2, releaseObject3
  66. local scrollObject1, scrollObject2, scrollObject3
  67.  
  68. local function refreshObjects()
  69.     for i = 1, 10 do
  70.         for j = 1, 10 do
  71.             if math.random(1, 1000) > 250 then
  72.                 object1:SetCoord(i, j, " ", colours.black, colours.red)
  73.                 object1:SetOnClick(i, j, clickObject1)
  74.                 object1:SetOnScroll(i, j, scrollObject1)
  75.                 object1:SetCursorPos(i, j)
  76.             else
  77.                 object1:SetCoord(i, j, "X", colours.black, colours.red)
  78.                 object1:SetOnClick(i, j, false)
  79.                 object1:SetOnScroll(i, j, false)
  80.             end
  81.             if math.random(1, 1000) > 250 then
  82.                 object2:SetCoord(i, j, " ", colours.black, colours.white)
  83.                 object2:SetOnClick(i, j, clickObject2)
  84.                 object2:SetOnScroll(i, j, scrollObject2)
  85.                 object2:SetCursorPos(i, j)
  86.             else
  87.                 object2:SetCoord(i, j, "X", colours.black, colours.white)
  88.                 object2:SetOnClick(i, j, false)
  89.                 object2:SetOnScroll(i, j, false)
  90.             end
  91.             if math.random(1, 1000) > 250 then
  92.                 object3:SetCoord(i, j, " ", colours.black, colours.orange)
  93.                 object3:SetOnClick(i, j, clickObject3)
  94.                 object3:SetOnScroll(i, j, scrollObject3)
  95.                 object3:SetCursorPos(i, j)
  96.             else
  97.                 object3:SetCoord(i, j, "X", colours.black, colours.orange)
  98.                 object3:SetOnClick(i, j, false)
  99.                 object3:SetOnScroll(i, j, false)
  100.             end
  101.         end
  102.     end
  103. end
  104.  
  105. local function drawObjects()
  106.     object1 = manager:AddObject(0, 0)
  107.     object2 = manager:AddObject(9, 9)
  108.     object3 = manager:AddObject(4, 4)
  109.  
  110.     manager:SetActive(object1.ID)
  111.    
  112.     clickObject1, dragObject1, releaseObject1, scrollObject1 = createObjectFunctions(object1.ID)
  113.     clickObject2, dragObject2, releaseObject2, scrollObject2 = createObjectFunctions(object2.ID)
  114.     clickObject3, dragObject3, releaseObject3, scrollObject3 = createObjectFunctions(object3.ID)
  115.    
  116.     object1:SetGeneralOnDrag(dragObject1)
  117.     object2:SetGeneralOnDrag(dragObject2)
  118.     object3:SetGeneralOnDrag(dragObject3)
  119.     object1:SetGeneralOnRelease(releaseObject1)
  120.     object2:SetGeneralOnRelease(releaseObject2)
  121.     object3:SetGeneralOnRelease(releaseObject3)
  122.  
  123.     refreshObjects()
  124.  
  125.     object1:SetCursorBlink(true)
  126.     object1:SetCursorColour(colours.black)
  127.     object2:SetCursorBlink(true)
  128.     object2:SetCursorColour(colours.black)
  129.     object3:SetCursorBlink(true)
  130.     object3:SetCursorColour(colours.black)
  131. end
  132.  
  133. drawObjects()
  134.  
  135. local havePopUp = false
  136. local lastObjectID = false
  137. while true do
  138.     local event = {os.pullEvent()}
  139.     if event[1] == "mouse_click" then
  140.         local objectID = manager:GetObjectOnClickAtCoord(event[3], event[4])
  141.         if objectID then
  142.             lastObjectID = objectID
  143.             local object = manager:GetObject(objectID)
  144.             if object then
  145.                 local onClick = object:GetOnClick(event[3] - object.xOffset, event[4] - object.yOffset)
  146.                 if onClick then
  147.                     onClick(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
  148.                 end
  149.             end
  150.         else
  151.             lastObjectID = false
  152.         end
  153.     elseif event[1] == "mouse_drag" then
  154.         local width, height = manager:GetSize()
  155.         if event[3] >= 1 and event[3] <= width and event[4] >= 1 and event[4] <= height then
  156.             if lastObjectID then
  157.                 local object = manager:GetObject(lastObjectID)
  158.                 if object then
  159.                     local onDrag = object:GetOnDrag(event[3] - object.xOffset, event[4] - object.yOffset)
  160.                     if not onDrag then
  161.                         onDrag = object:GetGeneralOnDrag()
  162.                     end
  163.                     if onDrag then
  164.                         onDrag(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
  165.                     end
  166.                 end
  167.             end
  168.         end
  169.     elseif event[1] == "mouse_up" then
  170.         if lastObjectID then
  171.             local object = manager:GetObject(lastObjectID)
  172.             if object then
  173.                 local onRelease = object:GetOnRelease(event[3] - object.xOffset, event[4] - object.yOffset)
  174.                 if not onRelease then
  175.                     onRelease = object:GetGeneralOnRelease()
  176.                 end
  177.                 if onRelease then
  178.                     onRelease(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
  179.                 end
  180.             end
  181.         end
  182.     elseif event[1] == "mouse_scroll" then
  183.         local objectID = manager:GetObjectOnScrollAtCoord(event[3], event[4])
  184.         if objectID then
  185.             lastObjectID = objectID
  186.             local object = manager:GetObject(objectID)
  187.             local onScroll = object:GetOnScroll(event[3] - object.xOffset, event[4] - object.yOffset)
  188.             if onScroll then
  189.                 onScroll(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
  190.             end
  191.         end
  192.     elseif event[1] == "key" then
  193.         if event[2] == keys.backspace then
  194.             break
  195.         end
  196.     elseif event[1] == "char" then
  197.         if event[2] == "r" then
  198.             if object1 then
  199.                 refreshObjects()
  200.             end
  201.         elseif event[2] == "c" then
  202.             lastObjectID = false
  203.             object1, object2, object3 = nil, nil, nil
  204.             clickObject1, clickObject2, clickObject3 = false, false, false
  205.             dragObject1, dragObject2, dragObject3 = false, false, false
  206.             releaseObject1, releaseObject2, releaseObject3 = false, false, false
  207.             scrollObject1,scrollObject2, scrollObject3 = false, false, false
  208.             manager:RemoveAllObjects()
  209.             havePopUp = false
  210.         elseif event[2] == "d" and not object1 then
  211.             drawObjects()
  212.         elseif event[2] == "p" and not havePopUp then
  213.             havePopUp = true
  214.             local popUp = manager:AddObject(0, 0, 1)
  215.             local width, height = manager:GetSize()
  216.             local function clearPopUp()
  217.                 manager:RemoveObject(popUp.ID)
  218.                 havePopUp = false
  219.             end
  220.             local function drawPixel(button)
  221.                 if button == 1 then
  222.                     local xPos, yPos = math.random(1, width), math.random(1, height)
  223.                     popUp:SetCoord(xPos, yPos, "X", colours.black, colours.green)
  224.                     popUp:SetOnClick(xPos, yPos, clearPopUp)
  225.                     popUp:ToFront()
  226.                 elseif button == 2 then
  227.                     popUp:ToBack()
  228.                 end
  229.             end
  230.             for i = 1, width do
  231.                 for j = 1, height do
  232.                     popUp:SetOnClick(i, j, drawPixel)
  233.                     popUp:SetOnScroll(i, j, drawPixel)
  234.                 end
  235.             end
  236.         elseif event[2] == "s" then
  237.             local width, height = manager.term.getSize()
  238.             manager:SetSize(math.floor(width/2), math.floor(height/2))
  239.         elseif event[2] == "b" then
  240.             local width, height = manager.term.getSize()
  241.             manager:SetSize(width, height)
  242.         elseif event[2] == "z" then
  243.             manager:SetSize(0, 0)
  244.         elseif event[2] == "v" then
  245.             if object1 then
  246.                 object1:SetVisible(not object1:GetVisible())
  247.             end
  248.         end
  249.     end
  250. end
  251.  
  252. term.setBackgroundColour(colours.black)
  253. term.clear()
  254. term.setCursorPos(1, 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement