📄 oasisinputsystembase.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 + -