void CGamePlay::Update(float fElapsedTime)
{
	CSGD_MessageSystem *pMS = CSGD_MessageSystem::GetInstance();
	CSGD_ObjectManager *pOM = CSGD_ObjectManager::GetInstance();
	CPlayerCharacter *pPC = CPlayerCharacter::GetInstance();
	CGame *theGame = CGame::GetInstance();
	CSGD_DirectInput *pDI = CSGD_DirectInput::GetInstance();
	CSGD_EventSystem *pES = CSGD_EventSystem::GetInstance();

	stateTimer -= fElapsedTime;

	for (int i = 0; i < CHEAT_MAX; ++i)
		CheckForCheats(i);

	if (pDI->CheckBufferedKeys() != 0)
		m_cPreviousKeys.push(pDI->CheckBufferedKeys());

	if (stateTimer <= 0)
	{
		if (m_nEnemyCounter < 3 && m_nRemainingEnemies > 0 && GetLevel() <= 2)
			pES->SendEvent("spawn enemies", &fElapsedTime);
		stateTimer = 6;
	}

	if (pDI->GetBufferedKey(DIK_P))
		theGame->SetPaused(!theGame->GetPaused());

	if (GetLevel() == 3)
	{
		if (CGame::GetInstance()->GetPaused() == false)
			m_nBridgeOffsetY += m_nBridgeVelocityY * fElapsedTime * CGame::GetInstance()->GetSpeed();
		if (m_nBridgeOffsetY > 450)
		{
			m_nBridgeOffsetY = 449;
			m_nBridgeVelocityY *= -1;
		}
		if (m_nBridgeOffsetY < 64)
		{
			m_nBridgeOffsetY = 65;
			m_nBridgeVelocityY *= -1;
		}
		CPlayerCharacter::GetInstance()->SetPosY(m_nBridgeOffsetY - 64);
		m_fSpawnPowerupTimer -= fElapsedTime;
		if (m_fSpawnPowerupTimer <= 0)
		{
			CSGD_EventSystem::GetInstance()->SendEvent("spawn powerups",NULL);
			m_fSpawnPowerupTimer = 15.0f;
		}
	}

	vector<CBase*>::iterator iter = enemies.begin();
	int i = 0;

	while(iter != enemies.end())
	{
		//	see if we've found the pointer we are looking for
		int i = 0;
		if ((*iter)->GetHP() <= 0 && GetLevel() <= 3)
		{
			int value = enemies[i]->GetScoreValue();
			enemies.erase(iter);
			SetEnemyCounter(GetEnemyCounter() - 1);
			SetRemainingEnemies(GetRemainingEnemies() - 1);
			theGame->SetScore(theGame->GetScore() + value);
			++i;
			break;
		}
		else
			iter++;
	}

	if (pPC->GetHP() <= 0)
	{
		CGame::GetInstance()->SetLives(CGame::GetInstance()->GetLives() - 1);
		CGame::GetInstance()->ChangeState( CLevelTransition::GetInstance());
	}

	else if (m_nRemainingEnemies <= 0 && m_nEnemyCounter <= 0 && enemies.empty())
	{
		m_fFinishedTimer -= fElapsedTime;

		if (m_fFinishedTimer <= 0)
		{
			SetLevel(GetLevel() + 1);
			CTallyMenu::GetInstance()->SetHP(pPC->GetHP());
			CGame::GetInstance()->ChangeState( CTallyMenu::GetInstance());
		}
	}

	if (pDI->GetBufferedKey(DIK_ESCAPE))
		CGame::GetInstance()->ChangeState( CMainMenu::GetInstance() );	

}