From 64d298ac17b47805f3deec99fc911bd8f73a9d2d Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Thu, 8 Oct 2009 02:01:55 -0700 Subject: Mini-map radar now can notify you when someone enters the sim --- linden/indra/newview/app_settings/settings.xml | 13 +++- linden/indra/newview/llfloatermap.cpp | 73 +++++++++++++++++++++- linden/indra/newview/llfloatermap.h | 12 +++- linden/indra/newview/llpanelgeneral.cpp | 6 +- .../skins/default/xui/en-us/floater_mini_map.xml | 3 + .../xui/en-us/panel_preferences_general.xml | 17 ++++- 6 files changed, 116 insertions(+), 8 deletions(-) (limited to 'linden/indra/newview') diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 8ffcb19..f167840 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -5088,7 +5088,7 @@ Value 1 - MiniMapNotify + MiniMapNotifyChatRange Comment Notify when avatars enter chat range @@ -5099,6 +5099,17 @@ Value 1 + MiniMapNotifySimRange + + Comment + Notify when avatars enters the current sim + Persist + 1 + Type + Boolean + Value + 0 + MiniMapPrimMaxRadius Comment diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index ae5b2b6..142d8fe 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -266,10 +266,14 @@ void LLFloaterMap::populateRadar() std::string fullname = getSelectedName(avatar_ids[i]); if (!fullname.empty()) { + bool notify_chat = gSavedSettings.getBOOL("MiniMapNotifyChatRange"); + bool notify_sim = gSavedSettings.getBOOL("MiniMapNotifySimRange"); // [RLVa:KB] - Alternate: Imprudence-1.2.0 if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) { fullname = gRlvHandler.getAnonym(fullname); + notify_chat = false; + notify_sim = false; } // [/RLVa:KB] @@ -280,7 +284,7 @@ void LLFloaterMap::populateRadar() sprintf(dist, "%.1f", distance); std::string dist_string = dist; - if (gSavedSettings.getBOOL("MiniMapNotify")) + if (notify_chat) { if (distance < 20.0f) { @@ -304,6 +308,31 @@ void LLFloaterMap::populateRadar() mChatAvatars.clear(); } + // announce their presence in the sim if we've enabled that + if (notify_sim) + { + if (!getInChatList(avatar_ids[i]) && !getInSimAvList(avatar_ids[i])) + { + LLViewerObject *av_obj = gObjectList.findObject(avatar_ids[i]); + if (av_obj != NULL && av_obj->isAvatar()) + { + LLVOAvatar* avatarp = (LLVOAvatar*)av_obj; + if (avatarp != NULL) + { + if (avatarp->getRegion() == gAgent.getRegion()) + { + addToSimAvList(avatar_ids[i], dist_string); + } + } + } + } + updateSimAvList(avatar_ids); + } + else if (!mSimAvatars.empty()) + { + mSimAvatars.clear(); + } + // append typing string std::string typing = ""; if (getIsTyping(avatar_ids[i])) @@ -334,6 +363,7 @@ void LLFloaterMap::populateRadar() } else { + mTypingAvatars.clear(); mRadarList->addCommentText(getString("no_one_near"), ADD_TOP); avatar_count << "0"; } @@ -416,6 +446,47 @@ void LLFloaterMap::updateTypingList(LLUUID agent_id, bool remove) } } +void LLFloaterMap::updateSimAvList(std::vector agent_ids) +{ + std::set::iterator it; + std::vector::iterator result; + for (it = mSimAvatars.begin(); it != mSimAvatars.end(); ) + { + result = find(agent_ids.begin(), agent_ids.end(), *it); + if (result == agent_ids.end()) + { + mSimAvatars.erase(it++); + } + else + { + it++; + } + } +} + +void LLFloaterMap::addToSimAvList(LLUUID agent_id, std::string distance) +{ + mSimAvatars.insert(agent_id); + LLChat chat; + + LLUIString notify = getString("entering_sim_range"); + notify.setArg("[NAME]", getSelectedName(agent_id)); + notify.setArg("[DISTANCE]", distance); + + chat.mText = notify; + chat.mSourceType = CHAT_SOURCE_SYSTEM; + LLFloaterChat::addChat(chat, FALSE, FALSE); +} + +bool LLFloaterMap::getInSimAvList(LLUUID agent_id) +{ + if (mSimAvatars.count(agent_id) > 0) + { + return true; + } + return false; +} + void LLFloaterMap::toggleButtons() { BOOL enable = FALSE; diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h index 6e44a1e..af4d1cc 100644 --- a/linden/indra/newview/llfloatermap.h +++ b/linden/indra/newview/llfloatermap.h @@ -67,13 +67,19 @@ public: private: + LLFloaterMap(const LLSD& key = LLSD()); LLNetMap* mPanelMap; LLScrollListCtrl* mRadarList; LLUUID mSelectedAvatar; + + // TODO: move all this info into its own object. It's stupid + // and bug-prone to keep it all in separate containers, but + // I want to get this out for 1.2 -- McCabe std::set mChatAvatars; - std::set mTypingAvatars; + std::set mTypingAvatars; + std::set mSimAvatars; bool mUpdate; static void onList(LLUICtrl* ctrl, void* user_data); @@ -88,6 +94,10 @@ private: void addToChatList(LLUUID agent_id, std::string distance); void removeFromChatList(LLUUID agent_id); + bool getInSimAvList(LLUUID agent_id); + void addToSimAvList(LLUUID agent_id, std::string distance); + void updateSimAvList(std::vector agent_ids); + static void onClickProfile(void* user_data); static void onClickIM(void* user_data); static void onClickAddFriend(void* user_data); diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp index 4cf4091..04b7afe 100644 --- a/linden/indra/newview/llpanelgeneral.cpp +++ b/linden/indra/newview/llpanelgeneral.cpp @@ -60,7 +60,8 @@ BOOL LLPanelGeneral::postBuild() childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames")); childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle")); childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout")); - childSetValue("mini_map_notify", gSavedSettings.getBOOL("MiniMapNotify")); + childSetValue("mini_map_notify_chat", gSavedSettings.getBOOL("MiniMapNotifyChatRange")); + childSetValue("mini_map_notify_sim", gSavedSettings.getBOOL("MiniMapNotifySimRange")); childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); childSetValue("use_system_color_picker_checkbox", gSavedSettings.getBOOL("UseDefaultColorPicker")); childSetValue("show_search_panel", gSavedSettings.getBOOL("ShowSearchBar")); @@ -98,7 +99,8 @@ void LLPanelGeneral::apply() gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox")); gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox")); gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal()); - gSavedSettings.setBOOL("MiniMapNotify", childGetValue("mini_map_notify")); + gSavedSettings.setBOOL("MiniMapNotifyChatRange", childGetValue("mini_map_notify_chat")); + gSavedSettings.setBOOL("MiniMapNotifySimRange", childGetValue("mini_map_notify_sim")); gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox")); gSavedSettings.setBOOL("UseDefaultColorPicker", childGetValue("use_system_color_picker_checkbox")); gSavedSettings.setBOOL("ShowSearchBar", childGetValue("show_search_panel")); diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml index dd9c324..3baec3f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml @@ -101,4 +101,7 @@ [NAME] has entered chat range ([DISTANCE]m) + + [NAME] has entered the sim ([DISTANCE]m) + diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml index 56bdb28..0c18a62 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml @@ -77,11 +77,22 @@ follows="left|top" height="16" increment="1" initial_val="300" label="Away Timeout:" label_width="141" left="10" max_val="600" min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" /> - + Mini-map notify: + + +