ldd-CC/roterm.lua

91 lines
2.5 KiB
Lua

local getAPI = function(apiname, apipath, apiurl, doDoFile, doScroll)
apipath = fs.combine(".roterm-api", apipath)
if (not fs.exists(apipath)) then
if doScroll then term.scroll(1) end
print(apiname .. " API not found! Downloading...")
local prog = http.get(apiurl)
if not prog then
if doScroll then term.scroll(1) end
error("Failed to download " .. apiname .. " API. Abort.")
term.setCursorPos(1,1)
return
end
local file = fs.open(apipath,"w")
file.write(prog.readAll())
file.close()
end
if doDoFile then
return dofile(apipath)
else
os.loadAPI(apipath)
end
if not _ENV[fs.getName(apipath)] then
if doScroll then term.scroll(1) end
error("Failed to load " .. apiname .. " API. Abort.")
term.setCursorPos(1,1)
return
else
return _ENV[fs.getName(apipath)]
end
end
local nfte = getAPI("NFT Extra", "nfte.lua", "https://github.com/LDDestroier/NFT-Extra/raw/master/nfte.lua", true)
local lddterm = getAPI("LDDTerm", "lddterm.lua", "https://github.com/LDDestroier/CC/raw/master/lddterm-cc.lua", true)
local scr_x, scr_y = term.getSize()
lddterm.alwaysRender = false
lddterm.baseTerm = term.current()
local win = lddterm.newWindow(scr_x, scr_y, 1, 1)
local t = win.handle
local angle = 0
term.redirect(t)
lddterm.transformation = function(image)
local output, adjX, adjY = nfte.rotateImage(image, math.rad(angle))
return output
end
lddterm.drawFunction = function(image, baseTerm)
baseTerm.clear()
nfte.drawImageCenter(image, nil, nil, baseTerm)
end
lddterm.cursorTransformation = function(x, y)
local originX = math.floor(scr_x / 2)
local originY = math.floor(scr_y / 2)
local ang = math.rad(angle)
return
math.floor( 0.5 + (x-originX) * math.cos(ang) - (y-originY) * math.sin(ang) ) + originX,
math.floor( 0.5 + (x-originX) * math.sin(ang) + (y-originY) * math.cos(ang) ) + originY
end
parallel.waitForAny(
function()
shell.run("/rom/programs/shell.lua")
end,
function()
local evt
local tID = os.startTimer(0.05)
while true do
evt = {os.pullEvent()}
if evt[1] == "key" then
if evt[2] == keys.pageDown then
angle = (angle + 2) % 360
lddterm.render(lddterm.transformation, lddterm.drawFunction)
elseif evt[2] == keys.pageUp then
angle = (angle - 2) % 360
lddterm.render(lddterm.transformation, lddterm.drawFunction)
end
elseif evt[1] == "timer" then
if evt[2] == tID then
lddterm.render(lddterm.transformation, lddterm.drawFunction)
tID = os.startTimer(0.05)
end
end
end
end
)