Compare commits

..

10 Commits

Author SHA1 Message Date
Siana Gearz
51a71f27e9 Fix avatar display, ocean colour 2011-03-16 01:34:49 +01:00
Siana Gearz
d27e5a2676 Inventory crashfix 2011-03-14 15:44:58 +01:00
Siana Gearz
f67c761341 Performance fix, maturity 2011-03-14 00:12:02 +01:00
Siana Gearz
e63279a692 Amazon world map 2011-03-13 02:52:56 +01:00
Siana Gearz
a05fdaa63e Unbotched that 2011-03-12 22:14:54 +01:00
Siana Gearz
ed457e3539 killing terrain tab 2011-03-11 17:50:56 +01:00
Siana Gearz
fc1fc600d9 Map refactor 2011-03-11 17:50:56 +01:00
Siana Gearz
68fa3ae13c HUDs should automatically reposition now 2011-03-11 17:10:55 +01:00
Siana Gearz
19f9af6c29 Bulldozer Teleport History from Henri's 2011-03-11 15:45:59 +01:00
Siana Gearz
3ce40cf763 Static VFS from V2 - incl new walks! 2011-03-11 00:20:18 +01:00
26 changed files with 2151 additions and 1735 deletions

View File

@@ -494,8 +494,8 @@ set(viewer_SOURCE_FILES
llwlparamset.cpp
llworld.cpp
llworldmap.cpp
llworldmapmessage.cpp
llworldmipmap.cpp
llmapresponders.cpp
llworldmapview.cpp
llxmlrpctransaction.cpp
noise.cpp
@@ -969,8 +969,8 @@ set(viewer_HEADER_FILES
llwlparamset.h
llworld.h
llworldmap.h
llworldmapmessage.h
llworldmipmap.h
llmapresponders.h
llworldmapview.h
llxmlrpctransaction.h
macmain.h

View File

@@ -7275,6 +7275,17 @@
<key>Value</key>
<string>http://map.secondlife.com.s3.amazonaws.com/</string>
</map>
<key>UseWebMapTiles</key>
<map>
<key>Comment</key>
<string>Use web map tiles whenever possible</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>MapOverlayIndex</key>
<map>
<key>Comment</key>
@@ -7308,10 +7319,10 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>MapShowEvents</key>
<key>MapShowPGEvents</key>
<map>
<key>Comment</key>
<string>Show events on world map</string>
<string>Show PG events on world map</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -7319,6 +7330,28 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>MapShowMatureEvents</key>
<map>
<key>Comment</key>
<string>Show mature events on world map</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>MapShowAdultEvents</key>
<map>
<key>Comment</key>
<string>Show adult events on world map</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>MapShowInfohubs</key>
<map>
<key>Comment</key>

View File

@@ -111,6 +111,7 @@
#include "lltoolmgr.h"
#include "lltoolpie.h"
#include "lltoolview.h"
#include "lltrans.h"
#include "llui.h" // for make_ui_sound
#include "llurldispatcher.h"
#include "llviewercamera.h"
@@ -139,9 +140,6 @@
#include "llviewerjoystick.h"
#include "llfollowcam.h"
#include "llworldmapmessage.h"
#include "llfollowcam.h"
// [RLVa:KB] - Checked: 2010-09-27 (RLVa-1.1.3b)
#include "rlvhandler.h"
#include "rlvinventory.h"
@@ -8514,21 +8512,26 @@ std::string LLAgent::getCapability(const std::string& name) const
}
return iter->second;
}
// <edit>
void LLAgent::showLureDestination(const std::string fromname, const int global_x, const int global_y, const int x, const int y, const int z, const std::string maturity)
{
const LLVector3d posglobal = LLVector3d(F64(global_x), F64(global_y), F64(0));
LLSimInfo* siminfo;
siminfo = LLWorldMap::getInstance()->simInfoFromPosGlobal(posglobal);
std::string sim_name;
LLWorldMap::getInstance()->simNameFromPosGlobal( posglobal, sim_name );
if(siminfo)
{
llinfos << fromname << "'s teleport lure is to " << siminfo->getName() << " (" << maturity << ")" << llendl;
std::string url = LLURLDispatcher::buildSLURL(siminfo->getName(), S32(x), S32(y), S32(z));
std::string msg;
msg = llformat("%s's teleport lure is to %s", fromname.c_str(), url.c_str());
if(maturity != "")
llinfos << fromname << "'s teleport lure is to " << sim_name << " (" << maturity << ")" << llendl;
LLStringUtil::format_map_t args;
args["[NAME]"] = fromname;
args["[DESTINATION]"] = LLURLDispatcher::buildSLURL(sim_name.c_str(), S32(x), S32(y), S32(z));
std::string msg = LLTrans::getString("TeleportLureMaturity", args);
if (maturity != "")
{
msg.append(llformat(" (%s)", maturity.c_str()));
}
LLChat chat(msg);
LLFloaterChat::addChat(chat);
}
@@ -8543,7 +8546,7 @@ void LLAgent::showLureDestination(const std::string fromname, const int global_x
LLAgent::lure_y = y;
LLAgent::lure_z = z;
LLAgent::lure_maturity = maturity;
LLWorldMapMessage::getInstance()->sendMapBlockRequest(lure_global_x, lure_global_y, lure_global_x, lure_global_y, true);
LLWorldMap::getInstance()->sendMapBlockRequest(lure_global_x, lure_global_y, lure_global_x, lure_global_y, true);
}
}
@@ -8552,14 +8555,19 @@ void LLAgent::onFoundLureDestination()
LLAgent::lure_show = FALSE;
LLSimInfo* siminfo;
siminfo = LLWorldMap::getInstance()->simInfoFromPosGlobal(LLAgent::lure_posglobal);
std::string sim_name;
LLWorldMap::getInstance()->simNameFromPosGlobal(LLAgent::lure_posglobal, sim_name );
if(siminfo)
{
llinfos << LLAgent::lure_name << "'s teleport lure is to " << siminfo->getName() << " (" << LLAgent::lure_maturity << ")" << llendl;
std::string url = LLURLDispatcher::buildSLURL(siminfo->getName(), S32(LLAgent::lure_x), S32(LLAgent::lure_y), S32(LLAgent::lure_z));
std::string msg;
msg = llformat("%s's teleport lure is to %s", LLAgent::lure_name.c_str(), url.c_str());
if(LLAgent::lure_maturity != "")
llinfos << LLAgent::lure_name << "'s teleport lure is to " << sim_name << " (" << LLAgent::lure_maturity << ")" << llendl;
LLStringUtil::format_map_t args;
args["[NAME]"] = LLAgent::lure_name;
args["[DESTINATION]"] = LLURLDispatcher::buildSLURL(sim_name, S32(LLAgent::lure_x), S32(LLAgent::lure_y), S32(LLAgent::lure_z));
std::string msg = LLTrans::getString("TeleportOfferMaturity", args);
if (LLAgent::lure_maturity != "")
{
msg.append(llformat(" (%s)", LLAgent::lure_maturity.c_str()));
}
LLChat chat(msg);
LLFloaterChat::addChat(chat);
}
@@ -8567,7 +8575,6 @@ void LLAgent::onFoundLureDestination()
llwarns << "Grand scheme failed" << llendl;
}
// </edit>
// EOF

View File

@@ -39,25 +39,24 @@
#include "lleventpoll.h"
#include "llagent.h"
//mk
#include "llappviewer.h"
#include "llfloaterteleporthistory.h"
#include "llfloaterworldmap.h"
#include "lltimer.h"
#include "lluictrlfactory.h"
#include "llurldispatcher.h"
#include "llurlsimstring.h"
#include "llviewercontrol.h" // gSavedSettings
#include "llviewercontrol.h"
#include "llviewerwindow.h"
#include "llweb.h"
#include "apr_time.h"
// globals
LLFloaterTeleportHistory* gFloaterTeleportHistory;
LLFloaterTeleportHistory::LLFloaterTeleportHistory()
: LLFloater(std::string("teleporthistory")),
mPlacesList(NULL),
id(0)
mID(0)
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_teleport_history.xml", NULL);
}
@@ -71,7 +70,7 @@ LLFloaterTeleportHistory::~LLFloaterTeleportHistory()
void LLFloaterTeleportHistory::onFocusReceived()
{
// take care to enable or disable buttons depending on the selection in the places list
if(mPlacesList->getFirstSelected())
if (mPlacesList->getFirstSelected())
{
setButtonsEnabled(TRUE);
}
@@ -86,7 +85,7 @@ BOOL LLFloaterTeleportHistory::postBuild()
{
// make sure the cached pointer to the scroll list is valid
mPlacesList=getChild<LLScrollListCtrl>("places_list");
if(!mPlacesList)
if (!mPlacesList)
{
llwarns << "coud not get pointer to places list" << llendl;
return FALSE;
@@ -102,7 +101,7 @@ BOOL LLFloaterTeleportHistory::postBuild()
return TRUE;
}
void LLFloaterTeleportHistory::addEntry(std::string regionName, S16 x, S16 y, S16 z)
void LLFloaterTeleportHistory::addPendingEntry(std::string regionName, S16 x, S16 y, S16 z)
{
#ifdef LL_RRINTERFACE_H //MK
if (gRRenabled && gAgent.mRRInterface.mContainsShowloc)
@@ -110,51 +109,79 @@ void LLFloaterTeleportHistory::addEntry(std::string regionName, S16 x, S16 y, S1
return;
}
#endif //mk
// only if the cached scroll list pointer is valid
if(mPlacesList)
// Set pending entry timestamp
U32 utc_time;
utc_time = time_corrected();
struct tm* internal_time;
internal_time = utc_to_pacific_time(utc_time, gPacificDaylightTime);
// check if we are in daylight savings time
std::string timeZone = " PST";
if (gPacificDaylightTime)
{
// prepare display of position
std::string position=llformat("%d, %d, %d", x, y, z);
// prepare simstring for later parsing
std::string simString = regionName + llformat("/%d/%d/%d", x, y, z);
simString = LLWeb::escapeURL(simString);
timeZone = " PDT";
}
#ifdef LOCALIZED_TIME
timeStructToFormattedString(internal_time, gSavedSettings.getString("LongTimeFormat"), mPendingTimeString);
mPendingTimeString += timeZone;
#else
mPendingTimeString = llformat("%02d:%02d:%02d", internal_time->tm_hour, internal_time->tm_min, internal_time->tm_sec) + timeZone;
#endif
// check if we are in daylight savings time
std::string timeZone = "PST";
if(is_daylight_savings()) timeZone = "PDT";
// Set pending region name
mPendingRegionName = regionName;
// do all time related stuff as closely together as possible, because every other operation
// might change the internal tm* buffer
struct tm* internal_time;
internal_time = utc_to_pacific_time(time_corrected(), is_daylight_savings());
std::string timeString=llformat("%02d:%02d:%02d ", internal_time->tm_hour, internal_time->tm_min, internal_time->tm_sec)+timeZone;
// Set pending position
mPendingPosition = llformat("%d, %d, %d", x, y, z);
// prepare simstring for later parsing
mPendingSimString = regionName + llformat("/%d/%d/%d", x, y, z);
mPendingSimString = LLWeb::escapeURL(mPendingSimString);
// Prepare the SLURL
mPendingSLURL = LLURLDispatcher::buildSLURL(regionName, x, y, z);
}
void LLFloaterTeleportHistory::addEntry(std::string parcelName)
{
if (mPendingRegionName.empty())
{
return;
}
// only if the cached scroll list pointer is valid
if (mPlacesList)
{
// build the list entry
LLSD value;
value["id"] = id;
value["columns"][0]["column"] = "region";
value["columns"][0]["value"] = regionName;
value["columns"][1]["column"] = "position";
value["columns"][1]["value"] = position;
value["columns"][2]["column"] = "visited";
value["columns"][2]["value"] = timeString;
value["id"] = mID;
value["columns"][LIST_PARCEL]["column"] = "parcel";
value["columns"][LIST_PARCEL]["value"] = parcelName;
value["columns"][LIST_REGION]["column"] = "region";
value["columns"][LIST_REGION]["value"] = mPendingRegionName;
value["columns"][LIST_POSITION]["column"] = "position";
value["columns"][LIST_POSITION]["value"] = mPendingPosition;
value["columns"][LIST_VISITED]["column"] = "visited";
value["columns"][LIST_VISITED]["value"] = mPendingTimeString;
// these columns are hidden and serve as data storage for simstring and SLURL
value["columns"][3]["column"] = "slurl";
value["columns"][3]["value"] = LLURLDispatcher::buildSLURL(regionName, x, y, z);
value["columns"][4]["column"] = "simstring";
value["columns"][4]["value"] = simString;
value["columns"][LIST_SLURL]["column"] = "slurl";
value["columns"][LIST_SLURL]["value"] = mPendingSLURL;
value["columns"][LIST_SIMSTRING]["column"] = "simstring";
value["columns"][LIST_SIMSTRING]["value"] = mPendingSimString;
// add the new list entry on top of the list, deselect all and disable the buttons
mPlacesList->addElement(value, ADD_TOP);
mPlacesList->deselectAllItems(TRUE);
setButtonsEnabled(FALSE);
id++;
mID++;
}
else
{
llwarns << "pointer to places list is NULL" << llendl;
}
mPendingRegionName.clear();
}
void LLFloaterTeleportHistory::setButtonsEnabled(BOOL on)
@@ -185,7 +212,7 @@ void LLFloaterTeleportHistory::onPlacesSelected(LLUICtrl* /* ctrl */, void* data
LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data;
// on selection change check if we need to enable or disable buttons
if(self->mPlacesList->getFirstSelected())
if (self->mPlacesList->getFirstSelected())
{
self->setButtonsEnabled(TRUE);
}
@@ -201,7 +228,7 @@ void LLFloaterTeleportHistory::onTeleport(void* data)
LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data;
// build secondlife::/app link from simstring for instant teleport to destination
std::string slapp="secondlife:///app/teleport/" + self->mPlacesList->getFirstSelected()->getColumn(4)->getValue().asString();
std::string slapp = "secondlife:///app/teleport/" + self->mPlacesList->getFirstSelected()->getColumn(LIST_SIMSTRING)->getValue().asString();
LLMediaCtrl* web = NULL;
LLURLDispatcher::dispatch(slapp, web, TRUE);
}
@@ -212,7 +239,7 @@ void LLFloaterTeleportHistory::onShowOnMap(void* data)
LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data;
// get simstring from selected entry and parse it for its components
std::string simString = self->mPlacesList->getFirstSelected()->getColumn(4)->getValue().asString();
std::string simString = self->mPlacesList->getFirstSelected()->getColumn(LIST_SIMSTRING)->getValue().asString();
std::string region = "";
S32 x = 128;
S32 y = 128;
@@ -231,6 +258,6 @@ void LLFloaterTeleportHistory::onCopySLURL(void* data)
LLFloaterTeleportHistory* self = (LLFloaterTeleportHistory*) data;
// get SLURL of the selected entry and copy it to the clipboard
std::string SLURL=self->mPlacesList->getFirstSelected()->getColumn(3)->getValue().asString();
std::string SLURL = self->mPlacesList->getFirstSelected()->getColumn(LIST_SLURL)->getValue().asString();
gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(SLURL));
}

View File

@@ -45,39 +45,54 @@
class LLFloaterTeleportHistory : public LLFloater
{
public:
LLFloaterTeleportHistory();
virtual ~LLFloaterTeleportHistory();
public:
LLFloaterTeleportHistory();
virtual ~LLFloaterTeleportHistory();
/// @brief: reimplemented to check for selection changes in the places list scrolllist
virtual void onFocusReceived();
/// @brief: reimplemented to check for selection changes in the places list scrolllist
virtual void onFocusReceived();
/// @brief: reimplemented to make the menu toggle work
virtual void onClose(bool app_quitting);
/// @brief: reimplemented to make the menu toggle work
virtual void onClose(bool app_quitting);
/// @brief: reimplemented to prevent this floater from closing while the viewer is shutting down
virtual BOOL canClose();
/// @brief: reimplemented to prevent this floater from closing while the viewer is shutting down
virtual BOOL canClose();
BOOL postBuild();
BOOL postBuild();
/// @brief: adds a teleport destination to the list of visited places
void addEntry(std::string regionName, S16 x, S16 y, S16 z);
/// @brief: adds the pending teleport destination
void addPendingEntry(std::string regionName, S16 x, S16 y, S16 z);
/// @brief: adds the destination to the list of visited places
void addEntry(std::string parcelName);
protected:
static void onPlacesSelected(LLUICtrl* ctrl, void* data);
static void onTeleport(void* data);
static void onShowOnMap(void* data);
static void onCopySLURL(void* data);
private:
enum HISTORY_COLUMN_ORDER
{
LIST_PARCEL,
LIST_REGION,
LIST_POSITION,
LIST_VISITED,
LIST_SLURL,
LIST_SIMSTRING
};
/// @brief: enables or disables the "Teleport", "Show On Map" and "Copy To SLURL" buttons **/
void setButtonsEnabled(BOOL on);
static void onPlacesSelected(LLUICtrl* ctrl, void* data);
static void onTeleport(void* data);
static void onShowOnMap(void* data);
static void onCopySLURL(void* data);
LLScrollListCtrl* mPlacesList;
/// @brief: enables or disables the "Teleport", "Show On Map" and "Copy To SLURL" buttons **/
void setButtonsEnabled(BOOL on);
S32 id;
LLScrollListCtrl* mPlacesList;
/// @brief: to see if this was the first time setVisible() was called (at program startup)
BOOL firstRun;
S32 mID;
std::string mPendingRegionName;
std::string mPendingPosition;
std::string mPendingSimString;
std::string mPendingTimeString;
std::string mPendingSLURL;
};
// globals

View File

@@ -61,9 +61,7 @@
#include "llviewermenu.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llviewerimage.h"
#include "llworldmap.h"
#include "llworldmapmessage.h"
#include "llworldmapview.h"
#include "lluictrlfactory.h"
#include "llappviewer.h"
@@ -81,12 +79,6 @@
//---------------------------------------------------------------------------
static const F32 MAP_ZOOM_TIME = 0.2f;
// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed
// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across
// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit.
// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
static const S32 MAX_VISIBLE_REGIONS = 512;
enum EPanDirection
{
PAN_UP,
@@ -186,6 +178,14 @@ void* LLFloaterWorldMap::createWorldMapView(void* data)
BOOL LLFloaterWorldMap::postBuild()
{
// The following callback syncs the worlmap tabs with the images.
// Commented out since it was crashing when LLWorldMap became a singleton.
// We should be fine without it but override the onOpen method and put it
// there if it turns out to be needed. -MG
//
//onCommitBackground((void*)this, false);
mPanel = getChild<LLPanel>("objects_mapview");
childSetCommitCallback("friend combo", onAvatarComboCommit, this);
@@ -292,8 +292,14 @@ void LLFloaterWorldMap::show(void*, BOOL center_on_target)
}
map_panel->updateVisibleBlocks();
// Reload items as they may have changed
LLWorldMap::getInstance()->reloadItems();
// Reload the agent positions when we show the window
LLWorldMap::getInstance()->eraseItems();
// Reload any maps that may have changed
LLWorldMap::getInstance()->clearSimFlags();
const bool request_from_sim = true;
LLWorldMap::getInstance()->setCurrentLayer(0, request_from_sim);
// We may already have a bounding box for the regions of the world,
// so use that to adjust the view.
@@ -327,7 +333,9 @@ void LLFloaterWorldMap::show(void*, BOOL center_on_target)
// static
void LLFloaterWorldMap::reloadIcons(void*)
{
LLWorldMap::getInstance()->reloadItems();
LLWorldMap::getInstance()->eraseItems();
LLWorldMap::getInstance()->sendMapLayerRequest();
}
@@ -365,7 +373,7 @@ void LLFloaterWorldMap::setVisible( BOOL visible )
if( !visible )
{
// While we're not visible, discard the image tiles and overlays
// While we're not visible, discard the overlay images we're using
LLWorldMap::getInstance()->clearImageRefs();
}
}
@@ -402,6 +410,12 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
void LLFloaterWorldMap::reshape( S32 width, S32 height, BOOL called_from_parent )
{
LLFloater::reshape( width, height, called_from_parent );
// Might have changed size of world display area
// JC: Technically, this is correct, but it makes the slider "pop"
// if you resize the window, then draw the slider. Just leaving it
// the way it was when you opened the window seems better.
// adjustZoomSliderBounds();
}
@@ -480,7 +494,7 @@ void LLFloaterWorldMap::draw()
childSetEnabled("Teleport", (BOOL)tracking_status);
// childSetEnabled("Clear", (BOOL)tracking_status);
childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->isTracking());
childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation);
childSetEnabled("copy_slurl", (mSLURL.size() > 0) );
setMouseOpaque(TRUE);
@@ -501,18 +515,6 @@ void LLFloaterWorldMap::draw()
F32 map_scale = 256.f*pow(2.f, mCurZoomVal);
LLWorldMapView::setScale( map_scale );
// Enable/disable checkboxes depending on the zoom level
// If above threshold level (i.e. low res) -> Disable all checkboxes
// If under threshold level (i.e. high res) -> Enable all checkboxes
bool enable = LLWorldMapView::showRegionInfo();
childSetEnabled("people_chk", enable);
childSetEnabled("infohub_chk", enable);
childSetEnabled("telehubchk", enable);
childSetEnabled("land_for_sale_chk", enable);
childSetEnabled("event_chk", enable);
childSetEnabled("event_mature_chk", enable);
childSetEnabled("event_adult_chk", enable);
LLFloater::draw();
}
@@ -600,14 +602,14 @@ void LLFloaterWorldMap::trackLandmark( const LLUUID& landmark_item_id )
void LLFloaterWorldMap::trackEvent(const LLItemInfo &event_info)
{
mTrackedStatus = LLTracker::TRACKING_LOCATION;
LLTracker::trackLocation(event_info.getGlobalPosition(), event_info.getName(), event_info.getToolTip(), LLTracker::LOCATION_EVENT);
LLTracker::trackLocation(event_info.mPosGlobal, event_info.mName, event_info.mToolTip, LLTracker::LOCATION_EVENT);
setDefaultBtn("Teleport");
}
void LLFloaterWorldMap::trackGenericItem(const LLItemInfo &item)
{
mTrackedStatus = LLTracker::TRACKING_LOCATION;
LLTracker::trackLocation(item.getGlobalPosition(), item.getName(), item.getToolTip(), LLTracker::LOCATION_ITEM);
LLTracker::trackLocation(item.mPosGlobal, item.mName, item.mToolTip, LLTracker::LOCATION_ITEM);
setDefaultBtn("Teleport");
}
@@ -616,27 +618,29 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
if (!sim_info)
{
// We haven't found a region for that point yet, leave the tracking to the world map
LLWorldMap::getInstance()->setTracking(pos_global);
LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
LLWorldMap::getInstance()->mInvalidLocation = FALSE;
LLWorldMap::getInstance()->mUnknownLocation = pos_global;
LLTracker::stopTracking(NULL);
S32 world_x = S32(pos_global.mdV[0] / 256);
S32 world_y = S32(pos_global.mdV[1] / 256);
LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
LLWorldMap::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
setDefaultBtn("");
return;
}
if (sim_info->isDown())
if (sim_info->mAccess == SIM_ACCESS_DOWN)
{
// Down region. Show the blue circle of death!
// i.e. let the world map that this and tell it it's invalid
LLWorldMap::getInstance()->setTracking(pos_global);
LLWorldMap::getInstance()->setTrackingInvalid();
// Down sim. Show the blue circle of death!
LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
LLWorldMap::getInstance()->mUnknownLocation = pos_global;
LLWorldMap::getInstance()->mInvalidLocation = TRUE;
LLTracker::stopTracking(NULL);
setDefaultBtn("");
return;
}
std::string sim_name = sim_info->getName();
std::string sim_name;
LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name );
F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
std::string full_name = llformat("%s (%d, %d, %d)",
@@ -651,7 +655,9 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
std::string tooltip("");
mTrackedStatus = LLTracker::TRACKING_LOCATION;
LLTracker::trackLocation(pos_global, full_name, tooltip);
LLWorldMap::getInstance()->cancelTracking(); // The floater is taking over the tracking
LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
setDefaultBtn("Teleport");
}
@@ -780,9 +786,9 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3
// pass sim name to combo box
gFloaterWorldMap->mCompletingRegionName = region_name;
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name);
LLWorldMap::getInstance()->sendNamedRegionRequest(region_name);
LLStringUtil::toLower(gFloaterWorldMap->mCompletingRegionName);
LLWorldMap::getInstance()->setTrackingCommit();
LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
}
}
@@ -963,7 +969,7 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
{
childSetValue("spin z", 0);
}
LLWorldMap::getInstance()->cancelTracking();
LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
mCompletingRegionName = "";
mExactMatch = FALSE;
}
@@ -1000,17 +1006,17 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui)
// can see the whole world, plus a little.
void LLFloaterWorldMap::adjustZoomSliderBounds()
{
// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed
// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across
// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit.
// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
S32 world_width_regions = MAX_VISIBLE_REGIONS;
S32 world_height_regions = MAX_VISIBLE_REGIONS;
// World size in regions
S32 world_width_regions = LLWorldMap::getInstance()->getWorldWidth() / REGION_WIDTH_UNITS;
S32 world_height_regions = LLWorldMap::getInstance()->getWorldHeight() / REGION_WIDTH_UNITS;
// Pad the world size a little bit, so we have a nice border on
// the edge
world_width_regions++;
world_height_regions++;
// Find how much space we have to display the world
LLWorldMapView* map_panel;
map_panel = (LLWorldMapView*)mPanel;
LLRect view_rect = map_panel->getRect();
LLRect view_rect = mPanel->getRect();
// View size in pixels
S32 view_width = view_rect.getWidth();
@@ -1259,16 +1265,16 @@ void LLFloaterWorldMap::onLocationCommit( void* userdata )
LLStringUtil::toLower(str);
gFloaterWorldMap->mCompletingRegionName = str;
LLWorldMap::getInstance()->setTrackingCommit();
LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
self->mExactMatch = FALSE;
if (str.length() >= 3)
{
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str);
LLWorldMap::getInstance()->sendNamedRegionRequest(str);
}
else
{
str += "#";
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str);
LLWorldMap::getInstance()->sendNamedRegionRequest(str);
}
}
@@ -1279,7 +1285,7 @@ void LLFloaterWorldMap::onClearBtn(void* data)
LLFloaterWorldMap* self = (LLFloaterWorldMap*)data;
self->mTrackedStatus = LLTracker::TRACKING_NOTHING;
LLTracker::stopTracking((void *)(intptr_t)TRUE);
LLWorldMap::getInstance()->cancelTracking();
LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
self->mSLURL = ""; // Clear the SLURL since it's invalid
self->mSetToUserPosition = TRUE; // Revert back to the current user position
}
@@ -1354,9 +1360,9 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();
}
}
else if(LLWorldMap::getInstance()->isTracking())
else if(LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
{
pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();;
pos_global = LLWorldMap::getInstance()->mUnknownLocation - gAgent.getCameraPositionGlobal();;
}
else
{
@@ -1364,8 +1370,8 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
pos_global.clearVec();
}
LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)),
-llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)),
LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sPixelsPerMeter)),
-llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sPixelsPerMeter)),
!animate);
mWaitingForTracker = FALSE;
}
@@ -1558,27 +1564,28 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
BOOL match_found = FALSE;
S32 num_results = 0;
std::map<U64, LLSimInfo*>::const_iterator it;
for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
{
LLSimInfo* info = it->second;
std::string sim_name_lower = info->getName();
LLSimInfo* info = (*it).second;
std::string sim_name = info->mName;
std::string sim_name_lower = sim_name;
LLStringUtil::toLower(sim_name_lower);
if (sim_name_lower.substr(0, name_length) == mCompletingRegionName)
{
if (LLWorldMap::getInstance()->isTrackingCommit())
if (LLWorldMap::getInstance()->mIsTrackingCommit)
{
if (info->isName(mCompletingRegionName))
if (sim_name_lower == mCompletingRegionName)
{
selected_value = info->getName();
selected_value = sim_name;
match_found = TRUE;
}
}
LLSD value;
value["id"] = info->getName();
value["id"] = sim_name;
value["columns"][0]["column"] = "sim_name";
value["columns"][0]["value"] = info->getName();
value["columns"][0]["value"] = sim_name;
list->addElement(value);
num_results++;
}
@@ -1645,13 +1652,15 @@ void LLFloaterWorldMap::onCommitSearchResult(LLUICtrl*, void* userdata)
LLStringUtil::toLower(sim_name);
std::map<U64, LLSimInfo*>::const_iterator it;
for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
{
LLSimInfo* info = it->second;
LLSimInfo* info = (*it).second;
std::string info_sim_name = info->mName;
LLStringUtil::toLower(info_sim_name);
if (info->isName(sim_name))
if (sim_name == info_sim_name)
{
LLVector3d pos_global = info->getGlobalOrigin();
LLVector3d pos_global = from_region_handle( info->mHandle );
F64 local_x = self->childGetValue("spin x");
F64 local_y = self->childGetValue("spin y");
F64 local_z = self->childGetValue("spin z");

View File

@@ -50,6 +50,7 @@ class LLInventoryModel;
class LLInventoryObserver;
class LLItemInfo;
class LLTabContainer;
class LLWorldMapView;
class LLFloaterWorldMap : public LLFloater
{
@@ -111,7 +112,7 @@ public:
// teleport to the tracked item, if there is one
void teleport();
private:
protected:
static void onPanBtn( void* userdata );
static void onGoHome(void* data);
@@ -158,10 +159,10 @@ private:
void cacheLandmarkPosition();
private:
LLPanel* mPanel; // Panel displaying the map
// Ties to LLWorldMapView::sMapScale, in pixels per region
protected:
LLPanel* mPanel; // Panel displaying the map
// Sets sMapScale, in pixels per region
F32 mCurZoomVal;
LLFrameTimer mZoomTimer;

View File

@@ -180,7 +180,7 @@
#include "llweb.h"
#include "llwind.h"
#include "llworld.h"
#include "llworldmapmessage.h"
#include "llworldmap.h"
#include "llxfermanager.h"
#include "pipeline.h"
#include "llappviewer.h"
@@ -1781,6 +1781,8 @@ bool idle_startup()
if(!map_server_url.empty())
{
gSavedSettings.setString("MapServerURL", map_server_url);
LLWorldMap::gotMapServerURL(true);
llinfos << "Got Map server URL: " << map_server_url << llendl;
}
// Override grid info with anything sent in the login response
@@ -3564,8 +3566,9 @@ void register_viewer_callbacks(LLMessageSystem* msg)
msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply);
msg->setHandlerFunc("MapBlockReply", LLWorldMapMessage::processMapBlockReply);
msg->setHandlerFunc("MapItemReply", LLWorldMapMessage::processMapItemReply);
msg->setHandlerFunc("MapLayerReply", LLWorldMap::processMapLayerReply);
msg->setHandlerFunc("MapBlockReply", LLWorldMap::processMapBlockReply);
msg->setHandlerFunc("MapItemReply", LLWorldMap::processMapItemReply);
msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply);
msg->setHandlerFunc("PickInfoReply", LLPanelPick::processPickInfoReply);

View File

@@ -44,7 +44,7 @@
#include "llstartup.h" // gStartupState
#include "llurlsimstring.h"
#include "llweb.h"
#include "llworldmapmessage.h"
#include "llworldmap.h"
// library includes
#include "llsd.h"
@@ -243,7 +243,7 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, bool right_mous
url_displayp->setName(region_name);
// Request a region handle by name
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
LLURLDispatcherImpl::regionNameCallback,
url,
false); // don't teleport
@@ -282,7 +282,7 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::strin
LLVector3d global_pos = from_region_handle(region_handle) + LLVector3d(local_pos);
U64 new_region_handle = to_region_handle(global_pos);
LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle,
LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle,
LLURLDispatcherImpl::regionHandleCallback,
url, teleport);
}
@@ -401,7 +401,7 @@ public:
{
url += tokens[i].asString() + "/";
}
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
LLURLDispatcherImpl::regionHandleCallback,
url,
true); // teleport

View File

@@ -1029,6 +1029,9 @@ void init_client_menu(LLMenuGL* menu)
// </dogmode>
menu->append(new LLMenuItemCallGL("Clear Group Cache",
LLGroupMgr::debugClearAllGroups));
menu->append(new LLMenuItemCheckGL("Use Web Map Tiles", menu_toggle_control, NULL, menu_check_control, (void*)"UseWebMapTiles"));
menu->appendSeparator();
sub_menu = new LLMenuGL("Rendering");
@@ -3571,7 +3574,8 @@ void set_god_level(U8 god_level)
LLFloaterDirectory::requestClassifieds();
// God mode changes region visibility
LLWorldMap::getInstance()->reloadItems(true);
LLWorldMap::getInstance()->reset();
LLWorldMap::getInstance()->setCurrentLayer(0);
// inventory in items may change in god mode
gObjectList.dirtyAllObjectInventory();

View File

@@ -3748,7 +3748,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
}
// add teleport destination to the list of visited places
gFloaterTeleportHistory->addEntry(regionp->getName(),(S16)agent_pos.mV[0],(S16)agent_pos.mV[1],(S16)agent_pos.mV[2]);
gFloaterTeleportHistory->addPendingEntry(regionp->getName(), (S16)agent_pos.mV[VX], (S16)agent_pos.mV[VY], (S16)agent_pos.mV[VZ]);
}
else
{

View File

@@ -2778,11 +2778,11 @@ LLViewerInventoryItem* LLViewerObject::getInventoryItemByAsset(const LLUUID& ass
for( ; it != end; ++it)
{
LLInventoryObject* obj = *it;
if(obj->getType() != LLAssetType::AT_CATEGORY)
if (obj && obj->getType() != LLAssetType::AT_CATEGORY && obj->getType() != LLAssetType::AT_NONE)
{
// *FIX: gank-ass down cast!
item = (LLViewerInventoryItem*)obj;
if(item->getAssetUUID() == asset_id)
if (item && item->getAssetUUID() == asset_id)
{
rv = item;
break;

View File

@@ -53,6 +53,7 @@
#include "llfloatergroups.h"
//#include "llfloaterhtml.h"
#include "llfloatersellland.h"
#include "llfloaterteleporthistory.h"
#include "llfloatertools.h"
#include "llnotify.h"
#include "llparcelselection.h"
@@ -1518,6 +1519,9 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
}
// Add any pending entry to the TP history now that we got the *new* parcel name.
gFloaterTeleportHistory->addEntry(LLViewerParcelMgr::getInstance()->getAgentParcelName());
// Handle updating selections, if necessary.
if (sequence_id == SELECTED_PARCEL_SEQ_ID)
{

View File

@@ -1949,6 +1949,7 @@ BOOL LLVOAvatar::buildSkeleton(const LLVOAvatarSkeletonInfo *info)
LLVector3 scale(1.f, aspect, 1.f);
mScreenp->setScale(scale);
mScreenp->setWorldPosition(LLVector3::zero);
mScreenp->mUpdateXform = TRUE;
}
return TRUE;

File diff suppressed because it is too large Load Diff

View File

@@ -33,245 +33,221 @@
#ifndef LL_LLWORLDMAP_H
#define LL_LLWORLDMAP_H
#include "llworldmipmap.h"
#include <map>
#include <string>
#include <vector>
#include "v3math.h"
#include "v3dmath.h"
#include "llframetimer.h"
#include "llmapimagetype.h"
#include "llworldmipmap.h"
#include "lluuid.h"
#include "llmemory.h"
#include "llviewerregion.h"
#include "llviewerimage.h"
#include "lleventinfo.h"
#include "v3color.h"
class LLMessageSystem;
// Description of objects like hubs, events, land for sale, people and more (TBD).
// Note: we don't store a "type" in there so we need to store instances of this class in
// well known objects (i.e. list of objects which type is "well known").
class LLItemInfo
{
public:
LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id);
LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id, S32 extra = 0, S32 extra2 = 0);
// Setters
void setTooltip(std::string& tooltip) { mToolTip = tooltip; }
void setElevation(F64 z) { mPosGlobal.mdV[VZ] = z; }
void setCount(S32 count) { mCount = count; }
// void setSelected(bool selected) { mSelected = selected; }
// void setColor(LLColor4 color) { mColor = color; }
// Accessors
const LLVector3d& getGlobalPosition() const { return mPosGlobal; }
const std::string& getName() const { return mName; }
const std::string& getToolTip() const { return mToolTip; }
const LLUUID& getUUID() const { return mID; }
S32 getCount() const { return mCount; }
U64 getRegionHandle() const { return to_region_handle(mPosGlobal); } // Build the handle on the fly
bool isName(const std::string& name) const { return (mName == name); } // True if name same as item's name
// bool isSelected() const { return mSelected; }
private:
std::string mName; // Name of the individual item
std::string mToolTip; // Tooltip : typically, something to be displayed to the user when selecting this item
LLVector3d mPosGlobal; // Global world position
LLUUID mID; // UUID of the item
S32 mCount; // Number of elements in item (e.g. people count)
// Currently not used but might prove useful one day so we comment out
// bool mSelected; // Selected or not: updated by the viewer UI, not the simulator or asset DB
// LLColor4 mColor; // Color of the item
std::string mName;
std::string mToolTip;
LLVector3d mPosGlobal;
LLUUID mID;
BOOL mSelected;
S32 mExtra;
S32 mExtra2;
U64 mRegionHandle;
};
// Info per region
// Such records are stored in a global map hold by the LLWorldMap and indexed by region handles.
// To avoid creating too many of them, they are requested in "blocks" corresponding to areas covered by the screen.
// Unfortunately, when the screen covers the whole world (zoomed out), that can translate in requesting info for
// every sim on the grid... Not good...
// To avoid this, the code implements a cut-off threshold for overlay graphics and, therefore, all LLSimInfo.
// In other words, when zooming out too much, we simply stop requesting LLSimInfo and
// LLItemInfo and just display the map tiles.
// As they are stored in different structures (LLSimInfo and LLWorldMipmap), this strategy is now workable.
#define MAP_SIM_IMAGE_TYPES 3
// 0 - Prim
// 1 - Terrain Only
// 2 - Overlay: Land For Sale
class LLSimInfo
{
public:
LLSimInfo(U64 handle);
LLSimInfo();
// Convert local region coordinates into world coordinates
LLVector3d getGlobalPos(const LLVector3& local_pos) const;
LLVector3d getGlobalPos(LLVector3 local_pos) const;
// Get the world coordinates of the SW corner of that region
LLVector3d getGlobalOrigin() const;
void clearImage(); // Clears the reference to the Land for sale image for that region
void dropImagePriority(); // Drops the boost level of the Land for sale image for that region
void updateAgentCount(F64 time); // Send an item request for agent count on that region if time's up
public:
U64 mHandle;
std::string mName;
// Setters
void setName(std::string& name) { mName = name; }
void setAccess (U32 accesscode) { mAccess = accesscode; }
void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; }
void setLandForSaleImage (LLUUID image_id);
// void setWaterHeight (F32 water_height) { mWaterHeight = water_height; }
F64 mAgentsUpdateTime;
BOOL mShowAgentLocations; // are agents visible?
// Accessors
const std::string getName() const { return mName; }
const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); }
const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); }
const std::string getShortAccessString() const { return LLViewerRegion::accessToShortString((U8)mAccess); }
U8 mAccess;
U32 mRegionFlags;
F32 mWaterHeight;
const S32 getAgentCount() const; // Compute the total agents count
LLPointer<LLViewerImage> getLandForSaleImage(); // Get the overlay image, fetch it if necessary
// <edit>
//Added this so I could get map images on opensim.
const LLUUID getMapImageID() const { return mMapImageID; }
F32 mAlpha;
bool isName(const std::string& name) const;
bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
// Image ID for the current overlay mode.
LLUUID mMapImageID[MAP_SIM_IMAGE_TYPES];
// Debug only
void dump() const; // Print the region info to the standard output
// Items lists handling
typedef std::vector<LLItemInfo> item_info_list_t;
void clearItems();
void insertTeleHub(const LLItemInfo& item) { mTelehubs.push_back(item); }
void insertInfoHub(const LLItemInfo& item) { mInfohubs.push_back(item); }
void insertPGEvent(const LLItemInfo& item) { mPGEvents.push_back(item); }
void insertMatureEvent(const LLItemInfo& item) { mMatureEvents.push_back(item); }
void insertAdultEvent(const LLItemInfo& item) { mAdultEvents.push_back(item); }
void insertLandForSale(const LLItemInfo& item) { mLandForSale.push_back(item); }
void insertLandForSaleAdult(const LLItemInfo& item) { mLandForSaleAdult.push_back(item); }
void insertAgentLocation(const LLItemInfo& item);
const LLSimInfo::item_info_list_t& getTeleHub() const { return mTelehubs; }
const LLSimInfo::item_info_list_t& getInfoHub() const { return mInfohubs; }
const LLSimInfo::item_info_list_t& getPGEvent() const { return mPGEvents; }
const LLSimInfo::item_info_list_t& getMatureEvent() const { return mMatureEvents; }
const LLSimInfo::item_info_list_t& getAdultEvent() const { return mAdultEvents; }
const LLSimInfo::item_info_list_t& getLandForSale() const { return mLandForSale; }
const LLSimInfo::item_info_list_t& getLandForSaleAdult() const { return mLandForSaleAdult; }
const LLSimInfo::item_info_list_t& getAgentLocation() const { return mAgentLocations; }
private:
U64 mHandle; // This is a hash of the X and Y world coordinates of the SW corner of the sim
std::string mName; // Region name
F64 mAgentsUpdateTime; // Time stamp giving the last time the agents information was requested for that region
bool mFirstAgentRequest; // Init agent request flag
U32 mAccess; // Down/up and maturity rating of the region
U32 mRegionFlags; // Tell us if the siminfo has been received (if non 0) and what kind of region it is (Sandbox, allow damage)
// Currently not used but might prove useful one day so we comment out
// F32 mWaterHeight; // Water height on the region (not actively used)
// Handling the "land for sale / land for auction" overlay image
LLUUID mMapImageID; // Image ID of the overlay image
LLPointer<LLViewerImage> mOverlayImage; // Reference to the overlay image
// Items for this region
// Those are data received through item requests (as opposed to block requests for the rest of the data)
item_info_list_t mTelehubs; // List of tele hubs in the region
item_info_list_t mInfohubs; // List of info hubs in the region
item_info_list_t mPGEvents; // List of PG events in the region
item_info_list_t mMatureEvents; // List of Mature events in the region
item_info_list_t mAdultEvents; // List of Adult events in the region (AO)
item_info_list_t mLandForSale; // List of Land for sales in the region
item_info_list_t mLandForSaleAdult; // List of Adult Land for sales in the region (AO)
item_info_list_t mAgentLocations; // List of agents in the region
// Hold a reference to the currently displayed image.
LLPointer<LLViewerImage> mCurrentImage;
LLPointer<LLViewerImage> mOverlayImage;
};
#define MAP_BLOCK_RES 256
struct LLWorldMapLayer
{
BOOL LayerDefined;
LLPointer<LLViewerImage> LayerImage;
LLUUID LayerImageID;
LLRect LayerExtents;
LLWorldMapLayer() : LayerDefined(FALSE) { }
};
// We request region data on the world by "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions
// This is to reduce the number of requests to the asset DB and get things in big "blocks"
const S32 MAP_MAX_SIZE = 2048;
const S32 MAP_BLOCK_SIZE = 4;
const S32 MAP_BLOCK_RES = (MAP_MAX_SIZE / MAP_BLOCK_SIZE);
class LLWorldMap : public LLSingleton<LLWorldMap>
{
public:
typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport);
LLWorldMap();
~LLWorldMap();
// Clear all: list of region info, tiles, blocks and items
// clears the list
void reset();
void clearImageRefs(); // Clears the image references
void dropImagePriorities(); // Drops the priority of the images being fetched
void reloadItems(bool force = false); // Reload the items (people, hub, etc...)
// clear the visible items
void eraseItems();
// Region Map access
typedef std::map<U64, LLSimInfo*> sim_info_map_t;
const LLWorldMap::sim_info_map_t& getRegionMap() const { return mSimInfoMap; }
void updateRegions(S32 x0, S32 y0, S32 x1, S32 y1); // Requests region info for a rectangle of regions (in grid coordinates)
// Removes references to cached images
void clearImageRefs();
// Insert a region and items in the map global instance
// Note: x_world and y_world in world coordinates (meters)
static bool insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 accesscode, U32 region_flags);
static bool insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2);
// Clears the flags indicating that we've received sim infos
// Causes a re-request of the sim info without erasing extisting info
void clearSimFlags();
// Drops the priority of the images being fetched
void dropImagePriorities();
// Get info on sims (region) : note that those methods only search the range of loaded sims (the one that are being browsed)
// *not* the entire world. So a NULL return does not mean a down or unexisting region, just an out of range region.
// Returns simulator information, or NULL if out of range
LLSimInfo* simInfoFromHandle(const U64 handle);
// Returns simulator information, or NULL if out of range
LLSimInfo* simInfoFromPosGlobal(const LLVector3d& pos_global);
// Returns simulator information for named sim, or NULL if non-existent
LLSimInfo* simInfoFromName(const std::string& sim_name);
// Gets simulator name from a global position, returns true if found
// Gets simulator name for a global position, returns true if it was found
bool simNameFromPosGlobal(const LLVector3d& pos_global, std::string& outSimName );
// Debug only
void dump(); // Print the world info to the standard output
// Sets the current layer
void setCurrentLayer(S32 layer, bool request_layer = false);
// Track handling
void cancelTracking() { mIsTrackingLocation = false; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false; }
void sendMapLayerRequest();
void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
void sendNamedRegionRequest(std::string region_name);
void sendNamedRegionRequest(std::string region_name,
url_callback_t callback,
const std::string& callback_url,
bool teleport);
void sendHandleRegionRequest(U64 region_handle,
url_callback_t callback,
const std::string& callback_url,
bool teleport);
void sendItemRequest(U32 type, U64 handle = 0);
void setTracking(const LLVector3d& loc) { mIsTrackingLocation = true; mTrackingLocation = loc; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false;}
void setTrackingInvalid() { mIsTrackingFound = true; mIsInvalidLocation = true; }
void setTrackingValid() { mIsTrackingFound = true; mIsInvalidLocation = false; }
void setTrackingDoubleClick() { mIsTrackingDoubleClick = true; }
void setTrackingCommit() { mIsTrackingCommit = true; }
static void processMapLayerReply(LLMessageSystem*, void**);
static void processMapBlockReply(LLMessageSystem*, void**);
static void processMapItemReply(LLMessageSystem*, void**);
bool isTracking() { return mIsTrackingLocation; }
bool isTrackingValidLocation() { return mIsTrackingFound && !mIsInvalidLocation; }
bool isTrackingInvalidLocation() { return mIsTrackingFound && mIsInvalidLocation; }
bool isTrackingDoubleClick() { return mIsTrackingDoubleClick; }
bool isTrackingCommit() { return mIsTrackingCommit; }
bool isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1);
static void gotMapServerURL(bool flag) { sGotMapURL = flag; }
static bool useWebMapTiles();
static LLPointer<LLViewerImage> loadObjectsTile(U32 grid_x, U32 grid_y);
LLVector3d getTrackedPositionGlobal() const { return mTrackingLocation; }
void dump();
// Extend the bounding box of the list of simulators. Returns true
// if the extents changed.
BOOL extendAABB(U32 x_min, U32 y_min, U32 x_max, U32 y_max);
// build coverage maps for telehub region visualization
void updateTelehubCoverage();
BOOL coveredByTelehub(LLSimInfo* infop);
// Bounds of the world, in meters
U32 getWorldWidth() const;
U32 getWorldHeight() const;
// World Mipmap delegation: currently used when drawing the mipmap
void equalizeBoostLevels();
LLPointer<LLViewerImage> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true) { return mWorldMipmap.getObjectsTile(grid_x, grid_y, level, load); }
LLPointer<LLViewerImage> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true) {
return mWorldMipmap.getObjectsTile(grid_x, grid_y, level, load);
}
public:
// Map from region-handle to simulator info
typedef std::map<U64, LLSimInfo*> sim_info_map_t;
sim_info_map_t mSimInfoMap;
BOOL mIsTrackingUnknownLocation, mInvalidLocation, mIsTrackingDoubleClick, mIsTrackingCommit;
LLVector3d mUnknownLocation;
bool mRequestLandForSale;
typedef std::vector<LLItemInfo> item_info_list_t;
item_info_list_t mTelehubs;
item_info_list_t mInfohubs;
item_info_list_t mPGEvents;
item_info_list_t mMatureEvents;
item_info_list_t mAdultEvents;
item_info_list_t mLandForSale;
item_info_list_t mLandForSaleAdult;
std::map<U64,S32> mNumAgents;
typedef std::map<U64, item_info_list_t> agent_list_map_t;
agent_list_map_t mAgentLocationsMap;
std::vector<LLWorldMapLayer> mMapLayers[MAP_SIM_IMAGE_TYPES];
BOOL mMapLoaded[MAP_SIM_IMAGE_TYPES];
BOOL * mMapBlockLoaded[MAP_SIM_IMAGE_TYPES];
S32 mCurrentMap;
// AABB of the list of simulators
U32 mMinX;
U32 mMaxX;
U32 mMinY;
U32 mMaxY;
U8* mNeighborMap;
U8* mTelehubCoverageMap;
S32 mNeighborMapWidth;
S32 mNeighborMapHeight;
private:
bool clearItems(bool force = false); // Clears the item lists
void clearSimFlags(); // Clears the block flags indicating that we've already requested region infos
LLWorldMipmap mWorldMipmap;
LLTimer mRequestTimer;
// Create a region record corresponding to the handle, insert it in the region map and returns a pointer
LLSimInfo* createSimInfoFromHandle(const U64 handle);
// search for named region for url processing
std::string mSLURLRegionName;
U64 mSLURLRegionHandle;
std::string mSLURL;
url_callback_t mSLURLCallback;
bool mSLURLTeleport;
// Map from region-handle to region info
sim_info_map_t mSimInfoMap;
// Holds the tiled mipmap of the world. This is the structure that contains the images used for rendering.
LLWorldMipmap mWorldMipmap;
// The World is divided in "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions that get requested at once.
// This boolean table avoids "blocks" to be requested multiple times.
// Issue: Not sure this scheme is foolproof though as I've seen
// cases where a block is never retrieved and, because of this boolean being set, never re-requested
bool * mMapBlockLoaded; // Telling us if the block of regions has been requested or not
// Track location data : used while there's nothing tracked yet by LLTracker
bool mIsTrackingLocation; // True when we're tracking a point
bool mIsTrackingFound; // True when the tracking position has been found, valid or not
bool mIsInvalidLocation; // The region is down or the location does not correspond to an existing region
bool mIsTrackingDoubleClick; // User double clicked to set the location (i.e. teleport when found please...)
bool mIsTrackingCommit; // User used the search or landmark fields to set the location
LLVector3d mTrackingLocation; // World global position being tracked
// General grid items request timing flags (used for events,hubs and land for sale)
LLTimer mRequestTimer;
bool mFirstRequest;
static bool sGotMapURL;
};
#endif

View File

@@ -1,274 +0,0 @@
/**
* @file llworldmapmessage.cpp
* @brief Handling of the messages to the DB made by and for the world map.
*
* $LicenseInfo:firstyear=2003&license=viewergpl$
*
* Copyright (c) 2003-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llworldmapmessage.h"
#include "llworldmap.h"
#include "llagent.h"
#include "llfloaterworldmap.h"
#include "llviewernetwork.h" //for isInProductionGrid()
#include "hippogridmanager.h"
const U32 LAYER_FLAG = 2;
//---------------------------------------------------------------------------
// World Map Message Handling
//---------------------------------------------------------------------------
LLWorldMapMessage::LLWorldMapMessage() :
mSLURLRegionName(),
mSLURLRegionHandle(0),
mSLURL(),
mSLURLCallback(0),
mSLURLTeleport(false)
{
}
LLWorldMapMessage::~LLWorldMapMessage()
{
}
void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle)
{
//LL_INFOS("World Map") << "Send item request : type = " << type << LL_ENDL;
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_MapItemRequest);
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG);
msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
msg->nextBlockFast(_PREHASH_RequestData);
msg->addU32Fast(_PREHASH_ItemType, type);
msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim
gAgent.sendReliableMessage();
}
void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name)
{
//LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL;
LLMessageSystem* msg = gMessageSystem;
// Request for region data
msg->newMessageFast(_PREHASH_MapNameRequest);
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG);
msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
msg->nextBlockFast(_PREHASH_NameData);
msg->addStringFast(_PREHASH_Name, region_name);
gAgent.sendReliableMessage();
}
void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name,
url_callback_t callback,
const std::string& callback_url,
bool teleport) // immediately teleport when result returned
{
//LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL;
mSLURLRegionName = region_name;
mSLURLRegionHandle = 0;
mSLURL = callback_url;
mSLURLCallback = callback;
mSLURLTeleport = teleport;
sendNamedRegionRequest(region_name);
}
void LLWorldMapMessage::sendHandleRegionRequest(U64 region_handle,
url_callback_t callback,
const std::string& callback_url,
bool teleport) // immediately teleport when result returned
{
//LL_INFOS("World Map") << "LLWorldMap::sendHandleRegionRequest()" << LL_ENDL;
mSLURLRegionName.clear();
mSLURLRegionHandle = region_handle;
mSLURL = callback_url;
mSLURLCallback = callback;
mSLURLTeleport = teleport;
U32 global_x;
U32 global_y;
from_region_handle(region_handle, &global_x, &global_y);
U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS);
U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS);
sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true);
}
void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
{
//LL_INFOS("World Map") << "LLWorldMap::sendMapBlockRequest()" << ", min = (" << min_x << ", " << min_y << "), max = (" << max_x << ", " << max_y << "), nonexistent = " << return_nonexistent << LL_ENDL;
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_MapBlockRequest);
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
U32 flags = LAYER_FLAG;
flags |= (return_nonexistent ? 0x10000 : 0);
msg->addU32Fast(_PREHASH_Flags, flags);
msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
msg->nextBlockFast(_PREHASH_PositionData);
msg->addU16Fast(_PREHASH_MinX, min_x);
msg->addU16Fast(_PREHASH_MinY, min_y);
msg->addU16Fast(_PREHASH_MaxX, max_x);
msg->addU16Fast(_PREHASH_MaxY, max_y);
gAgent.sendReliableMessage();
}
// public static
void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
{
U32 agent_flags;
msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
// There's only one flag that we ever use here
if (agent_flags != LAYER_FLAG
&& gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE)
{
llwarns << "Invalid map image type returned! layer = " << agent_flags << llendl;
return;
}
S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
//LL_INFOS("World Map") << "LLWorldMap::processMapBlockReply(), num_blocks = " << num_blocks << LL_ENDL;
bool found_null_sim = false;
for (S32 block=0; block<num_blocks; ++block)
{
U16 x_regions;
U16 y_regions;
std::string name;
U8 accesscode;
U32 region_flags;
// U8 water_height;
// U8 agents;
LLUUID image_id;
msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
// msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
// msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
U32 x_world = (U32)(x_regions) * REGION_WIDTH_UNITS;
U32 y_world = (U32)(y_regions) * REGION_WIDTH_UNITS;
// Insert that region in the world map, if failure, flag it as a "null_sim"
if (!(LLWorldMap::getInstance()->insertRegion(x_world, y_world, name, image_id, (U32)accesscode, region_flags)))
{
found_null_sim = true;
}
// If we hit a valid tracking location, do what needs to be done app level wise
if (LLWorldMap::getInstance()->isTrackingValidLocation())
{
LLVector3d pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal();
if (LLWorldMap::getInstance()->isTrackingDoubleClick())
{
// Teleport if the user double clicked
gAgent.teleportViaLocation(pos_global);
}
// Update the "real" tracker information
gFloaterWorldMap->trackLocation(pos_global);
}
// Handle the SLURL callback if any
if(LLWorldMapMessage::getInstance()->mSLURLCallback != NULL)
{
U64 handle = to_region_handle(x_world, y_world);
// Check if we reached the requested region
if ((LLStringUtil::compareInsensitive(LLWorldMapMessage::getInstance()->mSLURLRegionName, name)==0)
|| (LLWorldMapMessage::getInstance()->mSLURLRegionHandle == handle))
{
url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback;
LLWorldMapMessage::getInstance()->mSLURLCallback = NULL;
LLWorldMapMessage::getInstance()->mSLURLRegionName.clear();
LLWorldMapMessage::getInstance()->mSLURLRegionHandle = 0;
callback(handle, LLWorldMapMessage::getInstance()->mSLURL, image_id, LLWorldMapMessage::getInstance()->mSLURLTeleport);
}
}
// <edit>
if(LLAgent::lure_show)
{
if((x_regions == LLAgent::lure_global_x) && (y_regions == LLAgent::lure_global_y))
{
gAgent.onFoundLureDestination();
}
}
// </edit>
}
// Tell the UI to update itself
gFloaterWorldMap->updateSims(found_null_sim);
}
// public static
void LLWorldMapMessage::processMapItemReply(LLMessageSystem* msg, void**)
{
//LL_INFOS("World Map") << "LLWorldMap::processMapItemReply()" << LL_ENDL;
U32 type;
msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type);
S32 num_blocks = msg->getNumberOfBlocks("Data");
for (S32 block=0; block<num_blocks; ++block)
{
U32 X, Y;
std::string name;
S32 extra, extra2;
LLUUID uuid;
msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block);
msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block);
msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block);
msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block);
msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block);
LLWorldMap::getInstance()->insertItem(X, Y, name, uuid, type, extra, extra2);
}
}

View File

@@ -1,82 +0,0 @@
/**
* @file llworldmapmessage.h
* @brief Handling of the messages to the DB made by and for the world map.
*
* $LicenseInfo:firstyear=2003&license=viewergpl$
*
* Copyright (c) 2003-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef LL_LLWORLDMAPMESSAGE_H
#define LL_LLWORLDMAPMESSAGE_H
// Handling of messages (send and process) as well as SLURL callback if necessary
class LLMessageSystem;
class LLWorldMapMessage : public LLSingleton<LLWorldMapMessage>
{
public:
typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport);
LLWorldMapMessage();
~LLWorldMapMessage();
// Process incoming answers to map stuff requests
static void processMapBlockReply(LLMessageSystem*, void**);
static void processMapItemReply(LLMessageSystem*, void**);
// Request data for all regions in a rectangular area. Coordinates in grids (i.e. meters / 256).
void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
// Various methods to request LLSimInfo data to the simulator and asset DB
void sendNamedRegionRequest(std::string region_name);
void sendNamedRegionRequest(std::string region_name,
url_callback_t callback,
const std::string& callback_url,
bool teleport);
void sendHandleRegionRequest(U64 region_handle,
url_callback_t callback,
const std::string& callback_url,
bool teleport);
// Request item data for regions
// Note: the handle works *only* when requesting agent count (type = MAP_ITEM_AGENT_LOCATIONS). In that case,
// the request will actually be transitting through the spaceserver (all that is done on the sim).
// All other values of type do create a global grid request to the asset DB. So no need to try to get, say,
// the events for one particular region. For such a request, the handle is ignored.
void sendItemRequest(U32 type, U64 handle = 0);
private:
// Search for region (by name or handle) for SLURL processing and teleport
// None of this relies explicitly on the LLWorldMap instance so better handle it here
std::string mSLURLRegionName;
U64 mSLURLRegionHandle;
std::string mSLURL;
url_callback_t mSLURLCallback;
bool mSLURLTeleport;
};
#endif // LL_LLWORLDMAPMESSAGE_H

File diff suppressed because it is too large Load Diff

View File

@@ -39,14 +39,21 @@
#define LL_LLWORLDMAPVIEW_H
#include "llpanel.h"
#include "llworldmap.h"
#include "v3math.h"
#include "v3dmath.h"
#include "v4color.h"
#include "llviewerimage.h"
#include "llmapimagetype.h"
#include "llworldmap.h"
class LLItemInfo;
const S32 DEFAULT_TRACKING_ARROW_SIZE = 16;
class LLUUID;
class LLVector3d;
class LLVector3;
class LLColor4;
class LLColor4U;
class LLCoordGL;
class LLViewerImage;
class LLTextBox;
@@ -71,27 +78,25 @@ public:
bool checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track);
void handleClick(S32 x, S32 y, MASK mask, S32* hit_type, LLUUID* id);
// Scale and pan are shared across all instances! (i.e. Terrain and Objects maps are always registered)
// Scale and pan are shared across all instances.
static void setScale( F32 scale );
static void translatePan( S32 delta_x, S32 delta_y );
static void setPan( S32 x, S32 y, BOOL snap = TRUE );
// Return true if the current scale level is above the threshold for accessing region info
static bool showRegionInfo();
LLVector3 globalPosToView(const LLVector3d& global_pos);
LLVector3d viewPosToGlobal(S32 x,S32 y);
virtual void draw();
void drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image);
void drawTiles(S32 width, S32 height);
void drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image);
void drawGenericItem(const LLItemInfo& item, LLUIImagePtr image);
void drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color = LLColor4::white);
void drawImageStack(const LLVector3d& global_pos, LLUIImagePtr image, U32 count, F32 offset, const LLColor4& color);
void drawAgents();
void drawItems();
void drawEvents();
void drawFrustum();
void drawClassicMap();
void drawMipmap(S32 width, S32 height);
bool drawMipmapLevel(S32 width, S32 height, S32 level, bool load = true);
bool drawMipmapLevel(S32 width, S32 height, S32 level, bool load = true);
static void cleanupTextures();
@@ -107,7 +112,7 @@ public:
F32 y_pixels,
const LLColor4& color,
F32 relative_z = 0.f,
F32 dot_radius = 5.f);
F32 dot_radius = 3.f);
static void drawTrackingCircle( const LLRect& rect, S32 x, S32 y,
const LLColor4& color,
@@ -128,7 +133,9 @@ public:
static void clearLastClick() { sHandledLastClick = FALSE; }
// if the view changes, download additional sim info as needed
void updateVisibleBlocks();
// return value is number of blocks newly requested.
U32 updateBlock(S32 block_x, S32 block_y);
U32 updateVisibleBlocks();
protected:
void setDirectionPos( LLTextBox* text_box, F32 rotation );
@@ -143,7 +150,6 @@ public:
static LLUIImagePtr sAvatarLevelImage;
static LLUIImagePtr sAvatarAboveImage;
static LLUIImagePtr sAvatarBelowImage;
static LLUIImagePtr sTelehubImage;
static LLUIImagePtr sInfohubImage;
static LLUIImagePtr sHomeImage;
@@ -156,6 +162,10 @@ public:
static LLUIImagePtr sForSaleImage;
static LLUIImagePtr sForSaleAdultImage;
static F32 sThresholdA;
static F32 sThresholdB;
static F32 sPixelsPerMeter; // world meters to map pixels
static F32 sMapScale; // scale = size of a region in pixels
BOOL mItemPicked;
@@ -166,7 +176,7 @@ public:
static F32 sTargetPanY; // in pixels
static S32 sTrackingArrowX;
static S32 sTrackingArrowY;
static bool sVisibleTilesLoaded;
static bool sVisibleTilesLoaded;
// Are we mid-pan from a user drag?
BOOL mPanning;
@@ -189,14 +199,10 @@ public:
static BOOL sHandledLastClick;
S32 mSelectIDStart;
// Keep the list of regions that are displayed on screen. Avoids iterating through the whole region map after draw().
typedef std::vector<U64> handle_list_t;
handle_list_t mVisibleRegions; // set every frame
static std::map<std::string,std::string> sStringsMap;
private:
void drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right);
};
#endif

View File

@@ -38,10 +38,6 @@
#include "llviewerimagelist.h"
#include "math.h" // log()
#include "llworldmap.h"
#include "llviewernetwork.h" //for isProductionGrid();
#include "hippogridmanager.h"
// Turn this on to output tile stats in the standard output
#define DEBUG_TILES_STAT 0
@@ -157,23 +153,7 @@ LLPointer<LLViewerImage> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S
if (load)
{
// Load it
LLPointer<LLViewerImage> img;
//hack for opensims.
if(gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE)
img = loadObjectsTile(grid_x, grid_y, level);
else
{
LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
if(info)
{
img = gImageList.getImage(info->getMapImageID(), MIPMAP_TRUE, FALSE);
img->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP);
}
else
return NULL;
}
// </edit>
LLPointer<LLViewerImage> img = loadObjectsTile(grid_x, grid_y, level);
// Insert the image in the map
level_mipmap.insert(sublevel_tiles_t::value_type( handle, img ));
// Find the element again in the map (it's there now...)

View File

@@ -1,46 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="false"
min_width="470" min_height="250" width="470" height="250" name="teleporthistory"
rect_control="FloaterTeleportHistoryRect" title="Teleport History">
<tab_container label="TPlistTabs" bottom="40" height="185" left="5" mouse_opaque="false" name="tplisttabs"
tab_min_width="50" tab_position="top" width="460" bg_opaque_color="0,0,0,0.0">
<panel border="true" bottom="-185" follows="left|top|right|bottom" height="185"
label="Teleported into" left="2" mouse_opaque="true" name="TP-in" width="455">
<scroll_list background_visible="true" draw_border="true" draw_stripes="true"
draw_heading="true" follows="left|top|right|bottom" left="2" top="5" width="450"
height="175" bottom_delta="-177" multi_select="false" name="places_list_in">
<column dynamicwidth="true" label="Region" name="region" />
<column dynamicwidth="true" label="Position" name="position" />
<column dynamicwidth="true" label="Visited" name="visited" />
<!--Hidden fields, used as storage for prebuilt strings, please keep at width 0-->
<column width="0" label="SLURL" name="slurl" />
<column width="0" label="Sim String" name="simstring" />
</scroll_list>
</panel>
<panel border="true" bottom="-185" follows="left|top|right|bottom" height="185"
label="Teleported out of" left="2" mouse_opaque="true" name="TP-out" width="455">
<scroll_list background_visible="true" draw_border="true" draw_stripes="true"
draw_heading="true" follows="left|top|right|bottom" left="2" top="5" width="450"
height="175" bottom_delta="-177" multi_select="false" name="places_list_out">
<column dynamicwidth="true" label="Region" name="region" />
<column dynamicwidth="true" label="Position" name="position" />
<column dynamicwidth="true" label="Visited" name="visited" />
<!--Hidden fields, used as storage for prebuilt strings, please keep at width 0-->
<column width="0" label="SLURL" name="slurl" />
<column width="0" label="Sim String" name="simstring" />
</scroll_list>
</panel>
</tab_container>
<button
bottom_delta="-24" enabled="false" follows="left|bottom" font="SansSerif" halign="center"
width="90" height="20" label="Teleport" label_selected="Teleport"
left="10" mouse_opaque="true" name="teleport" tool_tip="Teleport to selected location" />
<button bottom_delta="0" enabled="false" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="Show On Map" label_selected="Show On Map"
left_delta="100" mouse_opaque="true" name="show_on_map"
tool_tip="Center map on this location" width="125" />
<button bottom_delta="0" enabled="false" follows="bottom|right" font="SansSerif"
height="20" label="Copy SLURL to clipboard" left="-230" name="copy_slurl"
tool_tip="Copies current location as SLURL to be used on the web."
width="222" />
</floater>
<floater name="teleporthistory" title="Teleport History" rect_control="FloaterTeleportHistoryRect"
can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
min_width="550" min_height="150" width="550" height="200">
<scroll_list name="places_list" can_resize="true" multi_select="false"
background_visible="true" draw_border="true" draw_stripes="true" draw_heading="true"
height="150" width="530" bottom_delta="-170" top="10" left="10" follows="left|top|right|bottom">
<column name="parcel" label="Parcel" dynamicwidth="true" />
<column name="region" label="Region" width="150" />
<column name="position" label="Position" width="90" />
<column name="visited" label="Visited" width="110" />
<!--Hidden fields, used as storage for prebuilt strings, please keep at width 0-->
<column name="slurl" label="" width="0" />
<column name="simstring" label="" width="0" />
</scroll_list>
<button name="teleport" label="Teleport" tool_tip="Teleport to selected location"
enabled="false" mouse_opaque="true" font="SansSerif" halign="center"
height="20" width="90" bottom_delta="-24" left="10" follows="left|bottom"
/>
<button name="show_on_map" label="Show on map" tool_tip="Center map on selected location."
enabled="false" mouse_opaque="true" font="SansSerif" halign="center"
height="20" width="125" bottom_delta="0" left_delta="100" follows="left|bottom"
/>
<button name="copy_slurl" label="Copy SLURL to clipboard" tool_tip="Copy selected location as SLURL."
enabled="false" mouse_opaque="true" font="SansSerif" halign="center"
height="20" width="180" bottom_delta="0" left_delta="135" follows="left|bottom"
/>
</floater>

View File

@@ -2,13 +2,8 @@
<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
height="711" min_height="520" min_width="410" name="worldmap"
rect_control="FloaterWorldMapRect2" title="World Map" width="1243">
<tab_container bottom="-701" follows="left|top|right|bottom" height="681" left="15"
mouse_opaque="false" name="maptab" tab_position="top" width="995">
<panel bottom="-680" follows="left|top|right|bottom" height="664" label="Objects"
left="1" mouse_opaque="true" name="objects_mapview" width="993" />
<panel bottom="-680" follows="left|top|right|bottom" height="664" label="Terrain"
left="1" mouse_opaque="true" name="terrain_mapview" width="993" />
</tab_container>
<panel bottom="-701" follows="left|top|right|bottom" height="681"
left="15" mouse_opaque="true" name="objects_mapview" width="995" />
<icon bottom="-50" color="1, 1, 1, 1" follows="top|right" height="16"
image_name="map_avatar_16.tga" left="1013" mouse_opaque="true" name="self"
width="16" />
@@ -82,19 +77,19 @@
<icon bottom="-116" color="1, 1, 1, 1" follows="top|right" height="16"
image_name="map_event.tga" left="1151" mouse_opaque="true" name="event"
width="16" />
<check_box bottom="-116" control_name="MapShowEvents" follows="top|right"
<check_box bottom="-116" control_name="MapShowPGEvents" follows="top|right"
font="SansSerifSmall" height="16" initial_value="false" label="PG"
left_delta="20" mouse_opaque="true" name="event_chk" width="55" />
<icon bottom="-136" color="1, 1, 1, 1" follows="top|right" height="16"
image_name="map_event_mature.tga" left="1151" mouse_opaque="true"
name="events_mature_icon" width="16" />
<check_box bottom="-136" control_name="ShowMatureEvents" follows="top|right"
<check_box bottom="-136" control_name="MapShowMatureEvents" follows="top|right"
font="SansSerifSmall" height="16" initial_value="true" label="Mature"
left_delta="20" mouse_opaque="true" name="event_mature_chk" width="55" />
<icon bottom="-156" color="1, 1, 1, 1" follows="top|right" height="16"
image_name="map_event_adult.tga" left="1151" mouse_opaque="true"
name="events_adult_icon" width="16" />
<check_box bottom="-156" control_name="ShowAdultEvents" follows="top|right"
<check_box bottom="-156" control_name="MapShowAdultEvents" follows="top|right"
font="SansSerifSmall" height="16" initial_value="false" label="Adult"
left_delta="20" mouse_opaque="true" name="event_adult_chk" width="55" />
<icon bottom="-180" color="0.5, 0, 0, 1" follows="top|right" height="16"

View File

@@ -7,6 +7,13 @@
<string name="hippo_label_free">free</string>
<string name="hippo_label_week">week</string>
<string name="TeleportOfferMaturity">
[NAME] is offering a TP to [DESTINATION]
</string>
<string name="TeleportLureMaturity">
[NAME]'s teleport lure is to [DESTINATION]
</string>
<!-- Login -->
<string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string>
<string name="LoginAuthenticating">Authenticating</string>