-- maid64 made by adekto -- -- version 1.6 -- -- MIT license -- -- Copyright (c)2016-2017 adekto -- local maid64 = {mouse = {}} function maid64.setup(x,y,overscan) maid64.overscan = overscan or false maid64.sizeX = x or 64 maid64.sizeY = y or maid64.sizeX if x < (y or 0) then maid64.scaler = love.graphics.getHeight() / maid64.sizeY else maid64.scaler = love.graphics.getWidth() / maid64.sizeX end maid64.x = love.graphics.getWidth()/2 - (maid64.scaler * (maid64.sizeX/2)) maid64.y = love.graphics.getHeight()/2 - (maid64.scaler * (maid64.sizeY/2)) maid64.canvas = love.graphics.newCanvas(maid64.sizeX, maid64.sizeY) maid64.canvas:setFilter("nearest") -- run resize so the sceen is reset corectly maid64.resize(love.graphics.getDimensions()) end function maid64.start() love.graphics.setCanvas(maid64.canvas) love.graphics.clear() end function maid64.finish() love.graphics.setCanvas() --love.graphics.setShader() --used only for special shaders love.graphics.draw(maid64.canvas, maid64.x, maid64.y, 0, maid64.scaler) end function maid64.resize(w, h) if maid64.overscan then maid64.scaler = h / maid64.sizeY -- minimum size will be halve the buffer width if w/maid64.scaler < maid64.sizeX/2 then maid64.scaler = w / maid64.sizeX*2 end -- overscan scaler maid64.x = (w - (maid64.scaler * maid64.sizeX))/2 if w/maid64.scaler > maid64.sizeX then maid64.right = maid64.sizeX maid64.left = 0 else maid64.right = ((w - (maid64.x))/maid64.scaler) maid64.left = -(maid64.x/maid64.scaler) end else if h/maid64.sizeY < w/maid64.sizeX then maid64.scaler = h / maid64.sizeY else maid64.scaler = w / maid64.sizeX end maid64.right = maid64.sizeX maid64.left = 0 maid64.x = w/2 - (maid64.scaler * (maid64.sizeX/2)) end maid64.y = h/2 - (maid64.scaler * (maid64.sizeY/2)) end function maid64.mouse.getPosition() local mx = math.floor((love.mouse.getX() - maid64.x) / (maid64.scaler * maid64.sizeY) * maid64.sizeY) local my = math.floor((love.mouse.getY() - maid64.y) / (maid64.scaler * maid64.sizeX) * maid64.sizeX) return mx, my end function maid64.mouse.getX() return math.floor((love.mouse.getX() - maid64.x) / (maid64.scaler * maid64.sizeX) * maid64.sizeX) end function maid64.mouse.getY() return math.floor((love.mouse.getY() - maid64.y) / (maid64.scaler * maid64.sizeY) * maid64.sizeY) end function maid64.newImage(source) local image = love.graphics.newImage(source) image:setFilter("nearest") return image end function maid64.newTileSet(image, x, y) local quad = {x = x, y = y} for i=0, (image:getWidth()/x) * (image:getHeight()/y) - 1 do quad[i] = love.graphics.newQuad( (i % (image:getWidth()/x)) * x, math.floor(i/(image:getWidth()/x))*y, x, y, image:getDimensions()) end return quad end return maid64