mirror of
https://github.com/osmarks/random-stuff
synced 2024-12-28 02:50:33 +00:00
103 lines
2.5 KiB
Lua
103 lines
2.5 KiB
Lua
|
pcall(function() os.loadAPI "bigfont" end)
|
||
|
|
||
|
local OSes = {
|
||
|
"PotatOS",
|
||
|
"ShutdownOS",
|
||
|
"YomatOS",
|
||
|
"TomatOS",
|
||
|
"ChorOS",
|
||
|
"BurritOS",
|
||
|
"GovOS",
|
||
|
}
|
||
|
|
||
|
local function random_pick(list)
|
||
|
return list[math.random(1, #list)]
|
||
|
end
|
||
|
|
||
|
local function random_color()
|
||
|
return math.pow(2, math.random(0, 15))
|
||
|
end
|
||
|
|
||
|
local function HSL(hue, saturation, lightness)
|
||
|
if hue < 0 or hue > 360 then
|
||
|
return 0x000000
|
||
|
end
|
||
|
if saturation < 0 or saturation > 1 then
|
||
|
return 0x000000
|
||
|
end
|
||
|
if lightness < 0 or lightness > 1 then
|
||
|
return 0x000000
|
||
|
end
|
||
|
local chroma = (1 - math.abs(2 * lightness - 1)) * saturation
|
||
|
local h = hue/60
|
||
|
local x =(1 - math.abs(h % 2 - 1)) * chroma
|
||
|
local r, g, b = 0, 0, 0
|
||
|
if h < 1 then
|
||
|
r,g,b=chroma,x,0
|
||
|
elseif h < 2 then
|
||
|
r,b,g=x,chroma,0
|
||
|
elseif h < 3 then
|
||
|
r,g,b=0,chroma,x
|
||
|
elseif h < 4 then
|
||
|
r,g,b=0,x,chroma
|
||
|
elseif h < 5 then
|
||
|
r,g,b=x,0,chroma
|
||
|
else
|
||
|
r,g,b=chroma,0,x
|
||
|
end
|
||
|
local m = lightness - chroma/2
|
||
|
return (r+m) * 16777216 + (g+m) * 65535 + (b+m) * 256
|
||
|
end
|
||
|
|
||
|
local default_palette = { 0x000000, 0x7F664C, 0x57A64E, 0xF2B233, 0x3366CC, 0xB266E5, 0x4C99B2, 0x999999, 0x4C4C4C, 0xCC4C4C, 0x7FCC19, 0xDEDE6C, 0x99B2F2, 0xE57FD8, 0xF2B2CC, 0xFFFFFF }
|
||
|
local palette = { 0x000000 }
|
||
|
for i = 0, 13 do
|
||
|
table.insert(palette, HSL((i / 13) * 360, 1.0, 0.4))
|
||
|
end
|
||
|
table.insert(palette, 0xFFFFFF)
|
||
|
|
||
|
local function init_screen(t)
|
||
|
t.setTextScale(4)
|
||
|
t.setBackgroundColor(colors.black)
|
||
|
-- t.setCursorPos(1, 1)
|
||
|
-- t.clear()
|
||
|
for i, c in pairs(default_palette) do
|
||
|
t.setPaletteColor(math.pow(2, 16 - i), c)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function write_screen_slow(term, text, delay)
|
||
|
local w, h = term.getSize()
|
||
|
term.setCursorBlink(true)
|
||
|
for i = 1, #text do
|
||
|
local char = text:sub(i, i)
|
||
|
local x, y = term.getCursorPos()
|
||
|
term.write(char)
|
||
|
if x == w then
|
||
|
term.scroll(1)
|
||
|
term.setCursorPos(1, h)
|
||
|
end
|
||
|
sleep(delay)
|
||
|
end
|
||
|
term.setCursorBlink(false)
|
||
|
end
|
||
|
|
||
|
local monitors = {peripheral.find("monitor", function(_, m) init_screen(m) return true end)}
|
||
|
|
||
|
local function unpotatoplexer()
|
||
|
while true do
|
||
|
local t = random_pick(monitors)
|
||
|
t.setTextColor(random_color())
|
||
|
if math.random(0, 1000) == 40 then
|
||
|
if bigfont then bigfont.writeOn(t, 1, "hello", 2, 2) end
|
||
|
else
|
||
|
write_screen_slow(t, random_pick(OSes) .. " ", 0.05)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local threads = {}
|
||
|
for i = 1, 5 do
|
||
|
table.insert(threads, unpotatoplexer)
|
||
|
end
|
||
|
parallel.waitForAll(unpack(threads))
|