Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

WalkCamManip.h

Go to the documentation of this file.
00001 // Copyright NVIDIA Corporation 2002-2004
00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
00005 // AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 
00011 
00012 #pragma once
00013 
00015 #include "nvsgcommon.h"
00016 
00017 #include "nvui/CameraManipulator.h"
00018 
00019 namespace nvui
00020 {  
00021  
00023 
00040   class WalkCamManip : public CameraManipulator
00041   {
00042     public:
00044       NVSG_API WalkCamManip(void);
00046       NVSG_API ~WalkCamManip(void);
00047 
00049       enum
00050       { _W_KEY        = 0x0400 
00051       , _S_KEY        = 0x0800 
00052       };
00053 
00055 
00056       NVSG_API virtual void keyRepeat();
00057 
00059 
00060       NVSG_API virtual void apply();
00061             
00063 
00068       bool isWalk(void);
00069 
00071 
00076       bool isTranslate(void);
00077 
00079 
00084       bool isTilt(void);
00085       
00087 
00089       void setScreenSize( UINT x  
00090                         , UINT y  
00091                         );
00092 
00094 
00095       void setWorldUpVector( nvmath::Vec3f up 
00096                            );
00098 
00099       const nvmath::Vec3f& getWorldUpVector();
00100 
00102 
00103       void setSpeedIncreaseFactor(float factor   
00104                                  );
00105       
00107 
00108       float getSpeedIncreaseFactor();
00109 
00111 
00113       void setHSensitivity(float sensitivity 
00114                           );
00115       
00117 
00118       float getHSensitivity();
00119 
00121 
00122       void setSpeed(float speed 
00123                    );
00124 
00126 
00127       float getSpeed();
00128 
00129   protected:
00130       UINT  m_ScreenSizeX; 
00131       UINT  m_ScreenSizeY; 
00132       
00133       nvmath::Vec3f m_worldUpVector;  
00134 
00135       float m_speedIncreaseFactor;  
00136       float m_hSensitivity;         
00137       
00138       float m_speed; 
00139 
00140       static NVSG_API const UINT WALKFORWARD;   
00141       static NVSG_API const UINT WALKBACKWARD;  
00142       static NVSG_API const UINT TRANSLATE;     
00143       static NVSG_API const UINT TILT;          
00144       static NVSG_API const UINT INCREASESPEED; 
00145       static NVSG_API const UINT DECREASESPEED; 
00146 
00147       static NVSG_API const UINT AREAOFPEACE;   
00148 
00150 
00151       NVSG_API virtual UINT convertKey(UINT key  
00152                                       );
00153 
00155 
00160       bool isWalkForward( void );
00161       
00163 
00168       bool isWalkBackward( void );
00169 
00171 
00173       NVSG_API virtual void walk( void );
00174       
00176 
00179       NVSG_API virtual void translate( void );
00180       
00182 
00185       NVSG_API virtual void tilt( void );
00186   };
00187 
00188   inline bool WalkCamManip::isWalk( void )
00189   {
00190     return( isWalkForward() || isWalkBackward() );
00191   }
00192 
00193   inline bool WalkCamManip::isWalkForward( void )
00194   {
00195     return(WALKFORWARD == m_buttonState && (  m_keyState == 0
00196                                            || m_keyState == INCREASESPEED 
00197                                            || m_keyState == DECREASESPEED));
00198   }
00199 
00200   inline bool WalkCamManip::isWalkBackward( void )
00201   {
00202     return(WALKBACKWARD == m_buttonState && (  m_keyState == 0 
00203                                             || m_keyState == INCREASESPEED 
00204                                             || m_keyState == DECREASESPEED));
00205   }
00206 
00207   inline bool WalkCamManip::isTranslate( void )
00208   {
00209     return( TRANSLATE == ((m_buttonState | m_keyState)) );
00210   }
00211 
00212   inline bool WalkCamManip::isTilt( void )
00213   {
00214     return( TILT == ((m_buttonState | m_keyState)) );
00215   }
00216 
00217   inline void WalkCamManip::setScreenSize(UINT x, UINT y)
00218   {
00219     __ASSERT(x>0);
00220     __ASSERT(y>0);
00221     m_ScreenSizeX = x;
00222     m_ScreenSizeX = y;
00223   }
00224 
00225   inline void WalkCamManip::setWorldUpVector( nvmath::Vec3f up )
00226   {
00227     m_worldUpVector = up; 
00228   }
00229 
00230   inline const nvmath::Vec3f& WalkCamManip::getWorldUpVector()
00231   {
00232     return m_worldUpVector; 
00233   }
00234 
00235   inline void WalkCamManip::setSpeedIncreaseFactor(float factor)
00236   {
00237     __ASSERT(fabs(factor) > FLT_EPSILON);
00238     m_speedIncreaseFactor = factor; 
00239   }
00240   
00241   inline float WalkCamManip::getSpeedIncreaseFactor()
00242   {
00243     return m_speedIncreaseFactor; 
00244   }
00245 
00246   inline void WalkCamManip::setHSensitivity(float sensitivity)
00247   {
00248     m_hSensitivity = sensitivity; 
00249   }
00250   
00251   inline float WalkCamManip::getHSensitivity()
00252   {
00253     return m_hSensitivity; 
00254   }
00255 
00256   inline void WalkCamManip::setSpeed(float speed)
00257   {
00258     m_speed = speed; 
00259   }
00260 
00261   inline float WalkCamManip::getSpeed()
00262   {
00263     return m_speed;
00264   }
00265 } //  namespace nvui

Generated on Tue Mar 1 13:19:19 2005 for NVSGSDK by NVIDIA