void Engine::handleEvent(sf::Event& event) { // Window closed: exit if ((event.type == sf::Event::Closed)) running = false; if (event.type == sf::Event::GainedFocus) windowManager->windowHasFocus = true; if (event.type == sf::Event::LostFocus) windowManager->windowHasFocus = false; #ifdef DEBUG if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::L)) { int n = 0; printf("---------------------\n"); for(PObject* obj = DEBUG_PobjListStart; obj; obj = obj->DEBUG_PobjListNext) printf("%c%4d: %4d: %s\n", obj->isDestroyed() ? '>' : ' ', n++, obj->getRefCount(), typeid(*obj).name()); printf("---------------------\n"); } #endif if (event.type == sf::Event::KeyPressed) { if (event.key.code != sf::Keyboard::Unknown) InputHandler::keyboard_button_down[event.key.code] = true; #ifdef DEBUG else printf("Unknown key code pressed"); #endif last_key_press = event.key.code; } if (event.type == sf::Event::KeyReleased) { if (event.key.code != sf::Keyboard::Unknown) InputHandler::keyboard_button_down[event.key.code] = false; #ifdef DEBUG else printf("Unknown key code released"); #endif } if (event.type == sf::Event::TextEntered && event.text.unicode > 31 && event.text.unicode < 128) { if (last_key_press != sf::Keyboard::Unknown) { InputHandler::fireKeyEvent(last_key_press, event.text.unicode); last_key_press = sf::Keyboard::Unknown; } } if (event.type == sf::Event::MouseWheelMoved) InputHandler::mouse_wheel_delta += event.mouseWheel.delta; if (event.type == sf::Event::MouseButtonPressed) InputHandler::mouse_button_down[event.mouseButton.button] = true; if (event.type == sf::Event::MouseButtonReleased) InputHandler::mouse_button_down[event.mouseButton.button] = false; if (event.type == sf::Event::Resized) windowManager->setupView(); #ifdef __ANDROID__ //Focus lost and focus gained events are used when the application window is created and destroyed. if (event.type == sf::Event::LostFocus) running = false; //The MouseEntered and MouseLeft events are received when the activity needs to pause or resume. if (event.type == sf::Event::MouseLeft) { //Pause is when a small popup is on top of the window. So keep running. while(windowManager->window.isOpen() && windowManager->window.waitEvent(event)) { if (event.type != sf::Event::MouseLeft) handleEvent(event); if (event.type == sf::Event::MouseEntered) break; } } #endif//__ANDROID__ }