Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if not objectManager then
- if not os.loadAPI("objectManager") then
- error("could not load objectManager API")
- end
- end
- local manager = objectManager.new(term.current(), colours.black)
- local function createObjectFunctions(objectID)
- local lastClickX, lastClickY = false, false
- local lastDragX, lastDragY = false, false
- local object = manager:GetObject(objectID)
- local function click(button, xPos, yPos)
- if lastClickX and lastClickY then
- local text, textColour, backgroundColour = object:GetCoord(lastClickX, lastClickY)
- object:SetCoord(lastClickX, lastClickY, " ", textColour, backgroundColour)
- end
- lastClickX, lastClickY = xPos, yPos
- lastDragX, lastDragY = xPos, yPos
- local text, textColour, backgroundColour = object:GetCoord(xPos, yPos)
- if button == 1 then
- object:SetCoord(xPos, yPos, "L", textColour, backgroundColour)
- object:ToFront()
- object:SetCursorPos(xPos, yPos)
- manager:SetActive(objectID)
- elseif button == 2 then
- object:SetCoord(xPos, yPos, "R", textColour, backgroundColour)
- object:ToBack()
- end
- end
- local function drag(button, xPos, yPos)
- local xOffset, yOffset = object:GetOffset()
- object:SetOffset(xOffset + (xPos - lastClickX), yOffset + (yPos - lastClickY))
- lastDragX, lastDragY = xPos, yPos
- end
- local function release(button, xPos, yPos)
- if lastClickX and lastClickY then
- local text, textColour, backgroundColour = object:GetCoord(lastClickX, lastClickY)
- object:SetCoord(lastClickX, lastClickY, " ", textColour, backgroundColour)
- end
- lastClickX, lastClickY = false, false
- lastDragX, lastDragY = false, false
- end
- local function scroll(direction, xPos, yPos)
- object:ToFront()
- local xOffset, yOffset = object:GetOffset()
- if direction == -1 then
- object:SetOffset(xOffset, yOffset - 1)
- elseif direction == 1 then
- object:SetOffset(xOffset, yOffset + 1)
- end
- end
- return click, drag, release, scroll
- end
- local object1, object2, object3
- local clickObject1, clickObject2, clickObject3
- local dragObject1, dragObject2, dragObject3
- local releaseObject1, releaseObject2, releaseObject3
- local scrollObject1, scrollObject2, scrollObject3
- local function refreshObjects()
- for i = 1, 10 do
- for j = 1, 10 do
- if math.random(1, 1000) > 250 then
- object1:SetCoord(i, j, " ", colours.black, colours.red)
- object1:SetOnClick(i, j, clickObject1)
- object1:SetOnScroll(i, j, scrollObject1)
- object1:SetCursorPos(i, j)
- else
- object1:SetCoord(i, j, "X", colours.black, colours.red)
- object1:SetOnClick(i, j, false)
- object1:SetOnScroll(i, j, false)
- end
- if math.random(1, 1000) > 250 then
- object2:SetCoord(i, j, " ", colours.black, colours.white)
- object2:SetOnClick(i, j, clickObject2)
- object2:SetOnScroll(i, j, scrollObject2)
- object2:SetCursorPos(i, j)
- else
- object2:SetCoord(i, j, "X", colours.black, colours.white)
- object2:SetOnClick(i, j, false)
- object2:SetOnScroll(i, j, false)
- end
- if math.random(1, 1000) > 250 then
- object3:SetCoord(i, j, " ", colours.black, colours.orange)
- object3:SetOnClick(i, j, clickObject3)
- object3:SetOnScroll(i, j, scrollObject3)
- object3:SetCursorPos(i, j)
- else
- object3:SetCoord(i, j, "X", colours.black, colours.orange)
- object3:SetOnClick(i, j, false)
- object3:SetOnScroll(i, j, false)
- end
- end
- end
- end
- local function drawObjects()
- object1 = manager:AddObject(0, 0)
- object2 = manager:AddObject(9, 9)
- object3 = manager:AddObject(4, 4)
- manager:SetActive(object1.ID)
- clickObject1, dragObject1, releaseObject1, scrollObject1 = createObjectFunctions(object1.ID)
- clickObject2, dragObject2, releaseObject2, scrollObject2 = createObjectFunctions(object2.ID)
- clickObject3, dragObject3, releaseObject3, scrollObject3 = createObjectFunctions(object3.ID)
- object1:SetGeneralOnDrag(dragObject1)
- object2:SetGeneralOnDrag(dragObject2)
- object3:SetGeneralOnDrag(dragObject3)
- object1:SetGeneralOnRelease(releaseObject1)
- object2:SetGeneralOnRelease(releaseObject2)
- object3:SetGeneralOnRelease(releaseObject3)
- refreshObjects()
- object1:SetCursorBlink(true)
- object1:SetCursorColour(colours.black)
- object2:SetCursorBlink(true)
- object2:SetCursorColour(colours.black)
- object3:SetCursorBlink(true)
- object3:SetCursorColour(colours.black)
- end
- drawObjects()
- local havePopUp = false
- local lastObjectID = false
- while true do
- local event = {os.pullEvent()}
- if event[1] == "mouse_click" then
- local objectID = manager:GetObjectOnClickAtCoord(event[3], event[4])
- if objectID then
- lastObjectID = objectID
- local object = manager:GetObject(objectID)
- if object then
- local onClick = object:GetOnClick(event[3] - object.xOffset, event[4] - object.yOffset)
- if onClick then
- onClick(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
- end
- end
- else
- lastObjectID = false
- end
- elseif event[1] == "mouse_drag" then
- local width, height = manager:GetSize()
- if event[3] >= 1 and event[3] <= width and event[4] >= 1 and event[4] <= height then
- if lastObjectID then
- local object = manager:GetObject(lastObjectID)
- if object then
- local onDrag = object:GetOnDrag(event[3] - object.xOffset, event[4] - object.yOffset)
- if not onDrag then
- onDrag = object:GetGeneralOnDrag()
- end
- if onDrag then
- onDrag(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
- end
- end
- end
- end
- elseif event[1] == "mouse_up" then
- if lastObjectID then
- local object = manager:GetObject(lastObjectID)
- if object then
- local onRelease = object:GetOnRelease(event[3] - object.xOffset, event[4] - object.yOffset)
- if not onRelease then
- onRelease = object:GetGeneralOnRelease()
- end
- if onRelease then
- onRelease(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
- end
- end
- end
- elseif event[1] == "mouse_scroll" then
- local objectID = manager:GetObjectOnScrollAtCoord(event[3], event[4])
- if objectID then
- lastObjectID = objectID
- local object = manager:GetObject(objectID)
- local onScroll = object:GetOnScroll(event[3] - object.xOffset, event[4] - object.yOffset)
- if onScroll then
- onScroll(event[2], event[3] - object.xOffset, event[4] - object.yOffset)
- end
- end
- elseif event[1] == "key" then
- if event[2] == keys.backspace then
- break
- end
- elseif event[1] == "char" then
- if event[2] == "r" then
- if object1 then
- refreshObjects()
- end
- elseif event[2] == "c" then
- lastObjectID = false
- object1, object2, object3 = nil, nil, nil
- clickObject1, clickObject2, clickObject3 = false, false, false
- dragObject1, dragObject2, dragObject3 = false, false, false
- releaseObject1, releaseObject2, releaseObject3 = false, false, false
- scrollObject1,scrollObject2, scrollObject3 = false, false, false
- manager:RemoveAllObjects()
- havePopUp = false
- elseif event[2] == "d" and not object1 then
- drawObjects()
- elseif event[2] == "p" and not havePopUp then
- havePopUp = true
- local popUp = manager:AddObject(0, 0, 1)
- local width, height = manager:GetSize()
- local function clearPopUp()
- manager:RemoveObject(popUp.ID)
- havePopUp = false
- end
- local function drawPixel(button)
- if button == 1 then
- local xPos, yPos = math.random(1, width), math.random(1, height)
- popUp:SetCoord(xPos, yPos, "X", colours.black, colours.green)
- popUp:SetOnClick(xPos, yPos, clearPopUp)
- popUp:ToFront()
- elseif button == 2 then
- popUp:ToBack()
- end
- end
- for i = 1, width do
- for j = 1, height do
- popUp:SetOnClick(i, j, drawPixel)
- popUp:SetOnScroll(i, j, drawPixel)
- end
- end
- elseif event[2] == "s" then
- local width, height = manager.term.getSize()
- manager:SetSize(math.floor(width/2), math.floor(height/2))
- elseif event[2] == "b" then
- local width, height = manager.term.getSize()
- manager:SetSize(width, height)
- elseif event[2] == "z" then
- manager:SetSize(0, 0)
- elseif event[2] == "v" then
- if object1 then
- object1:SetVisible(not object1:GetVisible())
- end
- end
- end
- end
- term.setBackgroundColour(colours.black)
- term.clear()
- term.setCursorPos(1, 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement