From 6c03dad7b42ae811ef90e4183c33b1c327e3d22b Mon Sep 17 00:00:00 2001
From: McCabe Maxsted
Date: Wed, 13 Apr 2011 19:13:37 -0700
Subject: Ported Radar v9 patch from Henri Beauchamp (et al.) to Imp, placed it
in the Advanced menu
---
linden/indra/newview/CMakeLists.txt | 2 +
linden/indra/newview/app_settings/settings.xml | 131 ++
linden/indra/newview/llagent.cpp | 110 ++
linden/indra/newview/llagent.h | 7 +
linden/indra/newview/llfloateravatarlist.cpp | 1471 ++++++++++++++++++++
linden/indra/newview/llfloateravatarlist.h | 316 +++++
linden/indra/newview/llstartup.cpp | 6 +-
linden/indra/newview/llviewermenu.cpp | 9 +
.../skins/default/xui/en-us/floater_radar.xml | 327 +++++
.../skins/default/xui/en-us/menu_viewer.xml | 4 +
10 files changed, 2382 insertions(+), 1 deletion(-)
create mode 100644 linden/indra/newview/llfloateravatarlist.cpp
create mode 100644 linden/indra/newview/llfloateravatarlist.h
create mode 100644 linden/indra/newview/skins/default/xui/en-us/floater_radar.xml
(limited to 'linden')
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt
index 9a4e2ed..df6d8b5 100644
--- a/linden/indra/newview/CMakeLists.txt
+++ b/linden/indra/newview/CMakeLists.txt
@@ -155,6 +155,7 @@ set(viewer_SOURCE_FILES
llfloaterassetbrowser.cpp
llfloaterauction.cpp
llfloateravatarinfo.cpp
+ llfloateravatarlist.cpp
llfloateravatarpicker.cpp
llfloateravatartextures.cpp
llfloaterbeacons.cpp
@@ -617,6 +618,7 @@ set(viewer_HEADER_FILES
llfloaterassetbrowser.h
llfloaterauction.h
llfloateravatarinfo.h
+ llfloateravatarlist.h
llfloateravatarpicker.h
llfloateravatartextures.h
llfloaterbeacons.h
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 3523c7f..c8ad381 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -2359,6 +2359,137 @@
+
+
+ ShowRadar
+
+ FloaterRadarRect
+
+ RadarKeepOpen
+
+ RadarUpdateRate
+
+ RadarAlertSim
+
+ RadarAlertDraw
+
+ RadarAlertShoutRange
+
+ RadarAlertChatRange
+
+ RadarChatAlerts
+
+ RadarChatKeys
+
+ RadarChatKeysChannel
+
+
+
+
AFKTimeout
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 871c90d..88ec2ca 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -4772,6 +4772,116 @@ void LLAgent::lookAtLastChat()
}
}
+void LLAgent::lookAtObject(LLUUID object_id, ECameraPosition camera_pos)
+{
+ // Block if camera is animating or not in normal third person camera mode
+ if (mCameraAnimating || !cameraThirdPerson())
+ {
+ return;
+ }
+
+ LLViewerObject *chatter = gObjectList.findObject(object_id);
+ if (chatter)
+ {
+ LLVector3 delta_pos;
+ if (chatter->isAvatar())
+ {
+ LLVOAvatar *chatter_av = (LLVOAvatar*)chatter;
+ if (!mAvatarObject.isNull() && chatter_av->mHeadp)
+ {
+ delta_pos = chatter_av->mHeadp->getWorldPosition() - mAvatarObject->mHeadp->getWorldPosition();
+ }
+ else
+ {
+ delta_pos = chatter->getPositionAgent() - getPositionAgent();
+ }
+ delta_pos.normVec();
+
+ setControlFlags(AGENT_CONTROL_STOP);
+
+ changeCameraToThirdPerson();
+
+ LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition();
+ LLVector3 left = delta_pos % LLVector3::z_axis;
+ left.normVec();
+ LLVector3 up = left % delta_pos;
+ up.normVec();
+ new_camera_pos -= delta_pos * 0.4f;
+ new_camera_pos += left * 0.3f;
+ new_camera_pos += up * 0.2f;
+
+ F32 radius = chatter_av->getVObjRadius();
+ LLVector3d view_dist(radius, radius, 0.0f);
+
+ if (chatter_av->mHeadp)
+ {
+ setFocusGlobal(getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), object_id);
+ mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition());
+
+ switch(camera_pos)
+ {
+ case CAMERA_POSITION_SELF:
+ mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition());
+ break;
+ case CAMERA_POSITION_OBJECT:
+ mCameraFocusOffsetTarget = view_dist;
+ break;
+ }
+ }
+ else
+ {
+ setFocusGlobal(chatter->getPositionGlobal(), object_id);
+ mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
+
+ switch(camera_pos)
+ {
+ case CAMERA_POSITION_SELF:
+ mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
+ break;
+ case CAMERA_POSITION_OBJECT:
+ mCameraFocusOffsetTarget = view_dist;
+ break;
+ }
+ }
+ setFocusOnAvatar(FALSE, TRUE);
+ }
+ else
+ {
+ delta_pos = chatter->getRenderPosition() - getPositionAgent();
+ delta_pos.normVec();
+
+ setControlFlags(AGENT_CONTROL_STOP);
+
+ changeCameraToThirdPerson();
+
+ LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition();
+ LLVector3 left = delta_pos % LLVector3::z_axis;
+ left.normVec();
+ LLVector3 up = left % delta_pos;
+ up.normVec();
+ new_camera_pos -= delta_pos * 0.4f;
+ new_camera_pos += left * 0.3f;
+ new_camera_pos += up * 0.2f;
+
+ setFocusGlobal(chatter->getPositionGlobal(), object_id);
+
+ switch(camera_pos)
+ {
+ case CAMERA_POSITION_SELF:
+ mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
+ break;
+ case CAMERA_POSITION_OBJECT:
+ F32 radius = chatter->getVObjRadius();
+ LLVector3d view_dist(radius, radius, 0.0f);
+ mCameraFocusOffsetTarget = view_dist;
+ break;
+ }
+
+ setFocusOnAvatar(FALSE, TRUE);
+ }
+ }
+}
+
const F32 SIT_POINT_EXTENTS = 0.2f;
void LLAgent::setStartPosition( U32 location_id )
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index cea55fb..83490d3 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -82,6 +82,12 @@ typedef enum e_camera_modes
CAMERA_MODE_FOLLOW
} ECameraMode;
+typedef enum e_camera_position
+{
+ CAMERA_POSITION_SELF, /** Camera positioned at our position */
+ CAMERA_POSITION_OBJECT /** Camera positioned at observed object's position */
+} ECameraPosition;
+
typedef enum e_anim_request
{
ANIM_REQUEST_START,
@@ -214,6 +220,7 @@ public:
void heardChat(const LLUUID& id);
void lookAtLastChat();
+ void lookAtObject(LLUUID avatar_id, ECameraPosition camera_pos);
F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); }
void setAFK();
diff --git a/linden/indra/newview/llfloateravatarlist.cpp b/linden/indra/newview/llfloateravatarlist.cpp
new file mode 100644
index 0000000..59cd278
--- /dev/null
+++ b/linden/indra/newview/llfloateravatarlist.cpp
@@ -0,0 +1,1471 @@
+/**
+ * @file llfloateravatarlist.cpp
+ * @brief Avatar list/radar floater
+ *
+ * @author Dale Glass , (C) 2007
+ */
+
+/**
+ * Rewritten by jcool410
+ * Removed usage of globals
+ * Removed TrustNET
+ * Added utilization of "minimap" data
+ * Heavily modified by Henri Beauchamp (the laggy spying tool becomes a true,
+ * low lag radar)
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llavatarconstants.h"
+#include "llfloateravatarlist.h"
+
+#include "llcachename.h"
+#include "lluictrlfactory.h"
+#include "llviewerwindow.h"
+#include "llscrolllistctrl.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+
+#include "llvoavatar.h"
+#include "llimview.h"
+#include "llfloateravatarinfo.h"
+#include "llregionflags.h"
+#include "llfloaterreporter.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "lltracker.h"
+#include "llviewerstats.h"
+#include "llerror.h"
+#include "llchat.h"
+#include "llfloaterchat.h"
+#include "llviewermessage.h"
+#include "llweb.h"
+#include "llviewerobjectlist.h"
+#include "llmutelist.h"
+#include "llcallbacklist.h"
+#include "llviewermenu.h"
+
+#include
+#include
+
+#include