2018-11-13 20:02:55 +00:00
|
|
|
|
local scr_x, scr_y = term.getSize()
|
|
|
|
|
|
|
|
|
|
local grid = {
|
2018-11-13 20:39:29 +00:00
|
|
|
|
x1 = -80,
|
|
|
|
|
y1 = -80,
|
|
|
|
|
x2 = 80,
|
|
|
|
|
y2 = 80,
|
2018-11-13 20:06:05 +00:00
|
|
|
|
border = "#",
|
2018-11-13 20:02:55 +00:00
|
|
|
|
voidcol = "f",
|
|
|
|
|
forecol = "8",
|
|
|
|
|
backcol = "7",
|
|
|
|
|
edgecol = "0"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local scrollX = 0
|
|
|
|
|
local scrollY = 0
|
|
|
|
|
|
|
|
|
|
local player = {
|
|
|
|
|
x = 0,
|
|
|
|
|
y = 0,
|
|
|
|
|
color = colors.blue
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-13 21:35:25 +00:00
|
|
|
|
local control = {
|
|
|
|
|
up = keys.up,
|
|
|
|
|
down = keys.down,
|
|
|
|
|
left = keys.left,
|
|
|
|
|
right = keys.right,
|
|
|
|
|
lookUp = keys.w,
|
|
|
|
|
lookDown = keys.s,
|
|
|
|
|
lookLeft = keys.a,
|
|
|
|
|
lookRight = keys.d,
|
|
|
|
|
release = keys.space
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- keeps track of where you are
|
|
|
|
|
local gamemode = ""
|
|
|
|
|
|
|
|
|
|
-- foreground grid
|
2018-11-13 20:17:08 +00:00
|
|
|
|
local gridFore = {
|
|
|
|
|
"+-------",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| "
|
2018-11-13 20:39:29 +00:00
|
|
|
|
|
|
|
|
|
}
|
2018-11-13 21:35:25 +00:00
|
|
|
|
|
|
|
|
|
-- background grid
|
2018-11-13 20:39:29 +00:00
|
|
|
|
local gridBack = {
|
|
|
|
|
"+------------",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| ",
|
|
|
|
|
"| "
|
2018-11-13 20:17:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-11-13 20:02:55 +00:00
|
|
|
|
--draws grid and background at scroll 'x' and 'y'
|
|
|
|
|
local drawGrid = function(x, y)
|
2018-11-13 20:11:07 +00:00
|
|
|
|
x, y = math.floor(x + 0.5), math.floor(y + 0.5)
|
2018-11-13 20:02:55 +00:00
|
|
|
|
local bg = {{},{},{}}
|
|
|
|
|
local foreX, foreY
|
|
|
|
|
local backX, backY
|
|
|
|
|
local adjX, adjY
|
|
|
|
|
for sy = 1, scr_y do
|
|
|
|
|
bg[1][sy] = ""
|
|
|
|
|
bg[2][sy] = ""
|
|
|
|
|
bg[3][sy] = ""
|
|
|
|
|
for sx = 1, scr_x do
|
|
|
|
|
adjX = (sx - x)
|
|
|
|
|
adjY = (sy - y)
|
|
|
|
|
foreX = 1 + (sx - x) % #gridFore[1]
|
|
|
|
|
foreY = 1 + (sy - y) % #gridFore
|
2018-11-13 20:39:29 +00:00
|
|
|
|
backX = 1 + math.floor(sx - (x / 3)) % #gridBack[1]
|
|
|
|
|
backY = 1 + math.floor(sy - (y / 3)) % #gridBack
|
|
|
|
|
if adjX < grid.x1 or adjX > grid.x2 or adjY < grid.y1 or adjY > grid.y2 then
|
|
|
|
|
bg[1][sy] = bg[1][sy] .. " "
|
|
|
|
|
bg[2][sy] = bg[2][sy] .. grid.voidcol
|
|
|
|
|
bg[3][sy] = bg[3][sy] .. grid.voidcol
|
|
|
|
|
elseif adjX == grid.x1 or adjX == grid.x2 or adjY == grid.y1 or adjY == grid.y2 then
|
2018-11-13 20:02:55 +00:00
|
|
|
|
bg[1][sy] = bg[1][sy] .. grid.border
|
|
|
|
|
bg[2][sy] = bg[2][sy] .. grid.voidcol
|
|
|
|
|
bg[3][sy] = bg[3][sy] .. grid.edgecol
|
|
|
|
|
else
|
|
|
|
|
if gridFore[foreY]:sub(foreX,foreX) ~= " " then
|
|
|
|
|
bg[1][sy] = bg[1][sy] .. gridFore[foreY]:sub(foreX,foreX)
|
|
|
|
|
bg[2][sy] = bg[2][sy] .. grid.forecol
|
|
|
|
|
bg[3][sy] = bg[3][sy] .. grid.voidcol
|
2018-11-13 20:06:05 +00:00
|
|
|
|
elseif gridBack[backY]:sub(backX,backX) ~= " " then
|
|
|
|
|
bg[1][sy] = bg[1][sy] .. gridBack[backY]:sub(backX,backX)
|
2018-11-13 20:02:55 +00:00
|
|
|
|
bg[2][sy] = bg[2][sy] .. grid.backcol
|
|
|
|
|
bg[3][sy] = bg[3][sy] .. grid.voidcol
|
|
|
|
|
else
|
|
|
|
|
bg[1][sy] = bg[1][sy] .. " "
|
|
|
|
|
bg[2][sy] = bg[2][sy] .. grid.voidcol
|
|
|
|
|
bg[3][sy] = bg[3][sy] .. grid.voidcol
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for sy = 1, scr_y do
|
|
|
|
|
term.setCursorPos(1,sy)
|
|
|
|
|
term.blit(bg[1][sy], bg[2][sy], bg[3][sy])
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2018-11-13 21:35:25 +00:00
|
|
|
|
local deepCopy
|
|
|
|
|
deepCopy = function(tbl)
|
|
|
|
|
local output = {}
|
|
|
|
|
for k,v in pairs(tbl) do
|
|
|
|
|
if type(v) == "table" then
|
|
|
|
|
output[k] = deepCopy(v)
|
|
|
|
|
else
|
|
|
|
|
output[k] = v
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return output
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local makeMenu = function(options, x, y)
|
|
|
|
|
local cpos = 1
|
|
|
|
|
local cursor = "> "
|
|
|
|
|
local render = function()
|
|
|
|
|
for i = 1, #options do
|
|
|
|
|
term.setCursorPos(x, y + (i - 1))
|
|
|
|
|
if i == cpos then
|
|
|
|
|
term.setTextColor(colors.white)
|
|
|
|
|
term.write(cursor .. options[i])
|
|
|
|
|
else
|
|
|
|
|
term.setTextColor(colors.gray)
|
|
|
|
|
term.write((" "):rep(#cursor) .. options[i])
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- finish please
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local titleScreen = function()
|
|
|
|
|
local logo = {
|
|
|
|
|
{
|
|
|
|
|
"",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
" ",
|
|
|
|
|
"
",
|
|
|
|
|
" ",
|
|
|
|
|
"
",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"",
|
|
|
|
|
" f7777777777777777777f f77777f 7f f777",
|
|
|
|
|
" f99979999979999999999f 799999799 77f7 f997",
|
|
|
|
|
" 799 79999f997ffff9977997f f997",
|
|
|
|
|
" 799 7797777fffff997ffff9977997797997",
|
|
|
|
|
" 799 799 799977f7797fff7997799 79797",
|
|
|
|
|
" 799 799 7797f 797999997 799 797",
|
|
|
|
|
" 777 777 7777 7777777 777 77",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"",
|
|
|
|
|
" 7999999999f9999999997 7999997 97 799f",
|
|
|
|
|
" 7777997777f77777779997 997777997 997f 799f",
|
|
|
|
|
" 997 f7777799ffff799f99997 799f",
|
|
|
|
|
" 997 997f9997fff799ffff799f997ff7999f",
|
|
|
|
|
" 997 997 f7999fff999777997f997 f799f",
|
|
|
|
|
" 997 997 f9997 f7999977f 997 f7f",
|
|
|
|
|
" fff fff ffff fffffff fff ff",
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local drawLogo = function(x, y, darkmod)
|
|
|
|
|
local cx, cy = term.getCursorPos()
|
|
|
|
|
for iy = 1, #logo[1] do
|
|
|
|
|
term.setCursorPos(x,y+(iy-1))
|
|
|
|
|
term.blit(logo[1][iy], logo[2][iy], logo[3][iy])
|
|
|
|
|
end
|
|
|
|
|
term.setCursorPos(cx,cy)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
term.clear()
|
|
|
|
|
drawLogo(3,2)
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
titleScreen()
|
|
|
|
|
|
|
|
|
|
|
2018-11-13 20:02:55 +00:00
|
|
|
|
-- test background drawing
|
|
|
|
|
|
2018-11-13 20:39:29 +00:00
|
|
|
|
local evt
|
|
|
|
|
local keysDown = {}
|
|
|
|
|
local getInput = function()
|
|
|
|
|
while true do
|
|
|
|
|
evt = {os.pullEvent()}
|
|
|
|
|
if evt[1] == "key" then
|
|
|
|
|
keysDown[evt[2]] = true
|
|
|
|
|
elseif evt[1] == "key_up" then
|
|
|
|
|
keysDown[evt[2]] = false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local gridDemo = function()
|
|
|
|
|
while true do
|
|
|
|
|
if keysDown[keys.left] then
|
|
|
|
|
scrollX = scrollX + 1
|
|
|
|
|
end
|
|
|
|
|
if keysDown[keys.right] then
|
|
|
|
|
scrollX = scrollX - 1
|
|
|
|
|
end
|
|
|
|
|
if keysDown[keys.up] then
|
|
|
|
|
scrollY = scrollY + 1
|
|
|
|
|
end
|
|
|
|
|
if keysDown[keys.down] then
|
|
|
|
|
scrollY = scrollY - 1
|
|
|
|
|
end
|
|
|
|
|
drawGrid(scrollX, scrollY)
|
|
|
|
|
sleep(0.05)
|
|
|
|
|
end
|
2018-11-13 20:02:55 +00:00
|
|
|
|
end
|
2018-11-13 20:39:29 +00:00
|
|
|
|
parallel.waitForAny(getInput, gridDemo)
|