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 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

	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

	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
