simpleScale = {} --Your Game's Aspect Ratio local gAspectRatio --The Window's Aspect Ratio local wAspectRatio --The scale between the game and the window's aspect ratio simpleScale.scale = 1 local xt, yt = 0, 0, 1 local gameW, gameH, windowW, windowH = 800, 600, 800, 600 -- Declares your game's width and height, and sets the window size/settings -- To be used instead of love.window.setMode -- [gw] and [gh] are the width and height of the initial game -- [sw] and [sh] (optional) are the width and height of the final window -- [settings] (optional) are settings for love.window.setMode function simpleScale.setWindow(gw, gh, sw, sh, settings) sw = sw or gw sh = sh or gh gAspectRatio = gw/gh gameW = gw gameH = gh simpleScale.updateWindow(sw, sh, settings) end -- Updates the Window size/settings -- To be used instead of love.window.setMode -- [sw] and [sh] are the width and height of the new Window -- [settings] (optional) are settings for love.window.setMode function simpleScale.updateWindow(sw, sh, settings) love.window.setMode(sw, sh, settings) windowW, windowH = love.graphics.getWidth(), love.graphics.getHeight() wAspectRatio = windowW/windowH --Window aspect ratio is TALLER than game if gAspectRatio > wAspectRatio then scale = windowW/gameW xt = 0 yt = windowH/2 - (scale*gameH)/2 --Window aspect ratio is WIDER than game elseif gAspectRatio < wAspectRatio then scale = windowH/gameH xt = windowW/2 - (scale*gameW)/2 yt = 0 --Window and game aspect ratios are EQUAL else scale = windowW/gameW xt = 0 yt = 0 end simpleScale.scale = scale end -- If you screen is resizable on drag, you'll need to call this to make sure -- the appropriate screen values stay updated -- You can call it on love.update() with no trouble function simpleScale.resizeUpdate() windowW, windowH = love.graphics.getWidth(), love.graphics.getHeight() wAspectRatio = windowW/windowH --Window aspect ratio is TALLER than game if gAspectRatio > wAspectRatio then scale = windowW/gameW xt = 0 yt = windowH/2 - (scale*gameH)/2 --Window aspect ratio is WIDER than game elseif gAspectRatio < wAspectRatio then scale = windowH/gameH xt = windowW/2 - (scale*gameW)/2 yt = 0 --Window and game aspect ratios are EQUAL else scale = windowW/gameW xt = 0 yt = 0 end simpleScale.scale = scale end -- Transforms the game's window relative to the entire window -- Call this at the beginning of love.draw() function simpleScale.set() love.graphics.push() love.graphics.translate(xt, yt) love.graphics.scale(scale, scale) end -- Untransforms the game's window -- Call this at the end of love.draw -- You can optionally make the letterboxes a specific color by passing -- [color] (optional) a table of color values function simpleScale.unSet(color) love.graphics.scale(1/scale, 1/scale) love.graphics.translate(-xt, -yt) love.graphics.pop() --Draw the Letterboxes local r,g,b,a = love.graphics.getColor() local originalColor = love.graphics.getColor() local boxColor if color == nil then boxColor = {0,0,0} else boxColor = color end love.graphics.setColor(boxColor) --Horizontal bars if gAspectRatio > wAspectRatio then love.graphics.rectangle("fill", 0, 0, windowW, math.abs((gameH*scale - (windowH))/2)) love.graphics.rectangle("fill", 0, windowH, windowW, -math.abs((gameH*scale - (windowH))/2)) --Vertical bars elseif gAspectRatio < wAspectRatio then love.graphics.rectangle("fill", 0, 0, math.abs((gameW*scale - (windowW))/2),windowH) love.graphics.rectangle("fill", windowW, 0, -math.abs((gameW*scale - (windowW))/2),windowH) end love.graphics.setColor(r,g,b,a) end