Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HOpCameraWalk.h
00001 // HOpCameraPan.h : interface of the HOpCameraPan class
00002 // pans the camera of current view
00003 
00004 #ifndef _HOpCameraWalk_H
00005 #define _HOpCameraWalk_H
00006 
00007 #ifdef H_PACK_8
00008 #pragma pack(push)
00009 #pragma pack(8)
00010 #endif
00011 
00012 #include "HTools.h"
00013 #include "HBaseOperator.h"
00014 #include "HObjects.h"
00015 class HTClient;
00016 class HImageItem;
00017 
00019 
00044 class MVO_API HOpCameraWalk : public HBaseOperator
00045 {
00046 public:
00047 
00055      HOpCameraWalk(HBaseView* view, int DoRepeat=0, int DoCapture=1);
00056     virtual ~HOpCameraWalk();
00057     
00058 
00062     virtual const char * GetName();
00063     
00069     virtual int OnLButtonDown (HEventInfo &hevent);
00070 
00077     virtual int OnLButtonDownAndMove(HEventInfo &hevent);
00078 
00084     virtual int OnLButtonUp (HEventInfo &hevent);
00085     
00092    void SetLightFollowsCamera(bool follow){m_LightFollowsCamera = follow;};
00094     bool GetLightFollowsCamera(){return m_LightFollowsCamera;};
00095  
00096     
00102     virtual int OnMouseWheel(HEventInfo &hevent);
00103 
00104 
00110     virtual int OnMButtonDown(HEventInfo &hevent);
00111 
00118     virtual int OnMButtonDownAndMove(HEventInfo &hevent);
00119 
00125     virtual int OnMButtonUp(HEventInfo &hevent);    
00126        
00132    virtual HBaseOperator * Clone(); 
00133    
00134   
00140     void     OnWalk(float requested_time, float actual_time); 
00146     void     OnKeyWalk(float requested_time, float actual_time); 
00147 
00148     void    OnButtonWalk(char const * action, HButtonState buttonstate);
00149 
00150  
00158     static bool WalkTimerClbk(float request_time, float actual_time, void * user_data);
00159 
00163     void ViewDeleted() { m_bViewDeleted = true; }
00164  
00169     void SetKeyboardWalk(bool kw) { m_bKeyboardWalk = kw; } 
00174     void SetCollision(bool c) { m_bCollision = c; } 
00179     void SetSnapToFloor(bool s) { m_bSnapToFloor = s; } 
00184     void SetAvatarHeight(float ah) { m_AvatarHeight = ah;   m_bOldSnappedToGround = false; }
00191     void SetStepHeightUp(float shu) { m_MaxUpGap = shu; }
00198     void SetStepHeightDown(float shd) { m_MaxDownGap = shd; }
00202     float GetAvatarHeight() { return m_AvatarHeight; }
00208     void SetSpeed(float s) { m_Speed = s; }
00209     float GetSpeed()    { return m_Speed; }
00210 
00213     static float CalculateExtents(HBaseView *view);  
00214     int OnKeyDown(HEventInfo &hevent);
00215     static int ImageAction(HImageRegion *ii,void *data, HButtonState keyup);
00216 
00221     void ShowNavigationWindow(const char *image_dir = 0);
00225     void RemoveNavigationWindow();
00226 
00227     void FitControlsToCorner();
00228 
00229   protected:
00230     void SnapToGround();
00231     void AdjustCameraCollision(HCamera &oldcamera, bool noextrude = false);
00232     void AdjustHeight(HCamera &oldcamera);
00233  
00234     static bool signal_callback(int signal, void *signal_data, void *user_data);
00235 
00236     void ReadjustPosition();    
00237     
00238     void SetupControls(char forward, char backward, char strafe_left, char strafe_right, char up, char down);
00239 
00240   private: 
00241 
00242     
00243     HCamera m_oldcamera;
00244     bool m_bOperatorCreated;
00245     void ResetPosition();  
00246     void Level();
00247     bool    m_LightFollowsCamera;
00248     HPoint camera,target, up;
00249     float       m_time;
00250     unsigned    m_timer;
00251     float       m_max_world_extent;
00252     float       m_alpha;
00253     float       m_beta;
00254     float       m_rotate, m_move, m_tilt, m_updown, m_strafe;
00255     bool m_walkmode;
00256     int m_AxisMode;
00257     bool m_bChange;
00258     bool doOnce;
00259     bool m_bViewDeleted;
00260     HTClient*           m_pWalkTimer;
00261     int m_cookie;                                                   
00262     bool m_bBlocked;
00263     bool m_bBlockedForward;
00264     bool m_bBlockedBackward;
00265     bool m_bSnappedToGround;
00266     bool m_bOldSnappedToGround;
00267     bool m_bKeyboardWalk;
00268     bool m_bCollision;
00269     bool m_bSnapToFloor;
00270 
00271     float m_MaxUpGap;
00272     float m_MaxDownGap;
00273     float m_AvatarDiameter;
00274     float m_AvatarHeight;
00275     float m_Speed;
00276     float m_totalrotate;
00277     float m_totalrotateold;
00278     char  m_c_forward;
00279     char  m_c_backward;
00280     char  m_c_strafe_left;
00281     char  m_c_strafe_right;
00282     char  m_c_up;
00283     char  m_c_down;
00284     bool  m_bNoKeyMove;
00285     bool  m_bNavigationWindowActive;
00286 };
00287 
00288 
00289 #ifdef H_PACK_8
00290 #pragma pack(pop)
00291 #endif
00292 
00293 #endif
00294 
00295 
00296