From 9e8bfa606b54a6fd6c39722acabe09415c637e66 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Thu, 2 Apr 2020 13:08:11 -0400 Subject: [PATCH] Restore mouselook IFF --- .../newview/app_settings/settings_alchemy.xml | 22 ++++++ indra/newview/lltoolgun.cpp | 78 +++++++++++++++---- indra/newview/lltoolgun.h | 1 + 3 files changed, 88 insertions(+), 13 deletions(-) diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index 5494fdd1a16..ecf73234be6 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -266,6 +266,28 @@ <key>Value</key> <integer>0</integer> </map> + <key>AlchemyMouselookIFF</key> + <map> + <key>Comment</key> + <string>Display user that is currently focused upon by crosshair in mouselook</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>AlchemyMouselookIFFRange</key> + <map> + <key>Comment</key> + <string>Range of IFF display</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>380.0</real> + </map> <key>AlchemyRainbowEffects</key> <map> <key>Comment</key> diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp index 205f570cf14..9af0588c096 100644 --- a/indra/newview/lltoolgun.cpp +++ b/indra/newview/lltoolgun.cpp @@ -49,10 +49,16 @@ // Linden library includes #include "llwindow.h" // setMouseClipping() +//#include "alavatarcolormgr.h" +#include "llavatarnamecache.h" +#include "llnetmap.h" +#include "llworld.h" + LLToolGun::LLToolGun( LLToolComposite* composite ) : LLTool( std::string("gun"), composite ), mIsSelected(FALSE) { + mCrosshairp = LLUI::getUIImage("crosshairs.tga"); } void LLToolGun::handleSelect() @@ -92,8 +98,8 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask) { const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f; - F32 mouse_sensitivity = gSavedSettings.getF32("MouseSensitivity"); - mouse_sensitivity = clamp_rescale(mouse_sensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY; + static LLCachedControl<F32> mouse_sensitivity_setting(gSavedSettings, "MouseSensitivity"); + F32 mouse_sensitivity = clamp_rescale(mouse_sensitivity_setting, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY; // ...move the view with the mouse @@ -104,25 +110,29 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask) if (dx != 0 || dy != 0) { // ...actually moved off center - if (gSavedSettings.getBOOL("InvertMouse")) + const F32 fov = LLViewerCamera::getInstance()->getView() / DEFAULT_FIELD_OF_VIEW; + static LLCachedControl<bool> invert_mouse(gSavedSettings, "InvertMouse"); + if (invert_mouse) { - gAgent.pitch(mouse_sensitivity * -dy); + gAgent.pitch(mouse_sensitivity * fov * -dy); } else { - gAgent.pitch(mouse_sensitivity * dy); + gAgent.pitch(mouse_sensitivity * fov * dy); } LLVector3 skyward = gAgent.getReferenceUpVector(); - gAgent.rotate(mouse_sensitivity * dx, skyward.mV[VX], skyward.mV[VY], skyward.mV[VZ]); + gAgent.rotate(mouse_sensitivity * fov * dx, skyward.mV[VX], skyward.mV[VY], skyward.mV[VZ]); - if (gSavedSettings.getBOOL("MouseSun")) + static LLCachedControl<bool> mouse_sun(gSavedSettings, "MouseSun"); + if (mouse_sun) { LLVector3 sunpos = LLViewerCamera::getInstance()->getAtAxis(); gSky.setSunDirectionCFR(sunpos); gSavedSettings.setVector3("SkySunDefaultPosition", LLViewerCamera::getInstance()->getAtAxis()); } - if (gSavedSettings.getBOOL("MouseMoon")) + static LLCachedControl<bool> mouse_moon(gSavedSettings, "MouseMoon"); + if (mouse_moon) { LLVector3 moonpos = LLViewerCamera::getInstance()->getAtAxis(); gSky.setMoonDirectionCFR(moonpos); @@ -148,11 +158,53 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask) void LLToolGun::draw() { - if( gSavedSettings.getBOOL("ShowCrosshairs") ) + static LLCachedControl<bool> show_crosshairs(gSavedSettings, "ShowCrosshairs"); + static LLCachedControl<bool> show_iff(gSavedSettings, "AlchemyMouselookIFF", true); + static LLCachedControl<F32> iff_range(gSavedSettings, "AlchemyMouselookIFFRange", 380.f); + if (show_crosshairs) { - LLUIImagePtr crosshair = LLUI::getUIImage("crosshairs.tga"); - crosshair->draw( - ( gViewerWindow->getWorldViewRectScaled().getWidth() - crosshair->getWidth() ) / 2, - ( gViewerWindow->getWorldViewRectScaled().getHeight() - crosshair->getHeight() ) / 2); + const S32 windowWidth = gViewerWindow->getWorldViewRectScaled().getWidth(); + const S32 windowHeight = gViewerWindow->getWorldViewRectScaled().getHeight(); + LLColor4 targetColor = LLColor4::white; + targetColor.mV[VALPHA] = 0.5f; + if (show_iff) + { + LLVector3d myPosition = gAgentCamera.getCameraPositionGlobal(); + LLQuaternion myRotation = LLViewerCamera::getInstance()->getQuaternion(); + myRotation.set(-myRotation.mQ[VX], -myRotation.mQ[VY], -myRotation.mQ[VZ], myRotation.mQ[VW]); + + LLWorld::pos_map_t positions; + LLWorld::getInstance()->getAvatars(&positions, gAgent.getPositionGlobal(), iff_range); + for (const auto& position : positions) + { + const auto& id = position.first; + const auto& targetPosition = position.second; + if (id == gAgentID || targetPosition.isNull()) + { + continue; + } + + LLVector3d magicVector = (targetPosition - myPosition) * myRotation; + magicVector.setVec(-magicVector.mdV[VY], magicVector.mdV[VZ], magicVector.mdV[VX]); + if (magicVector.mdV[VX] > -0.75 && magicVector.mdV[VX] < 0.75 && magicVector.mdV[VZ] > 0.0 && magicVector.mdV[VY] > -1.5 && magicVector.mdV[VY] < 1.5) // Do not fuck with these, cheater. :( + { + LLAvatarName avatarName; + LLAvatarNameCache::get(id, &avatarName); + //targetColor = ALAvatarColorMgr::instance().getColor(id); + targetColor.mV[VALPHA] = 0.5f; + LLFontGL::getFontSansSerifBold()->renderUTF8( + llformat("%s : %.2fm", avatarName.getCompleteName().c_str(), (targetPosition - myPosition).magVec()), + 0, (windowWidth / 2.f), (windowHeight / 2.f) - 25.f, targetColor, + LLFontGL::HCENTER, LLFontGL::TOP, LLFontGL::BOLD, LLFontGL::NO_SHADOW + ); + + break; + } + } + } + + mCrosshairp->draw( + (windowWidth - mCrosshairp->getWidth()) / 2, + (windowHeight - mCrosshairp->getHeight()) / 2, targetColor); } } diff --git a/indra/newview/lltoolgun.h b/indra/newview/lltoolgun.h index 8ae926b741d..3cee19200b5 100644 --- a/indra/newview/lltoolgun.h +++ b/indra/newview/lltoolgun.h @@ -48,6 +48,7 @@ class LLToolGun : public LLTool virtual BOOL clipMouseWhenDown() { return FALSE; } private: BOOL mIsSelected; + LLUIImagePtr mCrosshairp; }; #endif -- GitLab