Advertisement
Arc13

holo.lua

Aug 11th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.26 KB | None | 0 0
  1. -- Generates a random heightmap and displays scrolling text above it.
  2.  
  3. local component = require("component")
  4. local noise = require("noise")
  5. local keyboard = require("keyboard")
  6. local shell = require("shell")
  7. local hologram = component.hologram
  8.  
  9. hologram.clear()
  10.  
  11. local glyphs = {
  12. ["a"]=[[
  13. XXXXX
  14. X   X
  15. XXXXX
  16. X   X
  17. X   X
  18. ]],
  19. ["b"]=[[
  20. XXXX
  21. X   X
  22. XXXX
  23. X   X
  24. XXXX
  25. ]],
  26. ["c"]=[[
  27. XXXXX
  28. X    
  29. X    
  30. X    
  31. XXXXX
  32. ]],
  33. ["d"]=[[
  34. XXXX
  35. X   X
  36. X   X
  37. X   X
  38. XXXX
  39. ]],
  40. ["e"]=[[
  41. XXXXX
  42. X    
  43. XXXX
  44. X    
  45. XXXXX
  46. ]],
  47. ["f"]=[[
  48. XXXXX
  49. X    
  50. XXXX
  51. X    
  52. X    
  53. ]],
  54. ["g"]=[[
  55. XXXXX
  56. X    
  57. X XXX
  58. X   X
  59. XXXXX
  60. ]],
  61. ["h"]=[[
  62. X   X
  63. X   X
  64. XXXXX
  65. X   X
  66. X   X
  67. ]],
  68. ["i"]=[[
  69.  XXX
  70.   X  
  71.   X  
  72.   X  
  73.  XXX
  74. ]],
  75. ["j"]=[[
  76.     X
  77.     X
  78.     X
  79. X   X
  80. XXXXX
  81. ]],
  82. ["k"]=[[
  83. X   X
  84. X  X
  85. XXX  
  86. X  X
  87. X   X
  88. ]],
  89. ["l"]=[[
  90. X    
  91. X    
  92. X    
  93. X    
  94. XXXXX
  95. ]],
  96. ["m"]=[[
  97. X   X
  98. XX XX
  99. X X X
  100. X   X
  101. X   X
  102. ]],
  103. ["n"]=[[
  104. X   X
  105. XX  X
  106. X X X
  107. X  XX
  108. X   X
  109. ]],
  110. ["o"]=[[
  111. XXXXX
  112. X   X
  113. X   X
  114. X   X
  115. XXXXX
  116. ]],
  117. ["p"]=[[
  118. XXXXX
  119. X   X
  120. XXXXX
  121. X    
  122. X    
  123. ]],
  124. ["q"]=[[
  125. XXXXX
  126. X   X
  127. X   X
  128. X  X
  129. XXX X
  130. ]],
  131. ["r"]=[[
  132. XXXXX
  133. X   X
  134. XXXX
  135. X   X
  136. X   X
  137. ]],
  138. ["s"]=[[
  139. XXXXX
  140. X    
  141. XXXXX
  142.     X
  143. XXXXX
  144. ]],
  145. ["t"]=[[
  146. XXXXX
  147.   X  
  148.   X  
  149.   X  
  150.   X  
  151. ]],
  152. ["u"]=[[
  153. X   X
  154. X   X
  155. X   X
  156. X   X
  157. XXXXX
  158. ]],
  159. ["v"]=[[
  160. X   X
  161. X   X
  162. X   X
  163.  X X
  164.   X  
  165. ]],
  166. ["w"]=[[
  167. X   X
  168. X   X
  169. X X X
  170. X X X
  171.  X X
  172. ]],
  173. ["x"]=[[
  174. X   X
  175.  X X
  176.   X  
  177.  X X
  178. X   X
  179. ]],
  180. ["y"]=[[
  181. X   X
  182. X   X
  183.  XXX
  184.   X  
  185.   X  
  186. ]],
  187. ["z"]=[[
  188. XXXXX
  189.     X
  190.  XXX
  191. X    
  192. XXXXX
  193. ]],
  194. ["0"]=[[
  195.  XXX
  196. X   X
  197. X X X
  198. X   X
  199.  XXX
  200. ]],
  201. ["1"]=[[
  202.   XX
  203.  X X
  204.    X
  205.    X
  206.    X
  207. ]],
  208. ["2"]=[[
  209. XXXX
  210.     X
  211.   X  
  212. X    
  213. XXXXX
  214. ]],
  215. ["3"]=[[
  216. XXXX
  217.     X
  218.  XXX
  219.     X
  220. XXXX
  221. ]],
  222. ["4"]=[[
  223. X   X
  224. X   X
  225. XXXXX
  226.     X
  227.     X
  228. ]],
  229. ["5"]=[[
  230. XXXXX
  231. X    
  232. XXXX
  233.     X
  234. XXXX
  235. ]],
  236. ["6"]=[[
  237.  XXX
  238. X    
  239. XXXX
  240. X   X
  241.  XXX
  242. ]],
  243. ["7"]=[[
  244. XXXXX
  245.    X
  246.  XXX
  247.   X  
  248.  X  
  249. ]],
  250. ["8"]=[[
  251.  XXX
  252. X   X
  253.  XXX
  254. X   X
  255.  XXX
  256. ]],
  257. ["9"]=[[
  258.  XXX
  259. X   X
  260.  XXXX
  261.     X
  262.  XXX
  263. ]],
  264. [" "]=[[
  265.      
  266.      
  267.      
  268.      
  269.      
  270. ]],
  271. ["."]=[[
  272.    
  273.    
  274.    
  275.    
  276.  X
  277. ]],
  278. [","]=[[
  279.    
  280.    
  281.    
  282.   X
  283.  X  
  284. ]],
  285. [";"]=[[
  286.    
  287.   X
  288.    
  289.   X
  290.  X  
  291. ]],
  292. ["-"]=[[
  293.      
  294.      
  295.  XXX
  296.      
  297.      
  298. ]],
  299. ["+"]=[[
  300.      
  301.   X  
  302.  XXX
  303.   X  
  304.      
  305. ]],
  306. ["*"]=[[
  307.      
  308.  X X
  309.   X  
  310.  X X
  311.      
  312. ]],
  313. ["/"]=[[
  314.     X
  315.    X
  316.   X  
  317.  X  
  318. X    
  319. ]],
  320. ["\\"]=[[
  321. X    
  322.  X  
  323.   X  
  324.    X
  325.     X
  326. ]],
  327. ["_"]=[[
  328.      
  329.      
  330.      
  331.      
  332. XXXXX
  333. ]],
  334. ["!"]=[[
  335.  X
  336.  X
  337.  X
  338.    
  339.  X
  340. ]],
  341. ["?"]=[[
  342.  XXX
  343.     X
  344.   XX
  345.      
  346.   X  
  347. ]],
  348. ["("]=[[
  349.   X
  350.  X  
  351.  X  
  352.  X  
  353.   X
  354. ]],
  355. [")"]=[[
  356.  X  
  357.   X
  358.   X
  359.   X
  360.  X  
  361. ]],
  362. }
  363.  
  364. local args = shell.parse(...)
  365. local text = "Open Computers"
  366. if args[1] then
  367.   text = tostring(args[1])
  368. else
  369.   print("No text specified, using default value 'Open Computers'.")
  370. end
  371. local text = text .. " "
  372.  
  373. -- Generate one big string that represents the concatenated glyphs for the provided text.
  374. local value = ""
  375. for row = 1, 5 do
  376.   for col = 1, #text do
  377.     local char = string.sub(text:lower(), col, col)
  378.     local glyph = glyphs[char]
  379.     if glyph then
  380.       local s = 0
  381.       for _ = 2, row do
  382.         s = string.find(glyph, "\n", s + 1, true)
  383.         if not s then
  384.           break
  385.         end
  386.       end
  387.       if s then
  388.         local line = string.sub(glyph, s + 1, (string.find(glyph, "\n", s + 1, true) or 0) - 1)
  389.         value = value .. line .. " "
  390.       end
  391.     end
  392.   end
  393.   value = value .. "\n"
  394. end
  395.  
  396. local bm = {}
  397. for token in value:gmatch("([^\r\n]*)") do
  398.   if token ~= "" then
  399.     table.insert(bm, token)
  400.   end
  401. end
  402. local h,w = #bm,#bm[1]
  403. local sx, sy = math.max(0,(16*3-w)/2), 2*16-h-1
  404. local z = 16*3/2
  405.  
  406. print("Press Ctrl+W to stop.")
  407. for i = 1, math.huge do
  408.   os.sleep(0.1)
  409.   local function col(n)
  410.     return (n - 1 + i) % w + 1
  411.   end
  412.   for i=1, math.min(16*3,w) do
  413.     local x = sx + i
  414.     local i = col(i)
  415.     for j=1, h do
  416.       local y = sy + j-1
  417.       if bm[1+h-j]:sub(i, i) ~= " " then
  418.         hologram.set(x, y, z, 1)
  419.       else
  420.         hologram.set(x, y, z, 0)
  421.       end
  422.       if keyboard.isKeyDown(keyboard.keys.w) and keyboard.isControlDown() then
  423.         hologram.clear()
  424.         os.exit()
  425.       end
  426.     end
  427.   end
  428. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement