2020-02-08 22:24:25 +00:00
|
|
|
|
local mon = peripheral.find("monitor")
|
|
|
|
|
if mon then
|
|
|
|
|
mon.setTextScale(0.5)
|
|
|
|
|
term.redirect(mon)
|
|
|
|
|
end
|
|
|
|
|
|
2020-02-08 22:55:40 +00:00
|
|
|
|
-- adjusts walls of screen so that it will bounce further/closer to the boundries of the screen
|
|
|
|
|
local xMargin, yMargin = 0, 0
|
|
|
|
|
|
|
|
|
|
local redrawDelay = nil
|
2020-02-09 03:40:41 +00:00
|
|
|
|
local changeColors = true
|
2020-02-08 22:55:40 +00:00
|
|
|
|
|
2020-02-08 22:24:25 +00:00
|
|
|
|
local scr_x, scr_y = term.getSize()
|
|
|
|
|
local max, min = math.max, math.min
|
|
|
|
|
local floor, ceil = math.floor, math.ceil
|
|
|
|
|
|
2020-02-08 22:55:40 +00:00
|
|
|
|
if scr_x >= 60 and scr_y >= 25 then
|
|
|
|
|
redrawDelay = redrawDelay or 0.05
|
|
|
|
|
else
|
|
|
|
|
redrawDelay = redrawDelay or 0.1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local getSize = function(image)
|
2020-02-08 22:24:25 +00:00
|
|
|
|
local x, y = 0, #image[1]
|
|
|
|
|
for y = 1, #image[1] do
|
|
|
|
|
x = max(x, #image[1][y])
|
|
|
|
|
end
|
|
|
|
|
return x, y
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local drawImage = function(image, x, y, terminal)
|
|
|
|
|
terminal = terminal or term.current()
|
|
|
|
|
local cx, cy = terminal.getCursorPos()
|
|
|
|
|
for iy = 0, #image[1] + 1 do
|
|
|
|
|
terminal.setCursorPos(x - 1, y + (iy - 1))
|
|
|
|
|
if image[1][iy] then
|
|
|
|
|
terminal.blit(
|
|
|
|
|
" " .. image[1][iy] .. " ",
|
|
|
|
|
"f" .. image[2][iy] .. "f",
|
|
|
|
|
"f" .. image[3][iy] .. "f"
|
|
|
|
|
)
|
|
|
|
|
else
|
|
|
|
|
terminal.clearLine()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
terminal.setCursorPos(cx,cy)
|
|
|
|
|
end
|
|
|
|
|
|
2020-02-08 22:55:40 +00:00
|
|
|
|
local colorSwap = function(image, text, back)
|
|
|
|
|
local output = {{},{},{}}
|
|
|
|
|
for y = 1, #image[1] do
|
|
|
|
|
output[1][y] = image[1][y]
|
|
|
|
|
output[2][y] = image[2][y]:gsub(".", text)
|
|
|
|
|
output[3][y] = image[3][y]:gsub(".", back or text)
|
|
|
|
|
end
|
|
|
|
|
return output
|
|
|
|
|
end
|
|
|
|
|
|
2020-02-08 22:24:25 +00:00
|
|
|
|
local logo = {
|
|
|
|
|
xvel = (math.random(0, 1) * 2) - 1,
|
|
|
|
|
yvel = (math.random(0, 1) * 2) - 1,
|
|
|
|
|
x = floor(scr_x / 2),
|
|
|
|
|
y = floor(scr_y / 2),
|
2020-02-08 22:32:28 +00:00
|
|
|
|
img = {
|
|
|
|
|
{
|
2020-02-08 22:55:40 +00:00
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
2020-02-08 22:32:28 +00:00
|
|
|
|
}, {
|
2020-02-08 22:55:40 +00:00
|
|
|
|
"00ffffffffff000000fffffffffff",
|
|
|
|
|
"000000f0f00000000f000000000f0",
|
|
|
|
|
"0f00fff0000f000ff000ff0000f00",
|
|
|
|
|
"0f00fff0000000f00000f0000ff00",
|
|
|
|
|
"f00ff0000000f0000000f0fff0000",
|
|
|
|
|
"00000000000000000000000000000",
|
|
|
|
|
"000000fffffffffffffff00000000",
|
|
|
|
|
"0fff0000000000000000000fff000",
|
|
|
|
|
"f000000f0ffffffffff0000000000",
|
|
|
|
|
"000f000000ffffff0000000000000",
|
|
|
|
|
"00000000000000000000000000000",
|
2020-02-08 22:32:28 +00:00
|
|
|
|
}, {
|
2020-02-08 22:55:40 +00:00
|
|
|
|
"ff0000000000ffffff000000000ff",
|
|
|
|
|
"ffffff000ff00ffff000ffffff00f",
|
|
|
|
|
"f00ffff00ff00ff000fff00fff00f",
|
|
|
|
|
"f00fff00ffff00000fff00fff000f",
|
|
|
|
|
"0000000fffff000fffff000000fff",
|
|
|
|
|
"fffffffffffff0fffffffffffffff",
|
|
|
|
|
"ffffff000000000000000ffffffff",
|
|
|
|
|
"f000000000ffffff0000000000fff",
|
|
|
|
|
"00000000ffffffffff00000000fff",
|
|
|
|
|
"fff00000000000000000000ffffff",
|
|
|
|
|
"fffffffffffffffffffffffffffff",
|
2020-02-08 22:32:28 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-08 22:24:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local imgXsize, imgYsize = getSize(logo.img)
|
|
|
|
|
local xWall, yWall
|
|
|
|
|
|
2020-02-08 22:55:40 +00:00
|
|
|
|
local render = function(colorReplace)
|
|
|
|
|
if colorReplace then
|
|
|
|
|
drawImage(
|
|
|
|
|
colorSwap(logo.img, {["0"] = colorReplace}, {["0"] = colorReplace}),
|
|
|
|
|
floor(logo.x),
|
|
|
|
|
floor(logo.y)
|
|
|
|
|
)
|
|
|
|
|
else
|
|
|
|
|
drawImage(
|
|
|
|
|
logo.img,
|
|
|
|
|
floor(logo.x),
|
|
|
|
|
floor(logo.y)
|
|
|
|
|
)
|
|
|
|
|
end
|
2020-02-08 22:24:25 +00:00
|
|
|
|
end
|
|
|
|
|
|
2020-02-08 23:22:35 +00:00
|
|
|
|
local color = math.random(1, 15)
|
|
|
|
|
|
2020-02-08 22:24:25 +00:00
|
|
|
|
local tick = function()
|
|
|
|
|
scr_x, scr_y = term.getSize()
|
2020-02-08 22:55:40 +00:00
|
|
|
|
xWall = scr_x - imgXsize + 1 - xMargin
|
|
|
|
|
yWall = scr_y - imgYsize + 1 - yMargin
|
|
|
|
|
logo.x = min(max(logo.x + logo.xvel, 1 + xMargin), xWall)
|
|
|
|
|
logo.y = min(max(logo.y + logo.yvel, 1 + yMargin), yWall)
|
2020-02-08 22:24:25 +00:00
|
|
|
|
|
2020-02-08 22:55:40 +00:00
|
|
|
|
if floor(logo.x) == (1 + xMargin) or floor(logo.x) == xWall then
|
2020-02-08 22:24:25 +00:00
|
|
|
|
logo.xvel = -logo.xvel
|
2020-02-08 23:22:35 +00:00
|
|
|
|
color = math.random(1, 15)
|
2020-02-08 22:24:25 +00:00
|
|
|
|
end
|
2020-02-08 22:55:40 +00:00
|
|
|
|
if floor(logo.y) == (1 + yMargin) or floor(logo.y) == yWall then
|
2020-02-08 22:24:25 +00:00
|
|
|
|
logo.yvel = -logo.yvel
|
2020-02-08 23:22:35 +00:00
|
|
|
|
color = math.random(1, 15)
|
2020-02-08 22:24:25 +00:00
|
|
|
|
end
|
2020-02-09 03:40:41 +00:00
|
|
|
|
if changeColors then
|
|
|
|
|
render(string.sub("0123456789abcdef", color, color))
|
|
|
|
|
else
|
|
|
|
|
render()
|
|
|
|
|
end
|
2020-02-08 22:24:25 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
term.setBackgroundColor(colors.black)
|
|
|
|
|
term.clear()
|
|
|
|
|
|
2020-02-08 22:55:40 +00:00
|
|
|
|
local evt
|
|
|
|
|
local tID = os.startTimer(redrawDelay)
|
2020-02-08 22:24:25 +00:00
|
|
|
|
while true do
|
2020-02-08 22:55:40 +00:00
|
|
|
|
evt = {os.pullEventRaw()}
|
|
|
|
|
if evt[1] == "timer" and evt[2] == tID then
|
|
|
|
|
tick()
|
|
|
|
|
tID = os.startTimer(redrawDelay)
|
|
|
|
|
elseif evt[1] == "terminate" then
|
|
|
|
|
render("8")
|
|
|
|
|
sleep(0.05)
|
|
|
|
|
render("7")
|
|
|
|
|
sleep(0.05)
|
|
|
|
|
term.clear()
|
|
|
|
|
break
|
|
|
|
|
end
|
2020-02-08 22:24:25 +00:00
|
|
|
|
end
|
2020-02-08 22:55:40 +00:00
|
|
|
|
|
|
|
|
|
return 0
|