SHOW:
|
|
- or go back to the newest paste.
| 1 | - | local oses = {
|
| 1 | + | pcall(function() os.loadAPI "bigfont" end) |
| 2 | ||
| 3 | local OSes = {
| |
| 4 | "PotatOS", | |
| 5 | - | "TomatOS" |
| 5 | + | |
| 6 | "YomatOS", | |
| 7 | "TomatOS", | |
| 8 | - | local function rand(list) |
| 8 | + | "ChorOS", |
| 9 | "BurritOS", | |
| 10 | "GovOS", | |
| 11 | } | |
| 12 | - | local monitors = {peripheral.find "monitor"}
|
| 12 | + | |
| 13 | local function random_pick(list) | |
| 14 | - | while true do |
| 14 | + | |
| 15 | - | term.redirect(rand(monitors)) |
| 15 | + | |
| 16 | - | write(rand(oses) .. " ") |
| 16 | + | |
| 17 | - | sleep(0.1) |
| 17 | + | local function random_color() |
| 18 | - | end |
| 18 | + | return math.pow(2, math.random(0, 15)) |
| 19 | end | |
| 20 | ||
| 21 | local function HSL(hue, saturation, lightness) | |
| 22 | if hue < 0 or hue > 360 then | |
| 23 | return 0x000000 | |
| 24 | end | |
| 25 | if saturation < 0 or saturation > 1 then | |
| 26 | return 0x000000 | |
| 27 | end | |
| 28 | if lightness < 0 or lightness > 1 then | |
| 29 | return 0x000000 | |
| 30 | end | |
| 31 | local chroma = (1 - math.abs(2 * lightness - 1)) * saturation | |
| 32 | local h = hue/60 | |
| 33 | local x =(1 - math.abs(h % 2 - 1)) * chroma | |
| 34 | local r, g, b = 0, 0, 0 | |
| 35 | if h < 1 then | |
| 36 | r,g,b=chroma,x,0 | |
| 37 | elseif h < 2 then | |
| 38 | r,b,g=x,chroma,0 | |
| 39 | elseif h < 3 then | |
| 40 | r,g,b=0,chroma,x | |
| 41 | elseif h < 4 then | |
| 42 | r,g,b=0,x,chroma | |
| 43 | elseif h < 5 then | |
| 44 | r,g,b=x,0,chroma | |
| 45 | else | |
| 46 | r,g,b=chroma,0,x | |
| 47 | end | |
| 48 | local m = lightness - chroma/2 | |
| 49 | return (r+m) * 16777216 + (g+m) * 65535 + (b+m) * 256 | |
| 50 | end | |
| 51 | ||
| 52 | local default_palette = { 0x000000, 0x7F664C, 0x57A64E, 0xF2B233, 0x3366CC, 0xB266E5, 0x4C99B2, 0x999999, 0x4C4C4C, 0xCC4C4C, 0x7FCC19, 0xDEDE6C, 0x99B2F2, 0xE57FD8, 0xF2B2CC, 0xFFFFFF }
| |
| 53 | local palette = { 0x000000 }
| |
| 54 | for i = 0, 13 do | |
| 55 | table.insert(palette, HSL((i / 13) * 360, 1.0, 0.4)) | |
| 56 | end | |
| 57 | table.insert(palette, 0xFFFFFF) | |
| 58 | ||
| 59 | local function init_screen(t) | |
| 60 | t.setTextScale(4) | |
| 61 | t.setBackgroundColor(colors.black) | |
| 62 | -- t.setCursorPos(1, 1) | |
| 63 | -- t.clear() | |
| 64 | for i, c in pairs(default_palette) do | |
| 65 | t.setPaletteColor(math.pow(2, 16 - i), c) | |
| 66 | end | |
| 67 | end | |
| 68 | ||
| 69 | local function write_screen_slow(term, text, delay) | |
| 70 | local w, h = term.getSize() | |
| 71 | term.setCursorBlink(true) | |
| 72 | for i = 1, #text do | |
| 73 | local char = text:sub(i, i) | |
| 74 | local x, y = term.getCursorPos() | |
| 75 | term.write(char) | |
| 76 | if x == w then | |
| 77 | term.scroll(1) | |
| 78 | term.setCursorPos(1, h) | |
| 79 | end | |
| 80 | sleep(delay) | |
| 81 | end | |
| 82 | term.setCursorBlink(false) | |
| 83 | end | |
| 84 | ||
| 85 | local monitors = {peripheral.find("monitor", function(_, m) init_screen(m) return true end)}
| |
| 86 | ||
| 87 | local function unpotatoplexer() | |
| 88 | while true do | |
| 89 | local t = random_pick(monitors) | |
| 90 | t.setTextColor(random_color()) | |
| 91 | if math.random(0, 1000) == 40 then | |
| 92 | if bigfont then bigfont.writeOn(t, 1, "hello", 2, 2) end | |
| 93 | else | |
| 94 | write_screen_slow(t, random_pick(OSes) .. " ", 0.05) | |
| 95 | end | |
| 96 | end | |
| 97 | end | |
| 98 | ||
| 99 | local threads = {}
| |
| 100 | for i = 1, 5 do | |
| 101 | table.insert(threads, unpotatoplexer) | |
| 102 | end | |
| 103 | parallel.waitForAll(unpack(threads)) |