local function checkLossState() -- Check P1's health if UserPlayer1.health <= 0 then --P1 Lost, P2 Win _G.P2_COUNT = _G.P2_COUNT + 1 _G.P1_WIN = false _G.P2_WIN = true return true end if UserPlayer2.health <= 0 then --P2 Lost, P1 Win _G.P1_COUNT = _G.P1_COUNT + 1 _G.P1_WIN = true _G.P2_WIN = false return true end return false end local max = math.max -- optimisations function UpdateGame(dt) --Check if anyone has won if checkLossState() == true then --print("STATE CHNAGED: WIN!") _G.GAMESTATE = "WIN" end --WindField World:update(dt) KeyPressTime1 = max(0, KeyPressTime1 - dt) if KeyPressTime1 <= 0 then EnableKeyPress1 = true end KeyPressTime2 = max(0, KeyPressTime2 - dt) if KeyPressTime2 <= 0 then EnableKeyPress2 = true end -- Update Bullets1 for i, v in ipairs(Bullets1) do v:update(dt) -- Check bounce count if v.bounce >= _G.BULLETS_BOUNCE_MAX then table.remove(Bullets1, i) v.collider:destroy() end -- Handle screen edges if v.y < 0 then --top of screen table.remove(Bullets1, i) v.collider:destroy() elseif v.y > love.graphics.getHeight() then --bottom of screen table.remove(Bullets1, i) v.collider:destroy() end -- Hit player2 if v.collider:enter("Player2") then --print("Player1 hit Player2!") table.remove(Bullets1, i) v.collider:destroy() if UserPlayer2.health > 0 then UserPlayer2.health = UserPlayer2.health - 1 end end -- Hit player1 if v.collider:enter("Player1") then --print("Player 1 hit themselves!") table.remove(Bullets1, i) v.collider:destroy() if UserPlayer1.health > 0 then UserPlayer1.health = UserPlayer1.health - 1 end end --Hit another bullet if v.collider:enter("Bullet1") then table.remove(Bullets1, i) v.collider:destroy() end end -- Update Bullets2 for i, v in ipairs(Bullets2) do v:update(dt) -- Check bounce count if v.bounce >= _G.BULLETS_BOUNCE_MAX then table.remove(Bullets2, i) v.collider:destroy() end -- Handle screen edges if v.y < 0 then --top of screen table.remove(Bullets2, i) v.collider:destroy() elseif v.y > love.graphics.getHeight() then --bottom of screen table.remove(Bullets2, i) v.collider:destroy() end -- Hit player1 if v.collider:enter("Player1") then --print("Player2 hit Player1!") table.remove(Bullets2, i) v.collider:destroy() if UserPlayer1.health > 0 then UserPlayer1.health = UserPlayer1.health - 1 end end -- Hit player2 if v.collider:enter("Player2") then --print("Player 2 hit themselves!") table.remove(Bullets2, i) v.collider:destroy() if UserPlayer2.health > 0 then UserPlayer2.health = UserPlayer2.health - 1 end end --Hit another bullet if v.collider:enter("Bullet2") then table.remove(Bullets2, i) v.collider:destroy() end end -- PowerUp updates for i, v in ipairs(PowerUps) do v:update(dt) if v.collider:enter("Player1") then UserPlayer1:getPowerUp(v) UserPlayer1:powerup() table.remove(PowerUps, i) v.collider:destroy() end if v.collider:enter("Player2") then UserPlayer2:getPowerUp(v) UserPlayer2:powerup() table.remove(PowerUps, i) v.collider:destroy() end end --PowerUp timer to place PUTimeToPlace = PUTimeToPlace - dt --print(PUTimeToPlace) if PUTimeToPlace <= 0 then local w, h = love.graphics.getDimensions() local ranx = love.math.random(30, w) local rany = love.math.random(100, h) local newPU = PowerUp("speed", ranx, rany, "assets/powerup.jpeg", 10) table.insert(PowerUps, newPU) PUTimeToPlace = _G.PU_TIMER --reset end UserPlayer1:handleKeys("w", "s", "a", "d", dt) UserPlayer2:handleKeys("up", "down", "left", "right", dt) UserPlayer1:updateCol() UserPlayer2:updateCol() UserPlayer1:update(dt) UserPlayer2:update(dt) end