-- trippy screensaver
-- LDDestroier

local delay = 0.05

local function dist(x1, y1, x2, y2)
	return math.sqrt((x1 - x2)^2 + ((y1 - y2)^2 / 0.6666))
end

local char_lookup = "     -=@@=-"

local function render(tick, _x, _y, width, height)
	local line
	local buffer = {}
	local stick = math.sin(math.rad(tick))
	local cx = stick                    * ((width  - 5) / 2) + (width  / 2)
	local cy = math.cos(math.rad(tick)) * ((height - 5) / 2) + (height / 2)
	local i
	for y = _y, height do
		line = ""
		for x = _x, width do
			i = (math.floor(
				((stick + 1) / 3) * dist(x - tick, y - tick / 2, cx, cy) ^ 2 - tick
			) % #char_lookup) + 1
			line = line .. (char_lookup:sub(i, i) or " ")
		end
		term.setCursorPos(_x, y)
		term.write(line)
	end
end

local evt
local tickTimer = os.startTimer(delay)
local tick = 0

while true do
	evt = {os.pullEvent()}

	if evt[1] == "timer" and evt[2] == tickTimer then
		render(tick, 1, 1, term.getSize())
		tick = (tick + 0.25) % 720
		tickTimer = os.startTimer(delay)
	
	elseif evt[1] == "key" and evt[2] == keys.q then
		sleep(0.05)
		break
	end
end

term.clear()
term.setCursorPos(1, 1)
print("Fucker")
