Advertisement
Lanzr

cdPlayer

Oct 16th, 2023 (edited)
792
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.14 KB | None | 0 0
  1. local diskSto  = peripheral.wrap("top")
  2. local diskDrive = peripheral.wrap("left")
  3. local mot = peripheral.wrap("right")
  4. local motw, moth = mot.getSize() -- monitor width & heigh
  5. local zoom =2
  6. local nowEvent = "all"
  7. local topSlot = 0
  8. -- local topBar = window.create(mot,1,1,motw,1)
  9. -- local winMain = window.create(mot,1,2,motw-2,moth-1)
  10. diskSto.pullItems(peripheral.getName(diskDrive),1)
  11. local res = diskSto.list()
  12. local diskSize = table.getn(diskSto.list())
  13. local musicList = {}
  14. local nowSlot = nil
  15. local diskDriveName = peripheral.getName(diskDrive)
  16.  
  17. -- get all music
  18. for i=1,diskSize,1 do
  19.     diskSto.pushItems(diskDriveName,i)
  20.     table.insert(musicList,diskDrive.getAudioTitle())
  21.     print(diskDrive.getAudioTitle())
  22.     diskSto.pullItems(diskDriveName,1)
  23. end
  24.  
  25. local function mainloop()
  26. while 1 do
  27.     if(nowEvent == "all") then
  28.         nowEvent = nil
  29.         mot.clear()
  30.         mot.setTextScale(1)
  31.         mot.setCursorPos(1,1)
  32.         mot.write("now :")
  33.         mot.setTextColor(colors.red)
  34.         mot.write(diskDrive.getAudioTitle())
  35.         mot.setCursorPos(1,2)
  36.         mot.setTextColor(colors.white)
  37.         -- display
  38.         for i,j in pairs(musicList) do
  39.             -- local y = (i-1)*2 + 1
  40.             if(i > topSlot) then
  41.                 local y = (i+1-topSlot)*zoom + 1
  42.                 if(y > moth) then
  43.                     break
  44.                 end
  45.                 mot.setCursorPos(1,y)
  46.                 mot.write(j)
  47.             end
  48.         end
  49.     end
  50.     os.sleep(3);
  51. end
  52. end
  53.  
  54. local function clickCatch()
  55. while 1 do
  56.     local event, side, mx, my = os.pullEvent("monitor_touch")
  57.     if (event ~= nil) then
  58.         -- target
  59.         local chgPageFlag = false
  60.         repeat
  61.             -- page change
  62.             if ( mx < 3) then
  63.                 topSlot = topSlot - 1
  64.                 chgPageFlag= true
  65.             elseif( mx >(motw - 3)) then
  66.                 topSlot = topSlot + 1
  67.                 chgPageFlag= true
  68.             end
  69.             if ( chgPageFlag  == true) then
  70.                 if( topSlot < 0) then
  71.                     topSlot = diskSize - 4
  72.                 elseif (topSlot > (diskSize - 4)) then
  73.                     topSlot = 0
  74.                 end
  75.                 nowEvent = "all"
  76.                 break
  77.             end
  78.            
  79.            
  80.  
  81.             for i=zoom+2,moth,zoom do
  82.                 if (my >= i and my < i+zoom) then
  83.                     local slot = (i-2)/zoom + topSlot
  84.                     if (slot == nil ) then
  85.                         nowSlot = slot
  86.                         diskSto.pushItems(diskDriveName,nowSlot)
  87.                         nowEvent = "all"
  88.                     elseif (slot == nowSlot) then
  89.                         break
  90.                     elseif (slot ~= nowSlot) then
  91.                         diskSto.pullItems(diskDriveName,1)
  92.                         diskSto.pushItems(diskDriveName,slot)
  93.                         nowEvent = "all"
  94.                     end
  95.                     diskDrive.playAudio()
  96.                     break
  97.                 end
  98.             end
  99.         until(true)
  100.     end
  101. end
  102. end
  103.  
  104. parallel.waitForAll(mainloop,clickCatch)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement