lltoolgun.cpp

Go to the documentation of this file.
00001 
00032 #include "llviewerprecompiledheaders.h"
00033 
00034 #include "lltoolgun.h"
00035 
00036 #include "llviewerwindow.h"
00037 #include "llagent.h"
00038 #include "llviewercontrol.h"
00039 #include "llsky.h"
00040 #include "llappviewer.h"
00041 #include "llresmgr.h"
00042 #include "llfontgl.h"
00043 #include "llui.h"
00044 #include "llviewerimagelist.h"
00045 #include "llviewercamera.h"
00046 #include "llhudmanager.h"
00047 #include "lltoolmgr.h"
00048 #include "lltoolgrab.h"
00049 
00050 LLToolGun::LLToolGun( LLToolComposite* composite )
00051         :
00052         LLTool( "gun", composite )
00053 {
00054 }
00055 
00056 void LLToolGun::handleSelect()
00057 {
00058         gViewerWindow->hideCursor();
00059         gViewerWindow->moveCursorToCenter();
00060         gViewerWindow->mWindow->setMouseClipping(TRUE);
00061 }
00062 
00063 void LLToolGun::handleDeselect()
00064 {
00065         gViewerWindow->moveCursorToCenter();
00066         gViewerWindow->showCursor();
00067         gViewerWindow->mWindow->setMouseClipping(FALSE);
00068 }
00069 
00070 BOOL LLToolGun::handleMouseDown(S32 x, S32 y, MASK mask)
00071 {
00072         gGrabTransientTool = this;
00073         LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() );
00074 
00075         return LLToolGrab::getInstance()->handleMouseDown(x, y, mask);
00076 }
00077 
00078 BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask) 
00079 {
00080         if( gAgent.cameraMouselook() )
00081         {
00082                 const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
00083 
00084                 F32 mouse_sensitivity = gSavedSettings.getF32("MouseSensitivity");
00085                 mouse_sensitivity = clamp_rescale(mouse_sensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;
00086 
00087                 // ...move the view with the mouse
00088 
00089                 // get mouse movement delta
00090                 S32 dx = -gViewerWindow->getCurrentMouseDX();
00091                 S32 dy = -gViewerWindow->getCurrentMouseDY();
00092                 
00093                 if (dx != 0 || dy != 0)
00094                 {
00095                         // ...actually moved off center
00096                         if (gSavedSettings.getBOOL("InvertMouse"))
00097                         {
00098                                 gAgent.pitch(mouse_sensitivity * -dy);
00099                         }
00100                         else
00101                         {
00102                                 gAgent.pitch(mouse_sensitivity * dy);
00103                         }
00104                         LLVector3 skyward = gAgent.getReferenceUpVector();
00105                         gAgent.rotate(mouse_sensitivity * dx, skyward.mV[VX], skyward.mV[VY], skyward.mV[VZ]);
00106 
00107                         if (gSavedSettings.getBOOL("MouseSun"))
00108                         {
00109                                 gSky.setSunDirection(LLViewerCamera::getInstance()->getAtAxis(), LLVector3(0.f, 0.f, 0.f));
00110                                 gSky.setOverrideSun(TRUE);
00111                                 gSavedSettings.setVector3("SkySunDefaultPosition", LLViewerCamera::getInstance()->getAtAxis());
00112                         }
00113 
00114                         gViewerWindow->moveCursorToCenter();
00115                         gViewerWindow->hideCursor();
00116                 }
00117 
00118                 lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolGun (mouselook)" << llendl;
00119         }
00120         else
00121         {
00122                 lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolGun (not mouselook)" << llendl;
00123         }
00124 
00125         // HACK to avoid assert: error checking system makes sure that the cursor is set during every handleHover.  This is actually a no-op since the cursor is hidden.
00126         gViewerWindow->setCursor(UI_CURSOR_ARROW);  
00127 
00128         return TRUE;
00129 }
00130 
00131 void LLToolGun::draw()
00132 {
00133         if( gSavedSettings.getBOOL("ShowCrosshairs") )
00134         {
00135                 LLUIImagePtr crosshair = LLUI::getUIImage("UIImgCrosshairsUUID");
00136                 crosshair->draw(
00137                         ( gViewerWindow->getWindowWidth() - crosshair->getWidth() ) / 2,
00138                         ( gViewerWindow->getWindowHeight() - crosshair->getHeight() ) / 2);
00139         }
00140 }

Generated on Fri May 16 08:34:07 2008 for SecondLife by  doxygen 1.5.5