nonogamer9

test

Jul 6th, 2025 (edited)
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. local component = require("component")
  2. local gpu = component.gpu
  3. local unicode = require("unicode")
  4. local bit32 = require("bit32")
  5. local math = require("math")
  6. local os = require("os")
  7.  
  8. local w, h = gpu.getResolution()
  9. local pixelWidth, pixelHeight = w * 2, h * 4
  10.  
  11. -- Double buffer to store previous frame characters and colors
  12. local backbuffer = {}
  13. local function clearBuffer()
  14. for i = 1, w * h do
  15. backbuffer[i] = {char = ' ', fg = -1, bg = -1}
  16. end
  17. end
  18.  
  19. clearBuffer()
  20.  
  21. local function plasma(x, y, t)
  22. local value = math.sin(x * 0.15 + t) +
  23. math.sin(y * 0.15 + t * 1.2) +
  24. math.sin((x + y) * 0.1 + t * 1.5)
  25. local normalized = (value + 3) / 6 -- 0..1
  26. return math.floor(normalized * 255)
  27. end
  28.  
  29. local function getBraille(pixels)
  30. local brailleBase = 0x2800
  31. local dotBits = {1,2,4,64,8,16,32,128}
  32. local avgB = 0
  33. for i=1,8 do avgB = avgB + pixels[i] end
  34. avgB = avgB / 8
  35. local pattern = 0
  36. for i=1,8 do
  37. if pixels[i] > avgB then
  38. pattern = pattern + dotBits[i]
  39. end
  40. end
  41. return unicode.char(brailleBase + pattern)
  42. end
  43.  
  44. local function avgBrightness(list)
  45. local s = 0
  46. for _,v in ipairs(list) do s = s + v end
  47. return s / (#list > 0 and #list or 1)
  48. end
  49.  
  50. local function colorFromBrightness(bright)
  51. return bright
  52. end
  53.  
  54. local t = 0
  55. while true do
  56. for cy = 0, h - 1 do
  57. for cx = 0, w - 1 do
  58. local pixels = {}
  59. for dy = 0, 3 do
  60. for dx = 0, 1 do
  61. local px = cx * 2 + dx
  62. local py = cy * 4 + dy
  63. pixels[#pixels + 1] = plasma(px, py, t)
  64. end
  65. end
  66.  
  67. local brailleChar = getBraille(pixels)
  68. local code = utf8.codepoint(brailleChar)
  69.  
  70. local dotBits = {1,2,4,64,8,16,32,128}
  71. local fgPixels, bgPixels = {}, {}
  72. local patternBits = code - 0x2800
  73. for i = 1, 8 do
  74. if bit32.band(patternBits, dotBits[i]) ~= 0 then
  75. fgPixels[#fgPixels + 1] = pixels[i]
  76. else
  77. bgPixels[#bgPixels + 1] = pixels[i]
  78. end
  79. end
  80.  
  81. local fgBrightness = avgBrightness(fgPixels)
  82. local bgBrightness = avgBrightness(bgPixels)
  83.  
  84. local fgColor = colorFromBrightness(fgBrightness)
  85. local bgColor = colorFromBrightness(bgBrightness)
  86.  
  87. local index = cy * w + cx + 1
  88. local prev = backbuffer[index]
  89.  
  90. -- Only update if changed to reduce GPU calls
  91. if prev.char ~= brailleChar or prev.fg ~= fgColor or prev.bg ~= bgColor then
  92. gpu.setForeground(fgColor)
  93. gpu.setBackground(bgColor)
  94. gpu.set(cx + 1, cy + 1, brailleChar)
  95. backbuffer[index] = {char = brailleChar, fg = fgColor, bg = bgColor}
  96. end
  97. end
  98. end
  99. t = t + 0.1
  100. os.sleep(0) -- Yield for other processes
  101. end
  102.  
Advertisement
Add Comment
Please, Sign In to add comment