levelgeneral = Class{}
local levelLoaded = false
local M = {}
local thrusterMax = 0
local animationComplete = false
local frame = 0
asteroidImage = love.graphics.newImage("entities/planet/asteroid.png")
function levelgeneral.update(dt)
    if not levelLoaded then 
        level = require("levels/level" .. currentLevel)
        level.load()
        frame = 0
        animationComplete = false
        levelLoaded = true
    end 
    if reachedGoal then 
        if love.keyboard.isDown('return') then 
            animationComplete  = true 
        end
        if saveData.levelsBeaten < currentLevel then 
            saveData.levelsBeaten = currentLevel
        end
        --print("saveData.levelsBeaten is " .. saveData.levelsBeaten)
        if animationComplete then 
            reachedGoal = false
        love.filesystem.write("save", serialize(saveData))
        levelgeneral.goBack()
        end 
    end
    camera:update(dt)
    if lvlbase ~= nil then 
        lvlbase:update(dt)
        end 
    --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"
            levelgeneral.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
    if currentLevel > 5 then 
        level.bonusUpdate(dt)
    end
else 
    camera:follow(VCAM.x, VCAM.y)
end
    levelgeneral.GUIControl()
    
end 

function levelgeneral.draw()
    love.graphics.setColor(1,1,1,1)
    camera:attach()

    
    if lvlbase ~= nil then 
        lvlbase:draw()
        end 
    for i in ipairs(planets) do 
        planets[i]:draw(dt)
    end
    --love.graphics.rectangle("fill",VCAM.x,VCAM.y,30,30)
    for i in ipairs(cannons) do 
        cannons[i]:draw(dt)
    end
    for i in ipairs(projectiles) do 
        projectiles[i]:draw(dt)
    end

    for i, explosion in ipairs(explosions) do 
        if shipIsHit then 
            explosion:render()
        else 
            explosion:render("special")
        end
        --print("exploding")
    end

    if reachedGoal then 
        love.graphics.clear(0,0,0,1)
        love.graphics.setColor(30/255, 30/255, 30/255, 1)
        if frame < WINDOW_WIDTH then 
        stopMusic()
        sounds["finish"]:play()
        love.graphics.circle("fill", firstShip.x, firstShip.y, WINDOW_WIDTH - frame)
        end 
        frame = frame + 20
    end 
        firstShip:draw()

    camera:detach()
    
    camera:draw()
    if reachedGoal then 
        love.graphics.setColor(1,1,1,1-1/frame)
        love.graphics.setFont(smallfont)
        love.graphics.printf("Press Enter to continue",0, 600, WINDOW_WIDTH, "center")
    end
    if gameStatus == "setup" and not reachedGoal then 
    level.hint()
    elseif gameStatus == "play" then 
        if not reachedGoal then 
        love.graphics.printf("[W] Thrusters: ", 0, WINDOW_HEIGHT-100, 300, "center")
        local m = smallfont:getWidth("[W] Thrusters: ")
        local n = smallfont:getHeight("[W] Thrusters: ")
        love.graphics.setColor(1,0,0,1)
        love.graphics.rectangle("fill",0, WINDOW_HEIGHT-50, thrusterMax/2, n)
        love.graphics.setColor(0,1,0,1)
        love.graphics.rectangle("fill",0, WINDOW_HEIGHT-50, firstShip.fuel/2, n)
        love.graphics.setColor(1,1,1,1)
        guimenu:butt(playbutts, WINDOW_WIDTH, WINDOW_HEIGHT, 1100, WINDOW_HEIGHT-50, 40, WINDOW_WIDTH/3)
        love.keyboard.mouseisReleased = false
        end 
    end
    
    
    
    
end 
function levelgeneral.goBack()
    levelgeneral.reset()
    lvlbase = nil
    gameStatus = "setup"
    firstShip.path = {}
    levelLoaded = false
    for k in pairs(planets) do
        planets[k] = nil
    end
    gameState = "selectlv"
end 
function levelgeneral.reset()
    level.reset()
end 
function levelgeneral.GUIControl()
level.GUIControl()
end
return levelgeneral