Пример #1
0
    InputImpl(OEngine::Render::OgreRenderer &_ogre,
              MWWorld::Player &_player,
              MWGui::WindowManager &_windows,
              bool debug,
              OMW::Engine& engine)
        : ogre(_ogre),
          exit(ogre.getWindow()),
          input(ogre.getWindow(), !debug),
          poller(input),
          player(_player),
          windows(_windows),
          mEngine (engine),
          shotCount(0)
    {
        using namespace OEngine::Input;
        using namespace OEngine::Render;
        using namespace OEngine::GUI;
        using namespace Mangle::Input;
        using namespace OIS;

        disp = DispatcherPtr(new Dispatcher(A_LAST));

        // Bind MW-specific functions
        disp->funcs.bind(A_Quit, boost::bind(&InputImpl::exitNow, this),
                         "Quit program");
        disp->funcs.bind(A_Screenshot, boost::bind(&InputImpl::screenshot, this),
                         "Screenshot");
        disp->funcs.bind(A_Inventory, boost::bind(&InputImpl::toggleInventory, this),
                         "Toggle inventory screen");
        disp->funcs.bind(A_Console, boost::bind(&InputImpl::toggleConsole, this),
                         "Toggle console");
        disp->funcs.bind(A_Activate, boost::bind(&InputImpl::activate, this),
                         "Activate");
        disp->funcs.bind(A_AutoMove, boost::bind(&InputImpl::toggleAutoMove, this),
                         "Auto Move");
        disp->funcs.bind(A_ToggleWalk, boost::bind(&InputImpl::toggleWalking, this),
                         "Toggle Walk/Run");

        // Add the exit listener
        ogre.getRoot()->addFrameListener(&exit);
        // Add ourselves as a frame listener to catch movement keys
        ogre.getRoot()->addFrameListener(this);

        // Set up the mouse handler and tell it about the player camera
        mouse = MouseLookEventPtr(new MouseLookEvent(player.getRenderer()->getCamera()));

        // This event handler pumps events into MyGUI
        guiEvents = EventInjectorPtr(new EventInjector(windows.getGui()));

        // Hook 'mouse' and 'disp' up as event handlers into 'input'
        // (the OIS driver and event source.) We do this through an
        // EventList which dispatches the event to multiple handlers for
        // us.
        {
            EventList *lst = new EventList;
            input.setEvent(EventPtr(lst));
            lst->add(mouse,Event::EV_MouseMove);
            lst->add(disp,Event::EV_KeyDown);
            lst->add(guiEvents,Event::EV_ALL);
        }

        // Start out in game mode
        setGuiMode(MWGui::GM_Game);

        /**********************************
          Key binding section

          The rest of this function has hard coded key bindings, and is
          intended to be replaced by user defined bindings later.
         **********************************/

        // Key bindings for keypress events
        // NOTE: These keys do not require constant polling - use in conjuction with variables in loops.

        disp->bind(A_Quit, KC_Q);
        disp->bind(A_Quit, KC_ESCAPE);
        disp->bind(A_Screenshot, KC_SYSRQ);
        disp->bind(A_Inventory, KC_I);
        disp->bind(A_Console, KC_F1);
        disp->bind(A_Activate, KC_SPACE);
        disp->bind(A_AutoMove, KC_Z);
        disp->bind(A_ToggleSneak, KC_X);
        disp->bind(A_ToggleWalk, KC_C);

        // Key bindings for polled keys
        // NOTE: These keys are constantly being polled. Only add keys that must be checked each frame.

        // Arrow keys
        poller.bind(A_MoveLeft, KC_LEFT);
        poller.bind(A_MoveRight, KC_RIGHT);
        poller.bind(A_MoveForward, KC_UP);
        poller.bind(A_MoveBackward, KC_DOWN);

        // WASD keys
        poller.bind(A_MoveLeft, KC_A);
        poller.bind(A_MoveRight, KC_D);
        poller.bind(A_MoveForward, KC_W);
        poller.bind(A_MoveBackward, KC_S);
    }
Пример #2
0
    InputImpl(OEngine::Render::OgreRenderer &_ogre,
              MWRender::PlayerPos &_player,
              MWGui::WindowManager &_windows,
              bool debug)
        : ogre(_ogre),
          exit(ogre.getWindow()),
          input(ogre.getWindow(), !debug),
          poller(input),
          player(_player),
          windows(_windows),
          shotCount(0)
    {
        using namespace OEngine::Input;
        using namespace OEngine::Render;
        using namespace OEngine::GUI;
        using namespace Mangle::Input;
        using namespace OIS;

        disp = DispatcherPtr(new Dispatcher(A_LAST));

        // Bind MW-specific functions
        disp->funcs.bind(A_Quit, boost::bind(&InputImpl::exitNow, this),
                         "Quit program");
        disp->funcs.bind(A_Screenshot, boost::bind(&InputImpl::screenshot, this),
                         "Screenshot");
        disp->funcs.bind(A_Inventory, boost::bind(&InputImpl::toggleInventory, this),
                         "Toggle inventory screen");
        disp->funcs.bind(A_Console, boost::bind(&InputImpl::toggleConsole, this),
                         "Toggle console");


        // Add the exit listener
        ogre.getRoot()->addFrameListener(&exit);
        // Add ourselves as a frame listener to catch movement keys
        ogre.getRoot()->addFrameListener(this);

        // Set up the mouse handler and tell it about the player camera
        mouse = MouseLookEventPtr(new MouseLookEvent(player.getCamera()));

        // This event handler pumps events into MyGUI
        guiEvents = EventInjectorPtr(new EventInjector(windows.getGui()));

        // Hook 'mouse' and 'disp' up as event handlers into 'input'
        // (the OIS driver and event source.) We do this through an
        // EventList which dispatches the event to multiple handlers for
        // us.
        {
            EventList *lst = new EventList;
            input.setEvent(EventPtr(lst));
            lst->add(mouse,Event::EV_MouseMove);
            lst->add(disp,Event::EV_KeyDown);
            lst->add(guiEvents,Event::EV_ALL);
        }

        // Start out in game mode
        setGuiMode(MWGui::GM_Game);

        /**********************************
          Key binding section

          The rest of this function has hard coded key bindings, and is
          intended to be replaced by user defined bindings later.
         **********************************/

        // Key bindings for keypress events

        disp->bind(A_Quit, KC_Q);
        disp->bind(A_Quit, KC_ESCAPE);
        disp->bind(A_Screenshot, KC_SYSRQ);
        disp->bind(A_Inventory, KC_I);
        disp->bind(A_Console, KC_F1);

        // Key bindings for polled keys

        // Arrow keys
        poller.bind(A_MoveLeft, KC_LEFT);
        poller.bind(A_MoveRight, KC_RIGHT);
        poller.bind(A_MoveForward, KC_UP);
        poller.bind(A_MoveBackward, KC_DOWN);

        // WASD keys
        poller.bind(A_MoveLeft, KC_A);
        poller.bind(A_MoveRight, KC_D);
        poller.bind(A_MoveForward, KC_W);
        poller.bind(A_MoveBackward, KC_S);

        // Use shift and ctrl for up and down
        poller.bind(A_MoveUp, KC_LSHIFT);
        poller.bind(A_MoveDown, KC_LCONTROL);
    }
Пример #3
0
    InputImpl(OEngine::Render::OgreRenderer &_ogre,
                   MWWorld::Player &_player,
                   MWBase::WindowManager &_windows,
                   bool debug,
                   OMW::Engine& engine)
      : ogre(_ogre),
        input(ogre.getWindow(), !debug),
        poller(input),
        player(_player),
        windows(_windows),
        mEngine (engine),
        mDragDrop(false),
        mPreviewPOVDelay(0.f),
        mTimeIdle(0.f)
    {
      using namespace OEngine::Input;
      using namespace OEngine::Render;
      using namespace OEngine::GUI;
      using namespace Mangle::Input;
      using namespace OIS;

      disp = DispatcherPtr(new Dispatcher(A_LAST));

      // Bind MW-specific functions
      disp->funcs.bind(A_Quit, boost::bind(&InputImpl::exitNow, this),
                      "Quit program");
      disp->funcs.bind(A_Screenshot, boost::bind(&InputImpl::screenshot, this),
                      "Screenshot");
      disp->funcs.bind(A_Inventory, boost::bind(&InputImpl::toggleInventory, this),
                       "Toggle inventory screen");
      disp->funcs.bind(A_Console, boost::bind(&InputImpl::toggleConsole, this),
                       "Toggle console");
      disp->funcs.bind(A_Journal, boost::bind(&InputImpl::toggleJournal, this),
                       "Toggle journal");
      disp->funcs.bind(A_Activate, boost::bind(&InputImpl::activate, this),
                       "Activate");
      disp->funcs.bind(A_AutoMove, boost::bind(&InputImpl::toggleAutoMove, this),
                      "Auto Move");
      disp->funcs.bind(A_ToggleWalk, boost::bind(&InputImpl::toggleWalking, this),
                      "Toggle Walk/Run");
      disp->funcs.bind(A_ToggleWeapon,boost::bind(&InputImpl::toggleWeapon,this),
                      "Draw Weapon");
      disp->funcs.bind(A_ToggleSpell,boost::bind(&InputImpl::toggleSpell,this),
                      "Ready hands");
      disp->funcs.bind(A_GameMenu, boost::bind(&InputImpl::toggleMainMenu, this),
                      "Toggle main menu");

      mouse = MouseLookEventPtr(new MouseLookEvent());

      // This event handler pumps events into MyGUI
      guiEvents = EventInjectorPtr(new EventInjector(windows.getGui()));

      // Hook 'mouse' and 'disp' up as event handlers into 'input'
      // (the OIS driver and event source.) We do this through an
      // EventList which dispatches the event to multiple handlers for
      // us.
      {
        EventList *lst = new EventList;
        input.setEvent(EventPtr(lst));
        lst->add(mouse,Event::EV_MouseMove);
        lst->add(disp,Event::EV_KeyDown);
        lst->add(guiEvents,Event::EV_ALL);
      }

      mControlSwitch["playercontrols"]      = true;
      mControlSwitch["playerfighting"]      = true;
      mControlSwitch["playerjumping"]       = true;
      mControlSwitch["playerlooking"]       = true;
      mControlSwitch["playermagic"]         = true;
      mControlSwitch["playerviewswitch"]    = true;
      mControlSwitch["vanitymode"]          = true;

      changeInputMode(false);

      /**********************************
        Key binding section

        The rest of this function has hard coded key bindings, and is
        intended to be replaced by user defined bindings later.
       **********************************/

      // Key bindings for keypress events
      // NOTE: These keys do not require constant polling - use in conjuction with variables in loops.

      disp->bind(A_Quit, KC_Q);
      disp->bind(A_GameMenu, KC_ESCAPE);
      disp->bind(A_Screenshot, KC_SYSRQ);
      disp->bind(A_Inventory, KC_I);
      disp->bind(A_Console, KC_F1);
      disp->bind(A_Journal, KC_J);
      disp->bind(A_Activate, KC_SPACE);
      disp->bind(A_AutoMove, KC_Z);
      disp->bind(A_ToggleSneak, KC_X);
      disp->bind(A_ToggleWalk, KC_C);
      disp->bind(A_ToggleWeapon,KC_F);
      disp->bind(A_ToggleSpell,KC_R);

      // Key bindings for polled keys
      // NOTE: These keys are constantly being polled. Only add keys that must be checked each frame.

      // Arrow keys
      poller.bind(A_MoveLeft, KC_LEFT);
      poller.bind(A_MoveRight, KC_RIGHT);
      poller.bind(A_MoveForward, KC_UP);
      poller.bind(A_MoveBackward, KC_DOWN);

      // WASD keys
      poller.bind(A_MoveLeft, KC_A);
      poller.bind(A_MoveRight, KC_D);
      poller.bind(A_MoveForward, KC_W);
      poller.bind(A_MoveBackward, KC_S);

      poller.bind(A_Jump, KC_E);
      poller.bind(A_Crouch, KC_LCONTROL);

      poller.bind(A_TogglePOV, KC_TAB);
    }