Advertisement
AdditionalPylons

OS Library

Feb 10th, 2024 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.40 KB | Source Code | 0 0
  1. local function writepos(x,y,text)
  2.     term.setCursorPos(x,y)
  3.     write(text)
  4. end
  5. local function writecol(x,y,text,bg,fg)
  6.     term.setBackgroundColor(bg)
  7.     term.setTextColor(fg)
  8.     writepos(x,y,text)
  9.     term.setBackgroundColor(colors.black)
  10.     term.setTextColor(colors.white)
  11. end
  12. local function multchar(char,n)
  13.     local text = ""
  14.     for i=1, n do
  15.         text = text..char
  16.     end
  17.     return text
  18. end
  19. local function max(a,b)
  20.     return a>b and a or b  -- weirdest ternary syntax ever
  21. end
  22. local function min(a,b)
  23.     return a>b and b or a
  24. end
  25. local function compare_coord(a,b)
  26.     return a[1] == b[1] and a[2] == b[2]
  27. end
  28. local function fill_color(x1,y1,x2,y2,clr)
  29.     paintutils.drawLine(x1,y1,x2,y2,clr)
  30.     term.setBackgroundColor(colors.black)
  31. end
  32.  
  33. local function render_folder(folder,shift)
  34.     local contents = fs.list(folder)
  35.     local w,h = term.getSize()
  36.     --shift = #contents>h and shift or 1
  37.     if shift+h-3>#contents then shift = max(#contents-h+3,1) end
  38.     fill_color(1,1,w,1,colors.gray)
  39.     if w>30 then
  40.         writecol(1,1,"Contents of "..(folder == "" and "root" or folder).." ("..#contents.." objects)",colors.gray,colors.white)
  41.     else
  42.         writecol(1,1,(folder == "" and "root" or folder).." ("..#contents.." obj.)",colors.gray,colors.white)
  43.     end
  44.    
  45.     for i=shift,min(#contents,h+shift-1) do
  46.         --paintutils.drawLine(1,i-shift+2,w-1,i-shift+2,colors.black) -- failed attempt at optimisation
  47.         local index = multchar("0",math.floor(math.log10(#contents))-math.floor(math.log10(i)))..i..". "
  48.         local clear_noise = multchar(" ",max(#contents[i>1 and i-1 or 1],#contents[i<#contents and i+1 or 1]))
  49.         writecol(1,i-shift+2,index..contents[i]..clear_noise,colors.black,fs.isDir(fs.combine(folder,contents[i])) and colors.lightBlue or colors.white)
  50.     end
  51.    
  52.     fill_color(w,1,w,h,colors.blue)
  53.     fill_color(1,h,w,h,colors.red)
  54.     writecol(w,1,"^",colors.blue,colors.white)
  55.     writecol(w,2,"-",colors.blue,colors.white)
  56.     writecol(w,math.floor(h/2),"\a",colors.blue,colors.white)
  57.     writecol(w,math.floor(h/2)-1,"/",colors.blue,colors.white)
  58.     writecol(w,h-1,"-",colors.blue,colors.white)
  59.     writecol(w,h,"v",colors.blue,colors.white)
  60.     render_time()
  61.     writecol(1,h,"$",colors.red,colors.white)
  62.     writecol(w,h-2,"+",colors.blue,colors.white)
  63.  
  64.     --writecol(w-10,h,shift,colors.red,colors.white)
  65.     if term.isColour() then writecol(w,3,">",colors.blue,colors.white) end
  66. end
  67.  
  68. local function render_popup(lines,title,cross)
  69.     local w,h = term.getSize()
  70.     local start_y = math.floor((h-lines-2)/2)
  71.     local start_x = math.floor(w/4)
  72.     local end_y = math.floor((h+lines+2)/2)
  73.     local end_x = w-math.floor(w/4)
  74.    
  75.     paintutils.drawBox(start_x,start_y,end_x,end_y,colors.gray)
  76.     term.setCursorPos(w/2-#title/2,start_y)
  77.     write(title)
  78.     term.setBackgroundColor(colors.black)
  79.     paintutils.drawFilledBox(start_x+1,start_y+1,end_x-1,end_y-1)
  80.     if cross then writecol(end_x,start_y,"x",colors.red,colors.white) end
  81.    
  82.     return start_x+1,start_y+1
  83. end
  84. local function render_time()
  85.     local w,h = term.getSize()
  86.     paintutils.drawLine(w-6,h,w-1,h,colors.red)
  87.     writecol(w-6,h,textutils.formatTime(os.time("local"),true),colors.red,colors.white)
  88.     os.startTimer(60 - os.date("%S"))
  89. end
  90.  
  91. return {writepos, writecol, multchar, max, min, compare_coord, fill_color, render_folder, render_popup, render_time}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement