practice = Class{} local levelLoaded = false local M = {} local currenctScore = 0 function love.wheelmoved(x, y) if gameStatus == "play" then if y > 0 and camera.scale < 1 then camera.scale = camera.scale + 0.1 elseif y < 0 and camera.scale > 0.5 then camera.scale = camera.scale - 0.1 end end end function practice.update(dt) if not levelLoaded then shipsleft = 1 planetsleft = 10 cannonsleft = 10 gameStatus = "setup" playbutts = {} guibutts = {} XCAM = 0 currentScore = 0 thrusterMax = 0 YCAM = 0 firstShip.fuel = 0 explosions = {} shipIsHit = false guimenu = mainMenu() table.insert(playbutts, menu:addButton("Return to setup", function() gameStatus = "setup" practice.reset() end )) table.insert(guibutts, menu:addButton("Release brake!", function () if shipsleft == 0 then selectedItem = "none" gameStatus = "play" end end )) table.insert(guibutts, menu:addButton("To menu", function () practice.goBack() end )) levelLoaded = true end camera:update(dt) --print(camera.x .. " " .. camera.y) for i, explosion in ipairs(explosions) do explosion:update(dt) if explosion.killed then table.remove(explosions, i) if shipIsHit then gameStatus = "setup" practice.reset() end end end if gameStatus == "play" then camera.x, camera.y = firstShip.x - firstShip.height*4, firstShip.y- firstShip.width --print(camera.x .. firstShip.x) if shipIsHit then if #explosions == 0 then table.insert(explosions, explosion(firstShip.x, firstShip.y, 100, {1,1,1,1})) end end firstShip:update(dt) for i in ipairs(planets) do planets[i]:update(dt) end for i in ipairs(cannons) do cannons[i]:update(dt) end for i in ipairs(projectiles) do projectiles[i]:update(dt) end for i in ipairs(projectiles) do if projectiles[i].killed then table.remove(projectiles, i) --print("killing") end end if math.sqrt(firstShip.dx^2 + firstShip.dy^2) < 40 then currentScore = currentScore + math.sqrt(firstShip.dx^2 + firstShip.dy^2) end else camera:follow(VCAM.x, VCAM.y) end practice.GUIControl() end function practice.draw() camera:attach() firstShip:draw() for i in ipairs(planets) do planets[i]:draw(dt) end for i in ipairs(cannons) do cannons[i]:draw(dt) end for i in ipairs(projectiles) do projectiles[i]:draw(dt) end --love.graphics.rectangle("fill",VCAM.x,VCAM.y,30,30) for i, explosion in ipairs(explosions) do if shipIsHit then explosion:render() else explosion:render("special") end --print("exploding") end camera:detach() camera:draw() if gameStatus == "setup" then GUIDraw("anywhere") love.graphics.setFont(tinyfont) local textW = tinyfont:getWidth("Top score: " .. math.floor(saveData.score/100)) love.graphics.print("Top score: " .. math.floor(saveData.score/100), WINDOW_WIDTH/2-textW/2, 10) practice.hint() elseif gameStatus == "play" then local textW = tinyfont:getWidth("Score: " .. math.floor(currentScore/100)) love.graphics.setFont(tinyfont) love.graphics.print("Score: " .. math.floor(currentScore/100), WINDOW_WIDTH/2-textW/2, 10) guimenu:butt(playbutts, WINDOW_WIDTH, WINDOW_HEIGHT, 1100, WINDOW_HEIGHT-50, 40, WINDOW_WIDTH/3) love.keyboard.mouseisReleased = false end end function practice.goBack() practice.reset() gameStatus = "setup" levelLoaded = false gameState = "menu" cannons = {} end function practice.reset() firstShip:reset() camera.scale = 1 projectiles = {} shipsleft = 1 if currentScore > saveData.score then saveData.score = currentScore love.filesystem.write("save", serialize(saveData)) end currentScore = 0 shipIsHit = false firstShip.fuel = 99999 end function practice.GUIControl() if (love.keyboard.isDown('w')) then VCAM.y = VCAM.y - 10 end if (love.keyboard.isDown('a')) then VCAM.x = VCAM.x - 10 end if (love.keyboard.isDown('s')) then VCAM.y = VCAM.y + 10 end if (love.keyboard.isDown('d')) then VCAM.x = VCAM.x + 10 end end function practice.hint() love.graphics.setFont(tinyfont) if love.keyboard.isDown('w') then love.graphics.setColor(1,0,0,1) end love.graphics.print("↑[W]",80,10) love.graphics.setColor(1,1,1,1) if love.keyboard.isDown('s') then love.graphics.setColor(1,0,0,1) end love.graphics.print("↓[S]",80,100) love.graphics.setColor(1,1,1,1) if love.keyboard.isDown('a') then love.graphics.setColor(1,0,0,1) end love.graphics.print("←[A]",10,50) love.graphics.setColor(1,1,1,1) if love.keyboard.isDown('d') then love.graphics.setColor(1,0,0,1) end love.graphics.print("→[D]",150,50) love.graphics.setColor(1,1,1,1) end return practice