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 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 UserPlayer1.health > 0 then UserPlayer1.health = UserPlayer1.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 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 player2 if v.collider:enter("Player1") then print("Player2 hit Player1!") table.remove(Bullets2, i) v.collider:destroy() if UserPlayer2.health > 0 then UserPlayer2.health = UserPlayer2.health - 1 end end -- Hit player1 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 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