virtual bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ) { int x = ea.getX(), y = ea.getY(), width = ea.getWindowWidth(), height = ea.getWindowHeight(); if ( ea.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS ) y = ea.getWindowHeight() - y; if ( !CEGUI::System::getSingletonPtr() ) return false; CEGUI::GUIContext& context = CEGUI::System::getSingleton().getDefaultGUIContext(); switch ( ea.getEventType() ) { case osgGA::GUIEventAdapter::KEYDOWN: context.injectKeyDown(key_conv(ea.getKey())); context.injectChar(char_conv(ea.getKey())); // return key_conv(ea.getKey()) != CEGUI::Key::Unknown; break; case osgGA::GUIEventAdapter::KEYUP: context.injectKeyUp(key_conv(ea.getKey())); // return key_conv(ea.getKey()) != CEGUI::Key::Unknown; break; case osgGA::GUIEventAdapter::PUSH: context.injectMousePosition( x, y ); context.injectMouseButtonDown(convertMouseButton(ea.getButton())); break; case osgGA::GUIEventAdapter::RELEASE: context.injectMousePosition(x, y); context.injectMouseButtonUp(convertMouseButton(ea.getButton())); break; case osgGA::GUIEventAdapter::SCROLL: if ( ea.getScrollingMotion()==osgGA::GUIEventAdapter::SCROLL_DOWN ) context.injectMouseWheelChange(-1); else if ( ea.getScrollingMotion()==osgGA::GUIEventAdapter::SCROLL_UP ) context.injectMouseWheelChange(+1); break; case osgGA::GUIEventAdapter::DRAG: case osgGA::GUIEventAdapter::MOVE: context.injectMousePosition(x, y); break; case osgGA::GUIEventAdapter::RESIZE: if ( _camera.valid() ) { _camera->setProjectionMatrix( osg::Matrixd::ortho2D(0.0, width, 0.0, height) ); _camera->setViewport( 0.0, 0.0, width, height ); } break; default: return false; } CEGUI::Window* rootWindow = context.getRootWindow(); if ( rootWindow ) { CEGUI::Window* anyWindow = rootWindow->getChildAtPosition( CEGUI::Vector2f(x, y) ); if ( anyWindow ) return true; } return false; }
bool MYGUIManager::handleEvent(const osgGA::GUIEventAdapter& ea, bool async) const { if (async || !_platform || !_initialized) { const_cast<MYGUIManager*>(this)->pushEvent(&ea); return false; } int x = ea.getX(), y = ea.getY(), key = ea.getKey(); static int z = 0; if (ea.getMouseYOrientation() == osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS) y = ea.getWindowHeight() - y; x = int(floor(float(x) / _uiScale + 0.5f)); y = int(floor(float(y) / _uiScale + 0.5f)); switch (ea.getEventType()) { case osgGA::GUIEventAdapter::PUSH: return MyGUI::InputManager::getInstance().injectMousePress(x, y, convertMouseButton(ea.getButton())); break; case osgGA::GUIEventAdapter::RELEASE: return MyGUI::InputManager::getInstance().injectMouseRelease(x, y, convertMouseButton(ea.getButton())); break; case osgGA::GUIEventAdapter::SCROLL: switch (ea.getScrollingMotion()) { case osgGA::GUIEventAdapter::SCROLL_UP: z++; break; case osgGA::GUIEventAdapter::SCROLL_DOWN: z--; break; } // fall through case osgGA::GUIEventAdapter::DRAG: case osgGA::GUIEventAdapter::MOVE: return MyGUI::InputManager::getInstance().injectMouseMove(x, y, z); break; case osgGA::GUIEventAdapter::KEYDOWN: if (key<127) return MyGUI::InputManager::getInstance().injectKeyPress(convertKeyCode(key), (char)key); else return MyGUI::InputManager::getInstance().injectKeyPress(convertKeyCode(key)); break; case osgGA::GUIEventAdapter::KEYUP: return MyGUI::InputManager::getInstance().injectKeyRelease(convertKeyCode(key)); break; case osgGA::GUIEventAdapter::RESIZE: _platform->getRenderManagerPtr()->setViewSize( int(floor(float(ea.getWindowWidth()) / _uiScale + 0.5f)), int(floor(float(ea.getWindowHeight()) / _uiScale + 0.5f))); break; default: break; } return false; }
void PlayState::mousePressed (const OIS::MouseEvent &e, OIS::MouseButtonID id) { CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(convertMouseButton(id)); float F; RigidBody* body; Vector3 p; Ray r; int posx = _mouse->getMouseState().X.abs; // Posicion del puntero int posy = _mouse->getMouseState().Y.abs; // en pixeles. float x = posx/float(_viewport->getActualWidth()); // Pos x normalizada float y = posy/float(_viewport->getActualWidth()); // Pos y normalizada if(e.state.buttonDown(OIS::MB_Left)){ _shootKeyDown = true; } else if(e.state.buttonDown(OIS::MB_Right)){ std::cout << "BOTON DERECHO PULSADO\n"; } else if(e.state.buttonDown(OIS::MB_Middle)){ std::cout << "BOTON RUEDA PULSADO\n"; } }
bool BasicWindow::mouseReleased(const OIS::MouseEvent& evt, OIS::MouseButtonID id) { if (id == OIS::MB_Right) { mSendMouseToGUI = true; } else { CEGUI::System::getSingleton().injectMouseButtonUp(convertMouseButton(id)); } return true; }
bool BasicWindow::mousePressed(const OIS::MouseEvent& evt, OIS::MouseButtonID id) { if (id == OIS::MB_Right) { mSendMouseToGUI = false; } else { CEGUI::System::getSingleton().injectMouseButtonDown(convertMouseButton(id)); if (isMouseOverGUI()) { mSendKeyboardToGUI = true; } else { mSendKeyboardToGUI = false; } } return true; }
void GLUTInput::pushMouseInput(int button, int state, int x, int y) { MouseInput mouseInput; mouseInput.setX(x); mouseInput.setY(y); mouseInput.setButton(convertMouseButton(button)); if (state == GLUT_DOWN) { mouseInput.setType(MouseInput::PRESSED); } else { mouseInput.setType(MouseInput::RELEASED); } mMouseInputQueue.push(mouseInput); }
void PlayState::mouseReleased (const OIS::MouseEvent &e, OIS::MouseButtonID id) { CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(convertMouseButton(id)); double tForce = 0.0; if(_timeLastObject <= 0){ tForce = THROW_FORCE*_keyDownTime; if(tForce > MAX_FORCE){ tForce = MAX_FORCE; } _forcePercent = (tForce / MAX_FORCE) * 100; _sPF->updatePower(_forcePercent); AddAndThrowDynamicObject("rock", tForce); //poner aqui el tipo de cosa que tirar _forcePercent = 0; } _shootKeyDown = false; _keyDownTime = 0.0; }
bool GUIManager::mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id) { if (CEGUI::MouseCursor::getSingletonPtr()->isVisible()) guiSystem->injectMouseButtonUp(convertMouseButton(id)); return true; }
void SDLInput::pushInput(SDL_Event event) { gcn::KeyInput keyInput; gcn::MouseInput mouseInput; switch (event.type) { case SDL_KEYDOWN: keyInput.setKey(gcn::Key(convertKeyCharacter(event))); keyInput.setType(gcn::KeyInput::PRESSED); keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0 && event.key.keysym.sym <= SDLK_KP_EQUALS); mKeyInputQueue.push(keyInput); break; case SDL_KEYUP: keyInput.setKey(gcn::Key(convertKeyCharacter(event))); keyInput.setType(gcn::KeyInput::RELEASED); keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0 && event.key.keysym.sym <= SDLK_KP_EQUALS); mKeyInputQueue.push(keyInput); break; case SDL_MOUSEBUTTONDOWN: mMouseDown = true; mouseInput.setX(event.button.x); mouseInput.setY(event.button.y); mouseInput.setButton(convertMouseButton(event.button.button)); if (event.button.button == SDL_BUTTON_WHEELDOWN) { mouseInput.setType(gcn::MouseInput::WHEEL_MOVED_DOWN); } else if (event.button.button == SDL_BUTTON_WHEELUP) { mouseInput.setType(gcn::MouseInput::WHEEL_MOVED_UP); } else { mouseInput.setType(gcn::MouseInput::PRESSED); } mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_MOUSEBUTTONUP: mMouseDown = false; mouseInput.setX(event.button.x); mouseInput.setY(event.button.y); mouseInput.setButton(convertMouseButton(event.button.button)); mouseInput.setType(gcn::MouseInput::RELEASED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_MOUSEMOTION: mouseInput.setX(event.button.x); mouseInput.setY(event.button.y); mouseInput.setButton(gcn::MouseInput::EMPTY); mouseInput.setType(gcn::MouseInput::MOVED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_ACTIVEEVENT: /* * This occurs when the mouse leaves the window and the Gui-chan * application loses its mousefocus. */ if ((event.active.state & SDL_APPMOUSEFOCUS) && !event.active.gain) { mMouseInWindow = false; if (!mMouseDown) { mouseInput.setX(-1); mouseInput.setY(-1); mouseInput.setButton(gcn::MouseInput::EMPTY); mouseInput.setType(gcn::MouseInput::MOVED); mMouseInputQueue.push(mouseInput); } } if ((event.active.state & SDL_APPMOUSEFOCUS) && event.active.gain) { mMouseInWindow = true; } break; } // end switch }
void SDLInput::pushInput(const SDL_Event &event) { BLOCK_START("SDLInput::pushInput") KeyInput keyInput; MouseInput mouseInput; switch (event.type) { case SDL_KEYDOWN: { keyInput.setType(KeyEventType::PRESSED); convertKeyEventToKey(event, keyInput); mKeyInputQueue.push(keyInput); break; } case SDL_KEYUP: { keyInput.setType(KeyEventType::RELEASED); convertKeyEventToKey(event, keyInput); mKeyInputQueue.push(keyInput); break; } #ifdef USE_SDL2 case SDL_TEXTINPUT: keyInput.setType(KeyEventType::PRESSED); keyInput.setKey(Key(Key::TEXTINPUT)); keyInput.setText(event.text.text); mKeyInputQueue.push(keyInput); break; case SDL_MOUSEWHEEL: { const int y = event.wheel.y; if (y) { mouseInput.setX(gui->getLastMouseX()); mouseInput.setY(gui->getLastMouseY()); #ifdef ANDROID mouseInput.setReal(0, 0); #endif mouseInput.setButton(MouseButton::WHEEL); if (y > 0) mouseInput.setType(MouseEventType::WHEEL_MOVED_UP); else mouseInput.setType(MouseEventType::WHEEL_MOVED_DOWN); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); } break; } #endif #ifdef ANDROID #ifndef USE_SDL2 case SDL_ACCELEROMETER: break; #endif #endif case SDL_MOUSEBUTTONDOWN: { mMouseDown = true; const int scale = mainGraphics->getScale(); const int x = event.button.x / scale; const int y = event.button.y / scale; mouseInput.setX(x); mouseInput.setY(y); #ifdef ANDROID #ifdef USE_SDL2 mouseInput.setReal(x, y); #else mouseInput.setReal(event.button.realx / scale, event.button.realy / scale); #endif #endif mouseInput.setButton(convertMouseButton(event.button.button)); #ifndef USE_SDL2 if (event.button.button == SDL_BUTTON_WHEELDOWN) mouseInput.setType(MouseEventType::WHEEL_MOVED_DOWN); else if (event.button.button == SDL_BUTTON_WHEELUP) mouseInput.setType(MouseEventType::WHEEL_MOVED_UP); else #endif mouseInput.setType(MouseEventType::PRESSED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; } case SDL_MOUSEBUTTONUP: { mMouseDown = false; const int scale = mainGraphics->getScale(); const int x = event.button.x / scale; const int y = event.button.y / scale; mouseInput.setX(x); mouseInput.setY(y); #ifdef ANDROID #ifdef USE_SDL2 mouseInput.setReal(x, y); #else mouseInput.setReal(event.button.realx / scale, event.button.realy / scale); #endif #endif mouseInput.setButton(convertMouseButton(event.button.button)); mouseInput.setType(MouseEventType::RELEASED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; } case SDL_MOUSEMOTION: { const int scale = mainGraphics->getScale(); const int x = event.motion.x / scale; const int y = event.motion.y / scale; mouseInput.setX(x); mouseInput.setY(y); #ifdef ANDROID #ifdef USE_SDL2 mouseInput.setReal(x, y); #else mouseInput.setReal(event.motion.realx / scale, event.motion.realy / scale); #endif #endif mouseInput.setButton(MouseButton::EMPTY); mouseInput.setType(MouseEventType::MOVED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; } #ifndef USE_SDL2 case SDL_ACTIVEEVENT: /* * This occurs when the mouse leaves the window and the Gui-chan * application loses its mousefocus. */ if ((event.active.state & SDL_APPMOUSEFOCUS) && !event.active.gain) { mMouseInWindow = false; if (!mMouseDown) { mouseInput.setX(-1); mouseInput.setY(-1); mouseInput.setButton(MouseButton::EMPTY); mouseInput.setType(MouseEventType::MOVED); mMouseInputQueue.push(mouseInput); } } if ((event.active.state & SDL_APPMOUSEFOCUS) && event.active.gain) mMouseInWindow = true; break; #endif default: break; } // end switch BLOCK_END("SDLInput::pushInput") }
void SDLInput::pushInput(SDL_Event event) { KeyInput keyInput; MouseInput mouseInput; switch (event.type) { case SDL_KEYDOWN: keyInput.setKey(convertKeyCharacter(event.key.keysym)); keyInput.setType(KeyInput::PRESS); mKeyInputQueue.push(keyInput); break; case SDL_KEYUP: keyInput.setKey(convertKeyCharacter(event.key.keysym)); keyInput.setType(KeyInput::RELEASE); mKeyInputQueue.push(keyInput); break; case SDL_MOUSEBUTTONDOWN: mMouseDown = true; mouseInput.x = event.button.x; mouseInput.y = event.button.y; mouseInput.setButton(convertMouseButton(event.button.button)); mouseInput.setType(MouseInput::PRESS); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_MOUSEBUTTONUP: mMouseDown = false; mouseInput.x = event.button.x; mouseInput.y = event.button.y; mouseInput.setButton(convertMouseButton(event.button.button)); mouseInput.setType(MouseInput::RELEASE); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_MOUSEMOTION: mouseInput.x = event.button.x; mouseInput.y = event.button.y; mouseInput.setButton(MouseInput::EMPTY); mouseInput.setType(MouseInput::MOTION); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_ACTIVEEVENT: /* * This occurs when the mouse leaves the window and the Gui-chan * application loses its mousefocus. */ if ((event.active.state & SDL_APPMOUSEFOCUS) && !event.active.gain) { mMouseInWindow = false; if (!mMouseDown) { mouseInput.x = -1; mouseInput.y = -1; mouseInput.setButton(MouseInput::EMPTY); mouseInput.setType(MouseInput::MOTION); mMouseInputQueue.push(mouseInput); } } if ((event.active.state & SDL_APPMOUSEFOCUS) && event.active.gain) { mMouseInWindow = true; } break; } // end switch }
void MenuState::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id) { CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(convertMouseButton(id)); }
void SDLInput::pushInput(SDL_Event event) { KeyInput keyInput; MouseInput mouseInput; switch (event.type) { case SDL_KEYDOWN: { int value = convertSDLEventToGuichanKeyValue(event); if (value == -1) { value = (int)event.key.keysym.unicode; } keyInput.setKey(Key(value)); keyInput.setType(KeyInput::Pressed); keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0 && event.key.keysym.sym <= SDLK_KP_EQUALS); mKeyInputQueue.push(keyInput); break; } case SDL_KEYUP: { int value = convertSDLEventToGuichanKeyValue(event); if (value == -1) { value = (int)event.key.keysym.sym; } keyInput.setKey(Key(value)); keyInput.setType(KeyInput::Released); keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0 && event.key.keysym.sym <= SDLK_KP_EQUALS); mKeyInputQueue.push(keyInput); break; } case SDL_MOUSEBUTTONDOWN: mMouseDown = true; mouseInput.setX(event.button.x); mouseInput.setY(event.button.y); mouseInput.setButton(convertMouseButton(event.button.button)); if (event.button.button == SDL_BUTTON_WHEELDOWN) { mouseInput.setType(MouseInput::WheelMovedDown); } else if (event.button.button == SDL_BUTTON_WHEELUP) { mouseInput.setType(MouseInput::WheelMovedUp); } else { mouseInput.setType(MouseInput::Pressed); } mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_MOUSEBUTTONUP: mMouseDown = false; mouseInput.setX(event.button.x); mouseInput.setY(event.button.y); mouseInput.setButton(convertMouseButton(event.button.button)); mouseInput.setType(MouseInput::Released); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_MOUSEMOTION: mouseInput.setX(event.button.x); mouseInput.setY(event.button.y); mouseInput.setButton(MouseInput::Empty); mouseInput.setType(MouseInput::Moved); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; case SDL_ACTIVEEVENT: /* * This occurs when the mouse leaves the window and the Gui-chan * application loses its mousefocus. */ if ((event.active.state & SDL_APPMOUSEFOCUS) && !event.active.gain) { mMouseInWindow = false; if (!mMouseDown) { mouseInput.setX(-1); mouseInput.setY(-1); mouseInput.setButton(MouseInput::Empty); mouseInput.setType(MouseInput::Moved); mMouseInputQueue.push(mouseInput); } } if ((event.active.state & SDL_APPMOUSEFOCUS) && event.active.gain) { mMouseInWindow = true; } break; } // end switch }