practice = Class{} local levelLoaded = false local M = {} local currenctScore = 0 function practice.update(dt) if not pauseStatus then if not levelLoaded then startTime = os.time(os.date("*t")) shipsleft = 1 planetsleft = 10 cannonsleft = 10 gameStatus = "setup" playbutts = {} guibutts = {} XCAM = 0 currentScore = 0 cameraControl = true 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) -- print("1 update done") 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 and not firstShip.exploded then table.insert(explosions, explosion(firstShip.x, firstShip.y, 100, {1,1,1,1})) explosions[#explosions].type = 0 firstShip.exploded = true end firstShip:update(dt) for i in ipairs(planets) do planets[i]:update(dt) if math.sqrt((firstShip.x - planets[i].x)^2 + (firstShip.y - planets[i].y)^2) > planets[i].w/3 then currentScore = currentScore + math.sqrt(planets[i].attractionX^2 + planets[i].attractionY^2)*100 --print(math.sqrt(planets[i].attractionX^2 + planets[i].attractionY^2)) end 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 else camera:follow(VCAM.x, VCAM.y) end practice.GUIControl() else settingsMenuUpdate(dt) end 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" and not pauseStatus 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) end if pauseStatus then drawPauseMenu() love.keyboard.mouseisReleased = false end end function practice.goBack() practice.reset() cameraControl = false gameStatus = "setup" levelLoaded = false gameState = "menu" cannons = {} end function practice.reset() firstShip:reset() camera.scale = 1 projectiles = {} for i in ipairs(cannons) do cannons[i].timer = cannons[i].otimer end 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