vittoema96

CyberAPIColor

Jan 25th, 2022 (edited)
986
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -------------------------------------
  2. -- This program was designed for   --
  3. -- the Minecraft mod ComputerCraft --
  4. -------------------------------------
  5.  
  6. -----------------------------------
  7. --           WARNING             --
  8. -- This program is not meant to  --
  9. -- be downloaded.                --
  10. -- To install CyberOS on your    --
  11. -- ComputerCraft device just run --
  12. -- the following line on it:     --
  13. -- pastebin get qJSSf0qg startup --
  14. -- then restart the device.      --
  15. -----------------------------------
  16.  
  17. -----------------------------------
  18. --     ADVANCED DEVICES API      --
  19. -- This is the superclass of all --
  20. -- "Advanced" devices.           --
  21. -- It handles all the common     --
  22. -- graphical stuff.              --
  23. -----------------------------------
  24.  
  25.  
  26. class = {}
  27. class.__index = class
  28. setmetatable(class, {__index = CyberAPI.class})
  29.  
  30. themesDir = CyberAPI.mainDir.."/themes"
  31. defaultThemeDir = themesDir.."/Default"
  32. defaultIconsDir = defaultThemeDir.."/Icons"
  33.  
  34.  
  35. function class:new(shell)
  36.     local self = CyberAPI.class:new(shell)
  37.     setmetatable(self, class)
  38.    
  39.     if fs.exists(themesDir)==false then
  40.         fs.makeDir(themesDir)
  41.     end
  42.     if fs.exists(defaultThemeDir)==false then
  43.         fs.makeDir(defaultThemeDir)
  44.     end
  45.     if fs.exists(defaultIconsDir)==false then
  46.         fs.makeDir(defaultIconsDir)
  47.     end
  48.    
  49.     getOrDownloadIcons()
  50.    
  51.     return self
  52. end
  53.  
  54.  
  55.  
  56. function class:themeSelection()
  57.     self:setBackground()
  58.     return self:binaryPopup("Would you like to use the Default or the Glitch theme?", "Default", "Glitch")
  59. end
  60.  
  61. function class:startupAnimation()
  62.     self:drawImageTheme("logoAnimation/bg0")
  63.     for i=1, 15 do
  64.         sleep(0.12)
  65.         local rdm = math.random(4)-1
  66.        
  67.         local imN="logoAnimation/bg"..rdm
  68.         self:drawImageTheme(imN)
  69.     end
  70.     self:drawImageTheme("logoAnimation/bg0")
  71.  
  72.     sleep(1)
  73. end
  74.  
  75. function class:binaryPopup(msg, btn1, btn2) -- returns the string of the chosen button
  76.     local x, y = term.getSize()
  77.     local actualY = y-1
  78.     x = x - 2
  79.     -- The message that is displayed in the top half of the screen
  80.     local formattedMsg = CyberAPI.formatString(msg, x, math.floor(actualY/2)-2)
  81.     local msgLines = #formattedMsg
  82.     for i, v in ipairs(formattedMsg) do
  83.         CyberAPI.blit(v, "0", "7", 2, 1+math.floor(actualY/4)-math.floor(msgLines/2)+i)
  84.     end
  85.    
  86.     -- The first choiche
  87.     local formatted1 = CyberAPI.formatString(btn1, math.floor((x-7)/2), 5)
  88.     local lines1 = #formatted1
  89.     for i, v in ipairs(formatted1) do
  90.         CyberAPI.blit(v, "0", "7", 3, math.ceil(actualY*3/4)-math.floor(lines1/2)+i)
  91.     end
  92.     -- The second choice
  93.     local formatted2 = CyberAPI.formatString(btn2, math.floor((x-7)/2), 5)
  94.     local lines2 = #formatted2
  95.     for i, v in ipairs(formatted2) do
  96.         CyberAPI.blit(v, "0", "7", math.ceil(x/2)+3, math.ceil((y-1)*3/4)-math.floor(lines2/2)+i)
  97.     end
  98.    
  99.     -- The event catcher
  100.     while true do
  101.         local event, button, xPos, yPos = os.pullEvent("mouse_click")
  102.         if button==1 then
  103.             if yPos>=math.ceil(actualY*3/4)-math.floor(lines1/2)+1 and yPos<=math.ceil(actualY*3/4)+math.floor(lines1/2)+1 then
  104.                 if xPos>=2 and xPos<=math.floor(x/2) then
  105.                     self:setBackground()
  106.                     return btn1
  107.                 elseif xPos>=math.ceil(x/2) and xPos<=x then
  108.                     self:setBackground()
  109.                     return btn2
  110.                 end
  111.             end
  112.         end
  113.     end
  114. end
  115.  
  116.  
  117. function class:setBackground()
  118.     term.clear()
  119.     local color = self:loadElementValue("bgcolor", ".settings")
  120.     term.setBackgroundColor(tonumber(color))
  121.     term.setTextColor(1)
  122.     x = self:getWidth()
  123.     local sFill=""
  124.     for i=1, self:getWidth()-(string.len(CyberAPI.version)+9) do
  125.         sFill=sFill.." "
  126.     end
  127.     CyberAPI.blit("CyberOs v"..CyberAPI.version..sFill, "0", "5",1,1)
  128. end
  129.  
  130. function getOrDownloadIcons()
  131.     local f
  132.     if fs.exists(defaultIconsDir.."/Add")==false then
  133.         f = fs.open(defaultIconsDir.."/Add", "w")
  134.         f.writeLine("   3b")
  135.         f.writeLine("  333b")
  136.         f.writeLine("   3b")
  137.         f.close()
  138.     end
  139.    
  140.     if fs.exists(defaultIconsDir.."/Disk")==false then
  141.         f = fs.open(defaultIconsDir.."/Disk", "w")
  142.         f.writeLine("8888888")
  143.         f.writeLine("8888888")
  144.         f.writeLine("8ffff88")
  145.         f.writeLine("888888d")
  146.         f.close()
  147.     end
  148.  
  149.     if fs.exists(defaultIconsDir.."/Game", "w") then
  150.         f = fs.open(defaultIconsDir.."/Game", "w")
  151.         f.writeLine("777f777")
  152.         f.writeLine("eb77788")
  153.         f.writeLine("5477788")
  154.         f.writeLine("77fff77")
  155.         f.close()
  156.     end
  157.  
  158.     if fs.exists(defaultIconsDir.."/Lua", "w") then
  159.         f = fs.open(defaultIconsDir.."/Lua", "w")
  160.         f.writeLine("5555555")
  161.         f.writeLine("5055555")
  162.         f.writeLine("5005  5")
  163.         f.writeLine("5555555")
  164.         f.close()
  165.     end
  166.  
  167.     if fs.exists(defaultIconsDir.."/Mail", "w") then
  168.         f = fs.open(defaultIconsDir.."/Mail", "w")
  169.         f.writeLine("e00000e")
  170.         f.writeLine("0ee0ee0")
  171.         f.writeLine("000e000")
  172.         f.writeLine("0000000")
  173.         f.close()
  174.     end
  175.  
  176.     if fs.exists(defaultIconsDir.."/Off", "w") then
  177.         f = fs.open(defaultIconsDir.."/Off", "w")
  178.         f.writeLine("7755577")
  179.         f.writeLine("7577757")
  180.         f.writeLine("7575757")
  181.         f.writeLine("7755577")
  182.         f.close()
  183.     end
  184.  
  185.     if fs.exists(defaultIconsDir.."/Paint", "w") then
  186.         f = fs.open(defaultIconsDir.."/Paint", "w")
  187.         f.writeLine("7777777")
  188.         f.writeLine("747e7b7")
  189.         f.writeLine("7a75717")
  190.         f.writeLine("7777777")
  191.         f.close()
  192.     end
  193.  
  194.     if fs.exists(defaultIconsDir.."/Turtle", "w") then
  195.         f = fs.open(defaultIconsDir.."/Turtle", "w")
  196.         f.writeLine("8888888")
  197.         f.writeLine("88833c8")
  198.         f.writeLine("7777c37")
  199.         f.writeLine("777c737")
  200.         f.close()
  201.     end
  202.    
  203.     if fs.exists(defaultIconsDir.."/Back", "w") then
  204.         f = fs.open(defaultIconsDir.."/Back", "w")
  205.         f.writeLine(" ec")
  206.         f.writeLine("eeeeec")
  207.         f.writeLine(" ec")
  208.         f.close()
  209.     end
  210. end
  211.  
  212. function class:loadImagePaint(fileUrl)
  213.     return paintutils.loadImage("paintFiles/"..fileUrl)
  214. end
  215.  
  216. function class:drawImagePaint(fileUrl)
  217.     paintutils.drawImage(loadImagePaint(fileUrl))
  218. end
  219.  
  220. function class:loadImageTheme(fileUrl)
  221.     local theme = self:loadElementValue("theme", ".settings")
  222.     img = paintutils.loadImage(themesDir.."/"..theme.."/"..fileUrl)
  223.     if img~=nil then
  224.         return img
  225.     else
  226.         return paintutils.loadImage(defaultThemeDir.."/"..fileUrl)
  227.     end
  228. end
  229.  
  230. function class:drawImageTheme(fileUrl)
  231.     paintutils.drawImage(self:loadImageTheme(fileUrl),1,1)
  232. end
RAW Paste Data Copied