function createHex(centerX, centerY) local hex = {} hex.centerX = centerX hex.centerY = centerY hex.size = 45 --The height is size *2 --The width is sqrt(3)/2 * height --Horizontal distance between two hexes is horiz = width hex.height = hex.size * 2 hex.width = math.sqrt(3)/2 * hex.height local lastX = nil local lastY = nil hex.sides = {} for i=0,6 do local angle = 2 * math.pi/6 * (i + 0.5) local x = hex.centerX + hex.size * math.cos(angle) local y = hex.centerY + hex.size * math.sin(angle) if i > 0 then hex.sides[i] = {lastX, lastY, x, y} end lastX = x lastY = y end return hex end function createGrid() hexes = {} --width and height of hex grid maxX = 10 maxY = 1 centerX= love.graphics.getWidth() / 2 centerY = love.graphics.getHeight() / 2 for y=1, maxY do for x=1, maxX do if x == 1 then hexes[x] = createHex (centerX, centerY) else centerX = hexes[x-1].centerX + hexes[x-1].width hexes[x] = createHex( centerX, centerY) end end end end function love.load() createGrid() end function love.update() end function love.draw() love.graphics.setColor({255,255,255,255}) --create our first hex #note: this will all end up --in a single for loop to draw a complete grid -- temp=createHex (300,300) -- hex1=createHex(0+temp.width,0+temp.height) -- for i=1, #hex1.sides do -- love.graphics.line(unpack(hex1.sides[i])) -- end ---------------------- for h=1, #hexes do for l=1, #hexes[h].sides do love.graphics.line(unpack(hexes[h].sides[l])) end end --Here we create another hex and place it to the side -- newCenterX = hex1.centerX + hex1.width -- hex2=createHex(newCenterX,hex1.centerY) -- for i=1, #hex2.sides do -- love.graphics.line(unpack(hex2.sides[i])) -- end -- Here we want to move down a row and base it from the first hex -- newCenterY = hex1.centerY+(hex1.height * 3/4) -- newCenterX = (hex1.centerX + hex2.centerX)/2 -- hex3 = createHex(newCenterX, newCenterY) -- for i=1, #hex3.sides do -- love.graphics.line(unpack(hex3.sides[i])) -- end end