-- TODO: phase out global variables -- p.s. yeah right. this makes my functions look cleaner size = 50 shipAngle = 0 arenaW = 1024 arenaH = 768 function locXY(locx, locy, globx, globy, angle) tempx = locx * size tempy = locy * size newx = (tempx * math.cos(angle) - tempy * math.sin(angle)) + shipV.OX newy = (tempx * math.sin(angle) + tempy * math.cos(angle)) + shipV.OY return newx, newy end function scaleshape(locx, locy, globx, globy, sca) tx = locx * size * sca + globx % arenaW ty = locy * size * sca + globy % arenaH return tx, ty end function updateshape(x, y, angle, speed, dt) x = (x + math.cos(angle) * speed * dt) y = (y + math.sin(angle) * speed * dt) return x, y end -- loads function variables function love.load() background = love.graphics.newImage("grid.png") success = love.window.setMode(arenaW, arenaH, {resizable=true, highdpi = true}) -- moving velocities rotateSpeed = 10 accelSpeed = 100 rockSpeed = 30 -- cursor vertex dimensions shipV = { Xspeed = 0, Yspeed = 0, theta = 0, OX = arenaW / 2, OY = arenaH / 2, C = { AX = 1, AY = 0, -- front right BX = -1, BY = 1, -- top left CX = 0, CY = 0, -- center DX = -1, DY = -1 -- bottom left }, erts = {} } -- shapes rockSize = 60 rockSpeed = 80 shapes = { hex = { v = { 0, 1, -1, 0.5, -1, -0.5, 0, -1, 1, -0.5, 1, 0.5 }, color = {0, 0, 0} }, square = { v = { 1, 1, -1, 1, -1, -1, 1, -1 }, color = {0, 0, 0} }, tri = { v = { 0, 1, -1, -1, 1, -1 }, color = {0, 0, 0} }, } for model, shape in pairs(shapes) do scale = math.random(0,2) shape.angle = love.math.random() * (2 * math.pi) shape.size = rockSize shape.speed = rockSpeed shape.OX = arenaW + math.random(-arenaW, arenaW) % arenaW shape.OY = arenaH + math.random(-arenaH, arenaH) % arenaH for i = 1, #shape.color do shape.color[i] = math.random() end for i = 1, #shape.v, 2 do shape.v[i], shape.v[i + 1] = scaleshape(shape.v[i], shape.v[i + 1], shape.OX, shape.OY, scale) end end end function shipfn(dt) -- Basic Ship Controls -- rotation controls if love.keyboard.isDown('right') then shipV.theta = shipV.theta + rotateSpeed * dt end if love.keyboard.isDown('left') then shipV.theta = shipV.theta - rotateSpeed * dt end -- movement controls if love.keyboard.isDown('up') then shipV.Xspeed = shipV.Xspeed + math.cos(shipV.theta) * accelSpeed * dt shipV.Yspeed = shipV.Yspeed + math.sin(shipV.theta) * accelSpeed * dt end if love.keyboard.isDown('down') then shipV.Xspeed = shipV.Xspeed - math.cos(shipV.theta) * accelSpeed * dt shipV.Yspeed = shipV.Yspeed - math.sin(shipV.theta) * accelSpeed * dt end end -- asteroid data function asteroidfn(dt) -- ASTEROIDS -- -- TODO: make polygons and add bounce for model, shape in pairs(shapes) do shape.OX = (shape.OX + math.cos(shape.angle) * shape.speed * dt) % arenaW shape.OY = (shape.OY + math.sin(shape.angle) * shape.speed * dt) % arenaH for i = 1, #shape.v, 2 do shape.v[i], shape.v[i + 1] = updateshape(shape.v[i], shape.v[i + 1], shape.angle, shape.speed, dt) end end end -- update loop function love.update(dt) -- update ship data shipfn(dt) -- update shapes asteroidfn(dt) -- takes in default vectors and outputs updated values tax, tay = locXY(shipV.C.AX, shipV.C.AY, shipV.OX, shipV.OY, shipV.theta) tbx, tby = locXY(shipV.C.BX, shipV.C.BY, shipV.OX, shipV.OY, shipV.theta) tcx, tcy = locXY(shipV.C.CX, shipV.C.CY, shipV.OX, shipV.OY, shipV.theta) tdx, tdy = locXY(shipV.C.DX, shipV.C.DY, shipV.OX, shipV.OY, shipV.theta) shipV.erts = {tax, tay, tbx, tby, tcx, tcy, tdx, tdy} -- wrappers / update function shipV.theta = shipV.theta % (2 * math.pi) shipV.OX = (shipV.OX + shipV.Xspeed * dt) % arenaW shipV.OY = (shipV.OY + shipV.Yspeed * dt) % arenaH end -- what do you think draw does?! function love.draw() for y = -1, 1 do for x = -1, 1 do love.graphics.setColor(1, 1, 1) love.graphics.draw(background, arenaW, arenaH) love.graphics.origin() love.graphics.translate(x * arenaW, y * arenaH) love.graphics.setColor(0.2, 0, 1) love.graphics.polygon('fill', shipV.erts) for shapesIndex, shape in pairs(shapes) do love.graphics.setColor(shape.color[1], shape.color[2], shape.color[3]) love.graphics.polygon('fill', shape.v) end end end love.graphics.origin() love.graphics.setColor(0,0,0) love.graphics.print(table.concat({ -- 'shipX: '..shipV.OX, -- 'shipY: '..shipV.OY,, 'shipAX: '..shipV.erts[1] - arenaW / 2, 'shipAY: '..-1 * (shipV.erts[2] - arenaH / 2), 'shipBX: '..shipV.erts[3] - arenaW / 2, 'shipBY: '..-1 * (shipV.erts[4] - arenaH / 2), 'shipCX: '..shipV.erts[5] - arenaW / 2, 'shipCY: '..-1 * (shipV.erts[6] - arenaH / 2), 'shipDX: '..shipV.erts[7] - arenaW / 2, 'shipDY: '..-1 * (shipV.erts[8] - arenaH / 2), 'triAX: '..shapes.tri.v[1], 'triAY: '..shapes.tri.v[2], 'triBX: '..shapes.tri.v[3], 'triBY: '..shapes.tri.v[4], 'triCX: '..shapes.tri.v[5], 'triCY: '..shapes.tri.v[6], -- 'shipSpdX '..shipSpeedX, -- 'shipSpdY '..shipSpeedY },'\n') ) end