Advertisement
Guest User

MouseAPI (Bubba) Update (1.6.4)

a guest
Aug 1st, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Credit to Mikeemoo for creating OpenPeripheral + OpenPeripheralAddons
  2. --API written by Bubba
  3.  
  4. local function load() --This function will automatically wrap the peripherals required for it to run
  5.     local prox
  6.     local bridge
  7.     for k,v in pairs(rs.getSides()) do
  8.         if peripheral.getType(v) == "sensor" then
  9.             prox = sensor.wrap(v)
  10.         elseif peripheral.getType(v) and string.match(peripheral.getType(v),"bridge") then
  11.             bridge = peripheral.wrap(v)
  12.         end
  13.     end
  14.     return prox, bridge
  15. end
  16.  
  17. local prox, bridge = load()
  18. if not prox then
  19.     print("This program requires an OpenPeripheral-Sensor in order to run")
  20.     return
  21. end
  22. if not bridge then
  23.     print("This program requires a terminal glasses bridge in order to run")
  24.     return
  25. end
  26.  
  27. scaleFactor = 3.0 --This variable controls the speed of the mouse. A higher number indicates a faster speed.
  28. screenX, screenY = 480, 255 --This is the size of your screen. You can adjust this manually or you can use the built-in function, getScreenSize
  29. mouseX, mouseY = 0,0 --These variables keep track of the mouse position as it moves.
  30.  
  31. local allTargets = {} --This will store the initial Yaw of the player so that the mouse can be centered on the screen
  32.  
  33. local function checkPlayer(name) --This function returns the distance from the left side of the screen as a percentage value
  34.     local target = prox.getPlayerData(name)
  35.     if not target then
  36.         return false
  37.     end
  38.  
  39.     return target.IsSneaking,
  40.     (scaleFactor * (target.Yaw - allTargets[name].Yaw)/180), -- X percentage
  41.     (scaleFactor * (target.Pitch/90)) -- Y percentage
  42. end
  43.  
  44. local mouseOBJ --This is where we create our mouse box
  45.  
  46. function startMouse(size, color, opacity, scale) --This populates the allTargets table and creates the mouse box
  47.     for name, data in pairs(prox.getTargets()) do
  48.         allTargets[name] = prox.getPlayerData(name)
  49.     end
  50.     mouseOBJ = bridge.addBox(1, 1, size,size, color, opacity)
  51.     scaleFactor = scale or scaleFactor
  52.     return true
  53.  
  54. end
  55. function resetMouse() --This recenters the mouse
  56.     for name, data in pairs(prox.getPlayerNames()) do
  57.         allTargets[name] = prox.getPlayerData(name)
  58.     end
  59. end
  60.  
  61. function setScreenSize(width, height) --Sets the screen size variables
  62.     screenX,screenY = width, height
  63. end
  64.  
  65. function setScaleFactor(scale) --Sets the mouse speed
  66.     scaleFactor = scale
  67. end
  68.  
  69. function waitForClick(username) --Draws/Updates the mouse and when the player sneaks returns their x/y coordinates
  70.     if not mouseOBJ then
  71.         return false
  72.     end
  73.     while true do
  74.         local isClicked, mX, mY = checkPlayer(username)
  75.         mouseX = math.floor(screenX/2) + math.floor(mX*screenX/2)
  76.         mouseY = math.floor(screenY/2) + math.floor(mY*screenY/2)
  77.         if isClicked then
  78.             return mouseX, mouseY
  79.         end
  80.         mouseOBJ.setX(mouseX)
  81.         mouseOBJ.setY(mouseY)
  82.     end
  83. end
  84.  
  85. function getScreenSize(username) --Creates a red box that moves along with the mouse in order to get the screen size easily.
  86.     for name, target in pairs(prox.getPlayerNames()) do
  87.         allTargets[name] = prox.getPlayerData(name)
  88.     end
  89.  
  90.     local sX, sY = 1,1
  91.     local screenObject = bridge.addBox(0,0,sX, sY, 0xCC0000, 0.4)
  92.     while true do
  93.         local isClicked, sfX, sfY = checkPlayer(username)
  94.         sX = math.floor(sfX*700)
  95.         sY = math.floor(sfY*400)
  96.  
  97.         screenObject.setWidth(sX)
  98.         screenObject.setHeight(sY)
  99.         if isClicked then
  100.             screenObject.delete()
  101.             return sX, sY
  102.         end
  103.     end
  104. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement