예제 #1
0
void QDirectFbInput::handleEvents()
{
    DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data());
    while(hasEvent == DFB_OK){
        DFBEvent event;
        DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer.data(), &event);
        if (ok != DFB_OK)
            DirectFBError("Failed to get event",ok);
        if (event.clazz == DFEC_WINDOW) {
            switch (event.window.type) {
            case DWET_BUTTONDOWN:
            case DWET_BUTTONUP:
            case DWET_MOTION:
                handleMouseEvents(event);
                break;
            case DWET_WHEEL:
                handleWheelEvent(event);
                break;
            case DWET_KEYDOWN:
            case DWET_KEYUP:
                handleKeyEvents(event);
                break;
            case DWET_ENTER:
            case DWET_LEAVE:
                handleEnterLeaveEvents(event);
            default:
                break;
            }

        }

        hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data());
    }
}
예제 #2
0
void Loop::processEvents()
{
	SDL_Event e;
	while (SDL_PollEvent(&e) != 0)
	{
		//User requests quit
		if (e.type == SDL_QUIT)
		{
			mIsQuit = true;
		}

		//Events if text input not active
		if (!SDL_IsTextInputActive())
		{
			handleMouseEvents(e);

			if (e.type == SDL_KEYDOWN)
			{
				handleKeyboardEvents(e);
			}
		}
		//Text input active
		else
		{
			handleTextInputEvents(e);
		}
	}
}
예제 #3
0
void Application::handleInput(){
	static bool escButton = false;
	player1->stop();
	if(player2 != NULL){
		player2->stop();
	}
	if(dummyBot != NULL){
		dummyBot->stop();
	}

	if (keyState[SDLK_ESCAPE]) {
		escButton = true;
	}
	else if(escButton){
		if(inGame){
			
		}
		else if((!inGame && isServer) || (!inGame && isClient) || (!inGame && isVersus)){
		
		}
		showMenu = !showMenu;
		escButton = false;
		menu->invertToCheckCollisionAll();
		menu->setToCheckCollision(false);
	}

	if(showMenu){
		handleMouseEvents();
	}
	

	//player1 controls
	if((isVersus && player1Turn) || (isServer && player1Turn) || (isBotGame && player1Turn)){
		handlePlayer1Input(keyState[SDLK_a], keyState[SDLK_d], keyState[SDLK_w], keyState[SDLK_s], keyState[SDLK_SPACE]);
	}
	//player2 controls
	if((isVersus && player2Turn) || (isClient && player2Turn)){
		handlePlayer2Input(keyState[SDLK_LEFT], keyState[SDLK_RIGHT], keyState[SDLK_UP], keyState[SDLK_DOWN], keyState[SDLK_KP3]);
	}
	//bot game
	if(isBotGame && player2Turn){
		dummyBot->takeTurn(player1->tank->getPositionX());
		//increasing = false;
		//decreasing = false;
		if(dummyBot->toMoveLeft()){
			if(!player2->tank->isBlocking()){
				player2->tank->moveLeft();
				player2->tankAnimation->runBackward();
			}
		}
		if(dummyBot->toMoveRight()){
			if(!player2->tank->outOfScreen()){
				player2->tank->moveRight();
				player2->tankAnimation->runForward();
			}
		}
		
		if(increasing){
			if(player2->tank->weapon->getDegrees() < 65){
				player2->tank->weapon->incDegrees();
				player2->weaponAnimation->runForward();
			}
			increasing = false;
		}
		else if(dummyBot->toIncDegrees()){
			increasing = true;
		}
		
		else if(decreasing){
			if(player2->tank->weapon->getDegrees() > -65){
				player2->tank->weapon->decDegrees();
				player2->weaponAnimation->runBackward();
			}
			decreasing = false;
		}
		else if(dummyBot->toDecDegrees()){
			decreasing = true;
		}
		dummyBot->clearFlags();
	}
	//reset
	if (this->keyState[SDLK_r]){
		////FIXXXXXXXXXXXXXXXXXX
			reset();
			if(isServer){
				setResetIsPressed(true);
				server->sendData(&resetIsPressed, PACKET_SIZE);
			}
	}
}
예제 #4
0
void InputHandler::handleEvents()
{
    sf::Event event;
    while (gdata.window->pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
        {
            gdata.running = false;
        }
    }

    if (!gdata.window->hasFocus()) return;

    handlePlayerEvents();
    handleMouseEvents();
    handleControllerEvents();

    debug_events();

	if (gdata.keys[sf::Keyboard::R].isKeyPressed)
	{
		gdata.reload = true;
		gdata.show_progress = false;
		gdata.replay_level = false;
	}

	if(gdata.keys[sf::Keyboard::Comma].isKeyPressed)
    {
        gdata.level -= 1;
        gdata.reload = true;
        gdata.show_progress = false;
        gdata.replay_level = false;
        gdata.shotData.clear();
    }

    if(gdata.keys[sf::Keyboard::Period].isKeyPressed)
    {
        gdata.level += 1;
        gdata.reload = true;
        gdata.show_progress = false;
        gdata.replay_level = false;
        gdata.shotData.clear();
    }

    if(gdata.keys[sf::Keyboard::D].isKeyPressed)
    {
        gdata.draw_debug = !gdata.draw_debug;
    }
    if(gdata.keys[sf::Keyboard::G].isKeyPressed)
    {
        gdata.draw_grid = !gdata.draw_grid;
    }

    if(gdata.keys[sf::Keyboard::Escape].isKeyPressed)
    {
        gdata.gamestate = STATE_MENU;
        gdata.show_progress = false;
        gdata.replay_level = false;
        gdata.shotData.clear();
        cout << "Back to menu"<< endl;
    }
}
예제 #5
0
파일: Game.cpp 프로젝트: AlmasB/tetris3d
void Game::handleAllEvents() {
	handleKeyEvents();
	handleMouseEvents();
}