Guest User

Untitled

a guest
Sep 28th, 2012
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.60 KB | None | 0 0
  1. -- Made by Shiftedview
  2. -- http://www.computercraft.info/forums2/index.php?/topic/3139-ccsensor-console-loop/
  3. os.unloadAPI("sensors");
  4. os.unloadAPI("sensorsUI");
  5. os.loadAPI("/rom/apis/sensors");
  6. os.loadAPI("/rom/apis/sensorsUI");
  7. local writeAt=sensorsUI.writeAt
  8. local tArgs={...};
  9. local sizeX, sizeY = term.getSize()
  10.  
  11. function dispReadings(x,y,title,tData,maxlen,rows)
  12. writeAt(x,y,title..":");
  13. local page=1;
  14. local erow=rows*page;
  15. local r=1;
  16. for i,v in pairs(tData) do
  17.   writeAt(x+1,y+r,string.sub(tostring(i)..":"..tostring(v),1,maxlen));
  18.   r=r+1
  19. end
  20. end
  21.  
  22. function select(x,y,title,tData,maxlen,rows)
  23. local r=nil;
  24. writeAt(x,y,title..":"..#tData);
  25.  
  26. local srow=1;
  27. local erow=srow+rows;
  28. --[[
  29. for i=srow,srow+rows-1 do
  30.   if i>#tData then break; end
  31.   writeAt(x+2,y+1+i,string.sub(tData[i],1,maxlen-x));
  32. end
  33. ]]--
  34. for i,v in pairs(tData) do
  35.   writeAt(x+2,y+1+i,string.sub(v,1,maxlen));
  36. end
  37.  
  38. local done=false;
  39. local isel=1;
  40. local vsel=1;
  41. writeAt(x+1,y+1+isel,"*")
  42. repeat
  43. evt,k = os.pullEvent()
  44. if evt=="key" then
  45.   writeAt(x+1,y+1+isel," ")
  46.   if k == 200 then --up
  47.    isel=isel-1
  48.   elseif k== 208 then  --down
  49.    isel = isel+1
  50.   elseif k == 28 or k ==57 then -- selection made
  51.    r = tData[isel];
  52.    done=true;
  53.   end
  54.   if isel<1 then isel=#tData
  55.   elseif isel > #tData then isel=1 end
  56.   writeAt(x+1,y+1+isel,"*")
  57.  
  58. end
  59. until done
  60.  
  61. return r;
  62. end
  63. function statusBar(s)
  64. sensorsUI.clearArea(1,sizeY,sizeX,sizeY)
  65. writeAt(1,sizeY,s);
  66. end
  67. function updateState(x,y,s,p,t)
  68. local maxlen = x+20 - (x+1+7);
  69. fillArea(x,y+11,x+20,sizeY-1,"|");
  70. writeAt(x+1,y+12,"Sensor:"..string.sub(s,1,maxlen))
  71. writeAt(x+1,y+13,"Probe :"..string.sub(p,1,maxlen))
  72. writeAt(x+1,y+14,"Target:"..string.sub(t,1,maxlen))
  73.  
  74. sensorsUI.saveDashboard(s,p,t)
  75. end
  76. function main(x,y,title,side)
  77. local tOpts={"Select Sensor","Select Probe","Select Target","getReading","loopReading","quit"}
  78. local tOptsD={"Select a Sensor from connected sensors in range",
  79.           "Select a probe from current sensor",
  80.           "Select target for current sensor and probe",
  81.           "Display readings",
  82.           "Loop the readings",
  83.           "exit console",
  84.          }
  85. local sSensor,sProbe,sTarget = sensorsUI.loadDashboard()
  86. --local sSensor="none"
  87. --local sProbe="none"
  88. --local sTarget="none"
  89.  
  90. --[[
  91. local tOpts={"Select Sensor"};
  92. if sSensor ~="none" then
  93.   tOpts[2] ="Select Probe";
  94. end
  95. ]]--
  96. local menuX = (20+x)/2-string.len(tOpts[1])/2+x;
  97. local isel=1
  98. local done=false;
  99. local data={};
  100. sensorsUI.writeAt(sizeX/2-string.len(title)/2,1,title);
  101. -- sensorsUI.vr(sizeX/2,4,10);
  102. --menu
  103. fillArea(x,y,x+20,y+9,"|");
  104. writeAt(menuX,y+2,tOpts[1])
  105. for mi=1,#tOpts do
  106.   writeAt(menuX,y+1+mi,tOpts[mi]);
  107. end
  108. statusBar(tOptsD[isel]);
  109.  
  110. -- state
  111. if sSensor~="none" and  sProbe~="none" and  sTarget~="none" then
  112.   updateState(x,y,sSensor,sProbe,sTarget);
  113. end
  114.  
  115.  
  116. writeAt(menuX-1,y+1+isel,"*")
  117. repeat
  118. evt,k = os.pullEvent()
  119. if evt=="key" then
  120.   writeAt(menuX-1,y+1+isel," ")
  121.   if k == 200 then --up
  122.    isel=isel-1
  123.   elseif k== 208 then  --down
  124.    isel = isel+1
  125.   elseif k == 28 or k ==57 then -- selection made
  126.    if isel==1 then   -- select sensor
  127.         data = sensors.getSensors(side)
  128.         fillArea(x+20+3,y,sizeX-1,y+#data+4,"|");
  129.  
  130.         sSensor = select(x+20+3+1,y+1,"Available Sensors",data,sizeX-2,sizeY-3);
  131.         sProbe="none";
  132.         sTarget="none";
  133.         sensorsUI.clearArea(x+20+3,y,sizeX-1,y+#data+4);
  134.         updateState(x,y,sSensor,sProbe,sTarget);
  135.         isel = isel+1;
  136. -- get sensor type
  137. --"cardType","name","distance","SensorRange","loc"
  138. --local cardInfo = sensors.getSensorInfo(side,sSensor,"cardType");
  139. --writeAt(x,y+10,string.sub(cardInfo.cardType,1,string.find(cardInfo.cardType," ")));
  140.  
  141.    elseif isel==2 then  -- select probe
  142.  
  143.         data =sensors.getProbes(side,sSensor);
  144.         fillArea(x+20+3,y,sizeX-1,y+#data+4,"|");
  145.         sProbe = select(x+20+3+1,y+1,"Available Probes",data,sizeX-2,sizeY-3);
  146.         sTarget="none";
  147.         updateState(x,y,sSensor,sProbe,sTarget);
  148.         sensorsUI.clearArea(x+20+3,y,sizeX-1,y+#data+4);
  149.         isel = isel+1;
  150.    elseif isel ==3 then  -- select target
  151.         data = sensors.getAvailableTargetsforProbe(side,sSensor,sProbe);
  152.         if #data==0 then
  153.          statusBar("No Relevant targets found!")
  154.  
  155.         else
  156.         fillArea(x+20+3,y,sizeX-1,y+#data+4,"|");
  157.         sTarget = select(x+20+3+1,y+1,"Available Targets",data,sizeX-3,sizeY-3);
  158.         updateState(x,y,sSensor,sProbe,sTarget);
  159.         sensorsUI.clearArea(x+20+3,y,sizeX-1,y+#data+4);
  160.         isel = isel+1;
  161.         end
  162.    elseif isel==4 then     --getReading
  163.  
  164.         data = sensors.getSensorReadingAsDict(side,sSensor,sTarget,sProbe);
  165.         fillArea(x+20+3,y,sizeX-1,sizeY-1,"|");
  166.         dispReadings(x+20+3+1,y+1,"Readings",data,sizeX-3,sizeY-3);
  167.         for i,v in pairs(data) do
  168.          sensorsUI.printPaged(" "..tostring(i)..":"..tostring(v));
  169.         end
  170.  
  171.    elseif isel==5 then     --loopReading
  172.         repeat
  173.         os.queueEvent("fake")
  174.         os.pullEvent()
  175.         data = sensors.getSensorReadingAsDict(side,sSensor,sTarget,sProbe);
  176.         fillArea(x+20+3,y,sizeX-1,sizeY-1,"|");
  177.         dispReadings(x+20+3+1,y+1,"Readings",data,sizeX-3,sizeY-3);
  178.         --for i,v in pairs(data) do
  179.          --sensorsUI.printPaged("       "..tostring(i)..":"..tostring(v));
  180.         --end
  181.         until cows_come_home
  182.  
  183.    elseif isel==6 then done=true end
  184.   end
  185.  
  186.  
  187.   if isel<1 then isel=#tOpts
  188.   elseif isel > #tOpts then isel=1
  189.   elseif sSensor=="none" and isel~= 5 then isel=1
  190.   elseif sProbe=="none" and isel>2 and isel~= 5 then isel=2
  191.   end
  192.   statusBar(tOptsD[isel]);
  193.  
  194.   writeAt(menuX-1,y+1+isel,"*")
  195.  
  196. end
  197. until done
  198. end
  199. function fillArea(x1,y1,x2,y2,cBorder)
  200. if y2>=sizeY-1 then y2=sizeY-1 end
  201. if x2>=sizeX then x2=sizeX end
  202. if cBorder =="|" then
  203.   cBorderSide="-";
  204. else
  205.   cBorderSide=cBorder;
  206. end
  207. term.setCursorPos(x1,y1)
  208. term.write("/")
  209. term.write(string.rep(cBorderSide,x2-x1-1));
  210. term.write("\\")
  211. term.setCursorPos(x1,y2)
  212. term.write("\\")
  213. term.write(string.rep(cBorderSide,x2-x1-1));
  214. term.write("/")
  215. for y=y1+1,y2-1 do
  216.   term.setCursorPos(x1,y)
  217.   term.write(cBorder)
  218.   term.write(string.rep(" ",x2-x1-1));
  219.   term.write(cBorder)
  220. end
  221. end
  222.  
  223. local side = sensors.getController()
  224. local monside,mon =sensorsUI.getMonitor()
  225. local sensor="none"
  226. local probe="none"
  227. local target= "none"
  228. local title="ccSensors Console Program v3 (Loop Edit by Shift)"
  229. local done=false
  230. term.clear();
  231.  
  232. main(1,2,title,side)
  233. --clearArea(10,10,15,15);
  234. --repeat
  235.  
  236. --until done
  237. term.setCursorPos(1,sizeY);
  238. --[[
  239. /---------------------------\
  240. Select Sensor
  241.  
  242.  
  243. ]]--
Advertisement
Add Comment
Please, Sign In to add comment