示例#1
0
    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;
}
示例#3
0
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";
   }
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
0
 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);
 }
示例#7
0
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;
}
示例#9
0
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
}
示例#10
0
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")
}
示例#11
0
    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
    }
示例#12
0
void MenuState::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
{
	CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(convertMouseButton(id));
}
示例#13
0
    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
    }