OMK::Inp::DistributedCameraOgreListener Class Reference
[User inputs]

Input listener to control the camera according OpenMASK Distributed paradigm and OpenMASK Listener. More...

#include <OMKDistributedCameraOgreListener.h>

Inheritance diagram for OMK::Inp::DistributedCameraOgreListener:

Inheritance graph
[legend]
Collaboration diagram for OMK::Inp::DistributedCameraOgreListener:

Collaboration graph
[legend]
List of all members.

Protected Member Functions

virtual bool keyPressed (const OIS::KeyEvent &e)
 Dispatches key pressed event.
virtual bool keyReleased (const OIS::KeyEvent &e)
 Dispatches key released event.
virtual bool mouseMoved (const OIS::MouseEvent &e)
 Dispatches mouse moved event.
virtual bool mousePressed (const OIS::MouseEvent &e, OIS::MouseButtonID id)
 Dispatches mouse button pressed event.
virtual bool mouseReleased (const OIS::MouseEvent &e, OIS::MouseButtonID id)
 Dispatches mouse button released event.
virtual void postComputeParameters ()

Protected Attributes

Vis::OgreVis_ogreVis
Type::Transform _transform
bool _updateTransform
float _translationSpeed
float _wheelTranslationSpeed
float _rotationSpeed

Private Member Functions

 DECLARE_INPUT_LISTENER_FACTORY (DistributedCameraOgreListener)

Detailed Description

Input listener to control the camera according OpenMASK Distributed paradigm and OpenMASK Listener.

..

Date:
2008-02-27
Author:
Xavier Larrodé
Module description :
Define a key and mouse listener which control the camera of a VisOgre object.

Definition at line 25 of file OMKDistributedCameraOgreListener.h.


Member Function Documentation

OMK::Inp::DistributedCameraOgreListener::DECLARE_INPUT_LISTENER_FACTORY ( DistributedCameraOgreListener   )  [private]

bool DistributedCameraOgreListener::keyPressed ( const OIS::KeyEvent &  e  )  [protected, virtual]

Dispatches key pressed event.

Definition at line 43 of file OMKDistributedCameraOgreListener.cpp.

References _transform, _translationSpeed, _updateTransform, OMK::Type::Transform::getDirection(), OMK::Type::Transform::getRight(), OMK::Type::Transform::getTranslate(), OMK::Type::Transform::getUp(), postComputeParameters(), and OMK::Type::Transform::setTranslate().

00044 {
00045   switch( e.key )
00046   {
00047   case OIS::KC_UP :
00048     _transform.setTranslate( _transform.getTranslate() - ( _transform.getDirection() * _translationSpeed ) ) ;
00049     _updateTransform = true ;
00050     break ;
00051   case OIS::KC_DOWN :
00052     _transform.setTranslate( _transform.getTranslate() + ( _transform.getDirection() * _translationSpeed ) ) ;
00053     _updateTransform = true ;
00054     break ;
00055   case OIS::KC_RIGHT :
00056     _transform.setTranslate( _transform.getTranslate() + ( _transform.getRight() * _translationSpeed ) ) ;
00057     _updateTransform = true ;
00058     break ;
00059   case OIS::KC_LEFT :
00060     _transform.setTranslate( _transform.getTranslate() - ( _transform.getRight() * _translationSpeed ) ) ;
00061     _updateTransform = true ;
00062     break ;
00063   case OIS::KC_PGUP :
00064     _transform.setTranslate( _transform.getTranslate() - ( _transform.getUp() * _translationSpeed ) ) ;
00065     _updateTransform = true ;
00066     break ;
00067   case OIS::KC_PGDOWN :
00068     _transform.setTranslate( _transform.getTranslate() + ( _transform.getUp() * _translationSpeed ) ) ;
00069     _updateTransform = true ;
00070      // increase move speed
00071   case OIS::KC_ADD :
00072     _translationSpeed += 1;
00073     break ;
00074     // decrease move speed
00075   case OIS::KC_SUBTRACT :
00076     _translationSpeed -= ( 0 < _translationSpeed - 1 ) ? 1 : 0 ;
00077     break ;
00078   default :
00079     ;  
00080   }
00081   if ( _updateTransform)
00082     postComputeParameters();
00083   return true ;
00084 }

virtual bool OMK::Inp::DistributedCameraOgreListener::keyReleased ( const OIS::KeyEvent &  e  )  [inline, protected, virtual]

Dispatches key released event.

Definition at line 35 of file OMKDistributedCameraOgreListener.h.

00035 { return true ; }

bool DistributedCameraOgreListener::mouseMoved ( const OIS::MouseEvent &  e  )  [protected, virtual]

Dispatches mouse moved event.

Definition at line 86 of file OMKDistributedCameraOgreListener.cpp.

References _rotationSpeed, _transform, _translationSpeed, _updateTransform, _wheelTranslationSpeed, OMK::Type::Transform::getDirection(), OMK::Type::Transform::getRotate(), OMK::Type::Transform::getTranslate(), postComputeParameters(), OMK::Type::Transform::setRotate(), and OMK::Type::Transform::setTranslate().

00087 {
00088   if( 0 < e.state.Z.rel )
00089   {
00090     _transform.setTranslate( _transform.getTranslate() - ( _transform.getDirection() * _wheelTranslationSpeed ) ) ;
00091     _updateTransform = true ;
00092   }
00093   else if ( e.state.Z.rel < 0 )
00094   {
00095     _transform.setTranslate( _transform.getTranslate() + ( _transform.getDirection() * _wheelTranslationSpeed ) ) ;
00096     _updateTransform = true ;
00097   }
00098 
00099   /* Rotation factors, may not be used if the second mouse button is pressed. */
00100   /* If the second mouse button is pressed, then the mouse movement results in 
00101      sliding the camera, otherwise we rotate. */
00102   if( e.state.buttonDown( OIS::MB_Left ) ) 
00103   {
00104      //float tx = e.state.X.rel * 0.13f ;
00105      float tx = e.state.X.rel * _translationSpeed ;
00106      float ty = e.state.Y.rel * _translationSpeed ;
00107       
00108      if ( ( tx != 0.f ) || ( ty != 0.f ) )
00109      {
00110      _transform.setTranslate( _transform.getTranslate() 
00111          + ( _transform.getRotate() * Vector3f (tx,ty,0)));
00112     _updateTransform = true ;
00113      }
00114   }
00115   else if( e.state.buttonDown( OIS::MB_Right ) ) 
00116   {
00117     float dx( e.state.X.rel * _rotationSpeed ) ;
00118     float dy( e.state.Y.rel * _rotationSpeed ) ;
00119     
00120     if ( ( dx != 0.f ) || ( dy != 0.f ) )
00121     {
00122       Matrix3f rotation ;
00123       // yaw (fixed to the world axis)
00124       rotation.FromAxisAngle( Vector3f::UNIT_Y, -dx ) ;
00125       _transform.setRotate( rotation * _transform.getRotate() ) ;
00126       // pitch
00127       rotation.FromAxisAngle( _transform.getRotate() * Vector3f::UNIT_X, -dy ) ;
00128       _transform.setRotate( rotation * _transform.getRotate() ) ;
00129 
00130     _updateTransform = true ;
00131     }
00132   }
00133   if ( _updateTransform)
00134     postComputeParameters();
00135   return true ;
00136 }

virtual bool OMK::Inp::DistributedCameraOgreListener::mousePressed ( const OIS::MouseEvent &  e,
OIS::MouseButtonID  id 
) [inline, protected, virtual]

Dispatches mouse button pressed event.

Definition at line 39 of file OMKDistributedCameraOgreListener.h.

00039 { return true ; }

virtual bool OMK::Inp::DistributedCameraOgreListener::mouseReleased ( const OIS::MouseEvent &  e,
OIS::MouseButtonID  id 
) [inline, protected, virtual]

Dispatches mouse button released event.

Definition at line 41 of file OMKDistributedCameraOgreListener.h.

00041 { return true ; }

void DistributedCameraOgreListener::postComputeParameters (  )  [protected, virtual]

Definition at line 138 of file OMKDistributedCameraOgreListener.cpp.

References OMK::Inp::InputListener::_sender, _transform, _updateTransform, OMK::SimulatedObject::fireValuedSignal(), and OMTRACEID.

Referenced by keyPressed(), and mouseMoved().

00139 {
00140   if ( _updateTransform == true )
00141   {
00142     OMTRACEID("OMKDistributedCameraOgreListener", "Signal" );
00143     _sender->fireValuedSignal< TransformType >( "moveCamera", _transform ) ;
00144     _updateTransform = false ;
00145   }
00146  
00147 }


Member Data Documentation

Vis::OgreVis* OMK::Inp::DistributedCameraOgreListener::_ogreVis [protected]

Definition at line 47 of file OMKDistributedCameraOgreListener.h.

Type::Transform OMK::Inp::DistributedCameraOgreListener::_transform [protected]

Definition at line 48 of file OMKDistributedCameraOgreListener.h.

Referenced by keyPressed(), mouseMoved(), and postComputeParameters().

bool OMK::Inp::DistributedCameraOgreListener::_updateTransform [protected]

Definition at line 49 of file OMKDistributedCameraOgreListener.h.

Referenced by keyPressed(), mouseMoved(), and postComputeParameters().

float OMK::Inp::DistributedCameraOgreListener::_translationSpeed [protected]

Definition at line 50 of file OMKDistributedCameraOgreListener.h.

Referenced by keyPressed(), and mouseMoved().

float OMK::Inp::DistributedCameraOgreListener::_wheelTranslationSpeed [protected]

Definition at line 51 of file OMKDistributedCameraOgreListener.h.

Referenced by mouseMoved().

float OMK::Inp::DistributedCameraOgreListener::_rotationSpeed [protected]

Definition at line 52 of file OMKDistributedCameraOgreListener.h.

Referenced by mouseMoved().


logo OpenMask

Documentation generated on Mon Jun 9 11:46:04 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007