Exemplo n.º 1
0
void PlayState::HandleInput()
{
	static bool down_is_pressed = false;
	static bool left_is_pressed = false;
	static bool right_is_pressed = false;


	if (SDL_PollEvent(&event))
	{
		if (event.type == SDL_QUIT)
		{
			while (!TheGame::Instance()->GetGameStates()->empty())
			{
				TheGame::Instance()->GetGameStates()->pop();
			}
			return;
		}
		if (event.type == SDL_KEYDOWN)
		{
			
			if (event.key.keysym.sym == SDLK_ESCAPE)
			{
				TheGame::Instance()->GetGameStates()->pop();

				return;
			}

			Block* nextBlock = TheGame::Instance()->GetNextBlock();

			if (event.key.keysym.sym == SDLK_SPACE)
			{
				if (!nextBlock->CheckEntityCollision(LEFT) && !nextBlock->CheckEntityCollision(RIGHT) && !nextBlock->CheckEntityCollision(DOWN))
				{
					TheGame::Instance()->SwapBlock();
				}
			}

			Block* focusBlock = TheGame::Instance()->GetFocusBlock();

			if (event.key.keysym.sym == SDLK_UP)
			{
				if (!focusBlock->CheckRotationCollision())
				{
					focusBlock->Rotate();
				}
			}
			// TODO: Consolidate Wall and Entity Collision into a signle function for readability.

			if (event.key.keysym.sym == SDLK_LEFT)
			{
				left_is_pressed = true;
				if (!focusBlock->CheckWallCollision(LEFT) && !focusBlock->CheckEntityCollision(LEFT))
				{
					focusBlock->Move(LEFT);
				}
			}
			if (event.key.keysym.sym == SDLK_RIGHT)
			{
				right_is_pressed = true;
				if (!focusBlock->CheckWallCollision(RIGHT) && !focusBlock->CheckEntityCollision(RIGHT))
				{
					focusBlock->Move(RIGHT);
				}
			}
			if (event.key.keysym.sym == SDLK_DOWN)
			{
				down_is_pressed = true;
				if (!focusBlock->CheckWallCollision(DOWN) && !focusBlock->CheckEntityCollision(DOWN))
				{
					focusBlock->Move(DOWN);
				}
			}
		}
	}
}