Added avatar marking for minimap. Fixes FIRE-1483

meow-7.2.2
Ansariel 2011-07-15 22:37:22 +02:00
parent 255ed97989
commit da8e719b91
6 changed files with 114 additions and 0 deletions

View File

@ -102,6 +102,9 @@ BOOL LLFloaterMap::postBuild()
registrar.add("Minimap.Zoom", boost::bind(&LLFloaterMap::handleZoom, this, _2));
registrar.add("Minimap.Tracker", boost::bind(&LLFloaterMap::handleStopTracking, this, _2));
registrar.add("Minimap.Mark", boost::bind(&LLFloaterMap::handleMark, this, _2));
registrar.add("Minimap.ClearMarks", boost::bind(&LLFloaterMap::handleClearMarks, this));
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
if (mPopupMenu && !LLTracker::isTracking(0))
{
@ -160,6 +163,8 @@ BOOL LLFloaterMap::handleDoubleClick( S32 x, S32 y, MASK mask )
BOOL LLFloaterMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
mMap->saveClosestAgentAtLastRightClick();
if (mPopupMenu)
{
mPopupMenu->buildDrawLabels();
@ -331,3 +336,13 @@ void LLFloaterMap::setMinimized(BOOL b)
setTitle("");
}
}
void LLFloaterMap::handleMark(const LLSD& userdata)
{
mMap->setAvatarMark(userdata);
}
void LLFloaterMap::handleClearMarks()
{
mMap->clearAvatarMarks();
}

View File

@ -57,6 +57,8 @@ private:
void handleStopTracking (const LLSD& userdata);
void setDirectionPos( LLTextBox* text_box, F32 rotation );
void updateMinorDirections();
void handleMark(const LLSD& userdata);
void handleClearMarks();
void stretchMiniMap(S32 width,S32 height);

View File

@ -88,6 +88,9 @@ const S32 MOUSE_DRAG_SLOP = 2; // How far the mouse needs to move before we thi
const F32 WIDTH_PIXELS = 2.f;
const S32 CIRCLE_STEPS = 100;
std::map<LLUUID, LLColor4> LLNetMap::sAvatarMarksMap;
LLNetMap::LLNetMap (const Params & p)
: LLUICtrl (p),
mBackgroundColor (p.bg_color()),
@ -129,6 +132,9 @@ BOOL LLNetMap::postBuild()
registrar.add("Minimap.Zoom", boost::bind(&LLNetMap::handleZoom, this, _2));
registrar.add("Minimap.Tracker", boost::bind(&LLNetMap::handleStopTracking, this, _2));
registrar.add("Minimap.Mark", boost::bind(&LLNetMap::handleMark, this, _2));
registrar.add("Minimap.ClearMarks", boost::bind(&LLNetMap::handleClearMarks, this));
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
if (mPopupMenu && !LLTracker::isTracking(0))
{
@ -433,6 +439,12 @@ void LLNetMap::draw()
isHeightUnknown = false;
}
}
// Mark Avatars with special colors
if (LLNetMap::sAvatarMarksMap.find(uuid) != LLNetMap::sAvatarMarksMap.end())
{
color = LLNetMap::sAvatarMarksMap[uuid];
}
}
// Ansariel: Moved down here so we can take precise
@ -1034,6 +1046,8 @@ BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask )
BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
saveClosestAgentAtLastRightClick();
if (mPopupMenu)
{
mPopupMenu->buildDrawLabels();
@ -1164,3 +1178,34 @@ void LLNetMap::handleStopTracking (const LLSD& userdata)
LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL));
}
}
void LLNetMap::handleMark(const LLSD& userdata)
{
setAvatarMark(userdata);
}
void LLNetMap::handleClearMarks()
{
clearAvatarMarks();
}
void LLNetMap::setAvatarMark(const LLSD& userdata)
{
if (mClosestAgentAtLastRightClick.notNull())
{
// Use the name as color definition name from colors.xml
LLColor4 color = LLUIColorTable::instance().getColor(userdata.asString(), LLColor4::green);
LLNetMap::sAvatarMarksMap[mClosestAgentAtLastRightClick] = color;
llinfos << "Minimap: Marking " << mClosestAgentAtLastRightClick.asString() << " in " << userdata.asString() << llendl;
}
}
void LLNetMap::saveClosestAgentAtLastRightClick()
{
mClosestAgentAtLastRightClick = mClosestAgentToCursor;
}
void LLNetMap::clearAvatarMarks()
{
LLNetMap::sAvatarMarksMap.clear();
}

View File

@ -129,12 +129,19 @@ private:
std::string mToolTipMsg;
static std::map<LLUUID, LLColor4> sAvatarMarksMap;
public:
void setSelected(uuid_vec_t uuids) { gmSelected=uuids; };
void setAvatarMark(const LLSD& userdata);
void saveClosestAgentAtLastRightClick();
void clearAvatarMarks();
private:
void handleZoom(const LLSD& userdata);
void handleStopTracking (const LLSD& userdata);
void handleMark(const LLSD& userdata);
void handleClearMarks();
LLMenuGL* mPopupMenu;
uuid_vec_t gmSelected;

View File

@ -6,6 +6,14 @@
<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
<menu_item_check label="Karte drehen" name="Rotate Map"/>
<menu_item_check label="Automatisch zentrieren" name="Auto Center"/>
<menu_item_check label="Chatdistanz-Markierung" name="Chat Distance Ring"/>
<menu name="MarkAvatar" label="Markieren...">
<menu_item_call label="Rot" name="MarkRed"/>
<menu_item_call label="Lila" name="MarkPurple"/>
<menu_item_call label="Grün" name="MarkGreen"/>
<menu_item_call label="Gelb" name="MarkYellow"/>
<menu_item_call label="Markierungen löschen" name="Clear Marks"/>
</menu>
<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
<menu_item_call label="Weltkarte" name="World Map"/>
</menu>

View File

@ -65,6 +65,43 @@
parameter="MiniMapChatRing" />
</menu_item_check>
<menu_item_separator />
<menu name="MarkAvatar" label="Mark...">
<menu_item_call
label="Red"
name="MarkRed">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="Red" />
</menu_item_call>
<menu_item_call
label="Purple"
name="MarkPurple">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="Purple" />
</menu_item_call>
<menu_item_call
label="Green"
name="MarkGreen">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="Green" />
</menu_item_call>
<menu_item_call
label="Yellow"
name="MarkYellow">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="LtYellow" />
</menu_item_call>
<menu_item_separator />
<menu_item_call
label="Clear Marks"
name="Clear Marks">
<menu_item_call.on_click
function="Minimap.ClearMarks"/>
</menu_item_call>
</menu>
<menu_item_call
label="Stop Tracking"
name="Stop Tracking">