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
00088
00089
00090 S32 dx = -gViewerWindow->getCurrentMouseDX();
00091 S32 dy = -gViewerWindow->getCurrentMouseDY();
00092
00093 if (dx != 0 || dy != 0)
00094 {
00095
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
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 }