SHOW:
|
|
- or go back to the newest paste.
1 | - | local nfte = require "nfte" |
1 | + | |
2 | if mon then | |
3 | mon.setTextScale(0.5) | |
4 | term.redirect(mon) | |
5 | - | mon.setTextScale(0.5) |
5 | + | |
6 | - | term.redirect(mon) |
6 | + | |
7 | -- adjusts walls of screen so that it will bounce further/closer to the boundries of the screen | |
8 | local xMargin, yMargin = 0, 0 | |
9 | ||
10 | local redrawDelay = nil | |
11 | local changeColors = true | |
12 | - | xvel = 1, --math.random(0, 3) - 1.5, |
12 | + | |
13 | - | yvel = 1, --math.random(0, 3) - 1.5, |
13 | + | |
14 | - | x = scr_x / 2, |
14 | + | |
15 | - | y = scr_y / 2, |
15 | + | local floor, ceil = math.floor, math.ceil |
16 | - | img = nfte.loadImage("dvdlogo.nft") |
16 | + | |
17 | if scr_x >= 60 and scr_y >= 25 then | |
18 | redrawDelay = redrawDelay or 0.05 | |
19 | - | local render = function() |
19 | + | else |
20 | - | term.clear() |
20 | + | redrawDelay = redrawDelay or 0.1 |
21 | - | nfte.drawImage(logo.img, math.floor(logo.x), math.floor(logo.y)) |
21 | + | |
22 | ||
23 | local getSize = function(image) | |
24 | local x, y = 0, #image[1] | |
25 | for y = 1, #image[1] do | |
26 | x = max(x, #image[1][y]) | |
27 | - | local imgXsize, imgYsize = nfte.getSize(logo.img) |
27 | + | end |
28 | - | local xWall = scr_x - imgXsize + 1 |
28 | + | return x, y |
29 | - | local yWall = scr_y - imgYsize + 1 |
29 | + | |
30 | - | logo.x = min(max(logo.x + logo.xvel, 1), xWall) |
30 | + | |
31 | - | logo.y = min(max(logo.y + logo.yvel, 1), yWall) |
31 | + | local drawImage = function(image, x, y, terminal) |
32 | - | |
32 | + | terminal = terminal or term.current() |
33 | - | if math.floor(logo.x) == 1 or math.floor(logo.x) == xWall then |
33 | + | local cx, cy = terminal.getCursorPos() |
34 | - | logo.xvel = -logo.xvel |
34 | + | for iy = 0, #image[1] + 1 do |
35 | - | end |
35 | + | terminal.setCursorPos(x - 1, y + (iy - 1)) |
36 | - | if math.floor(logo.y) == 1 or math.floor(logo.y) == yWall then |
36 | + | if image[1][iy] then |
37 | - | logo.yvel = -logo.yvel |
37 | + | terminal.blit( |
38 | - | end |
38 | + | " " .. image[1][iy] .. " ", |
39 | - | render() |
39 | + | "f" .. image[2][iy] .. "f", |
40 | "f" .. image[3][iy] .. "f" | |
41 | ) | |
42 | else | |
43 | - | tick() |
43 | + | terminal.clearLine() |
44 | - | sleep(0.05) |
44 | + | end |
45 | - | end |
45 | + | end |
46 | terminal.setCursorPos(cx,cy) | |
47 | end | |
48 | ||
49 | local colorSwap = function(image, text, back) | |
50 | local output = {{},{},{}} | |
51 | for y = 1, #image[1] do | |
52 | output[1][y] = image[1][y] | |
53 | output[2][y] = image[2][y]:gsub(".", text) | |
54 | output[3][y] = image[3][y]:gsub(".", back or text) | |
55 | end | |
56 | return output | |
57 | end | |
58 | ||
59 | local logo = { | |
60 | xvel = (math.random(0, 1) * 2) - 1, | |
61 | yvel = (math.random(0, 1) * 2) - 1, | |
62 | x = floor(scr_x / 2), | |
63 | y = floor(scr_y / 2), | |
64 | img = { | |
65 | { | |
66 | " ", | |
67 | " ", | |
68 | " ", | |
69 | " ", | |
70 | " ", | |
71 | " ", | |
72 | " ", | |
73 | " ", | |
74 | " ", | |
75 | " ", | |
76 | " ", | |
77 | }, { | |
78 | "00ffffffffff000000fffffffffff", | |
79 | "000000f0f00000000f000000000f0", | |
80 | "0f00fff0000f000ff000ff0000f00", | |
81 | "0f00fff0000000f00000f0000ff00", | |
82 | "f00ff0000000f0000000f0fff0000", | |
83 | "00000000000000000000000000000", | |
84 | "000000fffffffffffffff00000000", | |
85 | "0fff0000000000000000000fff000", | |
86 | "f000000f0ffffffffff0000000000", | |
87 | "000f000000ffffff0000000000000", | |
88 | "00000000000000000000000000000", | |
89 | }, { | |
90 | "ff0000000000ffffff000000000ff", | |
91 | "ffffff000ff00ffff000ffffff00f", | |
92 | "f00ffff00ff00ff000fff00fff00f", | |
93 | "f00fff00ffff00000fff00fff000f", | |
94 | "0000000fffff000fffff000000fff", | |
95 | "fffffffffffff0fffffffffffffff", | |
96 | "ffffff000000000000000ffffffff", | |
97 | "f000000000ffffff0000000000fff", | |
98 | "00000000ffffffffff00000000fff", | |
99 | "fff00000000000000000000ffffff", | |
100 | "fffffffffffffffffffffffffffff", | |
101 | } | |
102 | } | |
103 | } | |
104 | ||
105 | local imgXsize, imgYsize = getSize(logo.img) | |
106 | local xWall, yWall | |
107 | ||
108 | local render = function(colorReplace) | |
109 | if colorReplace then | |
110 | drawImage( | |
111 | colorSwap(logo.img, {["0"] = colorReplace}, {["0"] = colorReplace}), | |
112 | floor(logo.x), | |
113 | floor(logo.y) | |
114 | ) | |
115 | else | |
116 | drawImage( | |
117 | logo.img, | |
118 | floor(logo.x), | |
119 | floor(logo.y) | |
120 | ) | |
121 | end | |
122 | end | |
123 | ||
124 | local color = math.random(1, 15) | |
125 | ||
126 | local tick = function() | |
127 | scr_x, scr_y = term.getSize() | |
128 | xWall = scr_x - imgXsize + 1 - xMargin | |
129 | yWall = scr_y - imgYsize + 1 - yMargin | |
130 | logo.x = min(max(logo.x + logo.xvel, 1 + xMargin), xWall) | |
131 | logo.y = min(max(logo.y + logo.yvel, 1 + yMargin), yWall) | |
132 | ||
133 | if floor(logo.x) == (1 + xMargin) or floor(logo.x) == xWall then | |
134 | logo.xvel = -logo.xvel | |
135 | color = math.random(1, 15) | |
136 | end | |
137 | if floor(logo.y) == (1 + yMargin) or floor(logo.y) == yWall then | |
138 | logo.yvel = -logo.yvel | |
139 | color = math.random(1, 15) | |
140 | end | |
141 | if changeColors then | |
142 | render(string.sub("0123456789abcdef", color, color)) | |
143 | else | |
144 | render() | |
145 | end | |
146 | end | |
147 | ||
148 | term.setBackgroundColor(colors.black) | |
149 | term.clear() | |
150 | ||
151 | local evt | |
152 | local tID = os.startTimer(redrawDelay) | |
153 | while true do | |
154 | evt = {os.pullEventRaw()} | |
155 | if evt[1] == "timer" and evt[2] == tID then | |
156 | tick() | |
157 | tID = os.startTimer(redrawDelay) | |
158 | elseif evt[1] == "terminate" then | |
159 | render("8") | |
160 | sleep(0.05) | |
161 | render("7") | |
162 | sleep(0.05) | |
163 | term.clear() | |
164 | break | |
165 | end | |
166 | end | |
167 | ||
168 | return 0 |