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(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