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)) |