Guest User

hologram scroll lua

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