⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oasisinputsystembase.cpp

📁 使用stl技术,(还没看,是听说的)
💻 CPP
字号:
/******************************************************************************

 * This source file is part of Bad Camel Gaming

 * Copyright (C) 2003  Zephie Greyvenstein

 * See Readme.html for acknowledgements

 *

 * This library is free software; you can redistribute it and/or

 * modify it under the terms of the GNU Lesser General Public

 * License as published by the Free Software Foundation; either

 * version 2.1 of the License, or (at your option) any later version.

 *

 * This library is distributed in the hope that it will be useful,

 * but WITHOUT ANY WARRANTY; without even the implied warranty of

 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

 * Lesser General Public License for more details.

 *

 * You should have received a copy of the GNU Lesser General Public

 * License along with this library; if not, write to the Free Software

 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 *****************************************************************************/



/******************************************************************************

 * FILENAME    : oasisInputSystemBase.cpp

 * DESCRIPTION : The input system base

 * AUTHOR      : Zephie Greyvenstein

 *****************************************************************************/



#include "oasisInputSystemBase.h"

#include "oasisGraphicsSystem.h"

#include "oasisConfiguration.h"

#include "oasisVector3.h"

#include "oasisMouseListener.h"



namespace Oasis {

  

  inputSystemBase::inputSystemBase( ) : keyDowns( INPUT_KEY_LIMIT ) {

    // Create the event processor

    eventProcessor = new Ogre::EventProcessor( );

   

    if ( !eventProcessor ) {

      oasisError( exception::ET_NULL_POINTER,

       "Could not create event processor for input system",

       "inputSystemBase::( )" );

    }

   

    // Initialise the event processor      

    eventProcessor->initialise( graphicsSystem::get( ).getWindow( ) );

   

    // Create the cursor

    //OverlayManager::getSingleton( ).createCursorOverlay( );

    // Grab the input reader handle

    inputReader = eventProcessor->getInputReader( );

    

    inputReader->setBufferedInput( true, true );

 

    // Get it going

    eventProcessor->startProcessingEvents( );

  

    // Clear the key downs   

    for ( boolVector::iterator it = keyDowns.begin( );

    it != keyDowns.end( ); it++ ) {

      ( *it ) = false;

    }

    

    // Register

    eventProcessor->addKeyListener( this );

    eventProcessor->addMouseMotionListener( this );

    eventProcessor->addMouseListener( this );

  }

  

  inputSystemBase::~inputSystemBase( ) {

    // Destroy the event processor

    if ( eventProcessor ) {

      delete eventProcessor;   

    }

    

    inputReader = NULL;

  }

  

  void inputSystemBase::addKeyListener( keyListener *newKeyListener ) {

    keyListeners.insert( newKeyListener );

  }

  

  void inputSystemBase::removeKeyListener( keyListener *oldKeyListener ) {

    keyListeners.erase( oldKeyListener );

  }



  void inputSystemBase::addMouseListener( mouseListener *newMouseListener ) {

    mouseListeners.insert( newMouseListener );

  }

  

  void inputSystemBase::removeMouseListener( mouseListener *oldMouseListener ) {

    mouseListeners.erase( oldMouseListener );

  }

  

  const bool inputSystemBase::isKeyDown( keyListener::KeyCode code ) const {   

    return keyDowns[ code ];

  }

  

  void inputSystemBase::keyClicked( Ogre::KeyEvent *event ) {

    keyListenerSet::iterator it;

    for( it = keyListeners.begin( ); it != keyListeners.end( ); ++it ) {

      ( *it )->keyClicked( ( keyListener::KeyCode )event->getKey( ),

         event->getKeyChar( ) );

    }

  }

  

  void inputSystemBase::keyPressed( Ogre::KeyEvent *event ) {  

    // Store that this is down

    keyDowns[ event->getKey( ) ] = true;



    keyListenerSet::iterator it;

    for( it = keyListeners.begin( ); it != keyListeners.end( ); ++it ) {

      ( *it )->keyPressed( ( keyListener::KeyCode )event->getKey( ),

         event->getKeyChar( ) );

    }

  }

  

  void inputSystemBase::keyReleased( Ogre::KeyEvent *event ) {

    // Store that this key is now up

    keyDowns[ event->getKey( ) ] = false;

  

    keyListenerSet::iterator it;

    for( it = keyListeners.begin( ); it != keyListeners.end( ); ++it ) {

      ( *it )->keyReleased( ( keyListener::KeyCode )event->getKey( ),

          event->getKeyChar( ) );

    }

  }

  

  void inputSystemBase::mouseMoved( Ogre::MouseEvent *event ) {

    mouseListenerSet::iterator it;

    for( it = mouseListeners.begin( ); it != mouseListeners.end( ); ++it ) {

      ( *it )->mouseMoved( vector3( event->getRelX( ),

            event->getRelY( ),

            event->getRelZ( ) ) );

    }

  }



  void inputSystemBase::mousePressed( Ogre::MouseEvent *event ) {

    mouseListenerSet::iterator it;

    for( it = mouseListeners.begin( ); it != mouseListeners.end( ); ++it ) {

      ( *it )->mousePressed( event->getButtonID( ), event->getClickCount( ) );

    }

  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -