local sideHeight = 35 local width = 55 local topHeight = 20 local polys = { { 0, 0, width/2, topHeight/2, 0, topHeight, -width/2, topHeight/2, }, { 0, topHeight, width/2, topHeight/2, width/2, topHeight/2 + sideHeight, 0, topHeight + sideHeight, }, { 0, topHeight, -width/2, topHeight/2, -width/2, topHeight/2 + sideHeight, 0, topHeight + sideHeight, }, } return function(size, discs, topCol, rightCol, leftCol) assert(size > 0) for disc in pairs(discs) do assert(disc >= -size and disc <= size) end local colours = {topCol, rightCol, leftCol} local function drawCube(x, y) love.graphics.push() love.graphics.translate(x, y) for ix, poly in ipairs(polys) do love.graphics.setColor(colours[ix]) love.graphics.polygon("fill", poly) end love.graphics.pop() end local function getHeight() return size*(topHeight/2 + sideHeight) + topHeight/2 end local x = love.graphics.getWidth()/2 local y = love.graphics.getHeight()/2 - getHeight()/2; local function qpos2Coords(se, sw) return x + se * width/2 - sw * width/2, y + (se + sw)*(topHeight/2+sideHeight) end return { getDepth = function() return -1; end, getWidth = function() return size*width*2 end, getHeight = getHeight, getSize = function() return size; end, getCubeSideHeight = function() return sideHeight; end, getCubeTopHeight = function() return topHeight; end, getCubeHeight = function() return sideHeight+topHeight; end, getCubeWidth = function() return width; end, getRowHeight = function() return sideHeight+topHeight/2; end, getColWidth = function() return width/2; end, qpos2Coords = qpos2Coords, draw = function() for se = 0, size-1 do for sw = 0, size-1 do if (se + sw < size) then local x, y = qpos2Coords(se, sw) drawCube(x, y) end end end end, update = function(dt) end, } end