Merge remote-tracking branch 'shyotl/master'
This commit is contained in:
@@ -249,7 +249,7 @@ BOOL LLVorbisDecodeState::initDecode()
|
||||
llwarns << "Bad sound caught by zmagic" << llendl;
|
||||
abort_decode = true;
|
||||
}
|
||||
else
|
||||
else if(!gAudiop->getAllowLargeSounds())
|
||||
{
|
||||
// </edit>
|
||||
//Much more restrictive than zmagic. Perhaps make toggleable.
|
||||
|
||||
@@ -115,6 +115,8 @@ void LLAudioEngine::setDefaults()
|
||||
|
||||
for (U32 i = 0; i < LLAudioEngine::AUDIO_TYPE_COUNT; i++)
|
||||
mSecondaryGain[i] = 1.0f;
|
||||
|
||||
mAllowLargeSounds = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -187,6 +187,8 @@ public:
|
||||
|
||||
bool updateBufferForData(LLAudioData *adp, const LLUUID &audio_uuid = LLUUID::null);
|
||||
|
||||
void setAllowLargeSounds(bool allow) { mAllowLargeSounds = allow ;}
|
||||
bool getAllowLargeSounds() const {return mAllowLargeSounds;}
|
||||
|
||||
// Asset callback when we're retrieved a sound from the asset server.
|
||||
void startNextTransfer();
|
||||
@@ -260,6 +262,8 @@ protected:
|
||||
private:
|
||||
void setDefaults();
|
||||
LLStreamingAudioInterface *mStreamingAudioImpl;
|
||||
|
||||
bool mAllowLargeSounds;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -107,6 +107,7 @@ bool LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
|
||||
// This means we also try to play audio when minimized,
|
||||
// so we manually handle muting in that case. JC
|
||||
fmod_flags |= FSOUND_INIT_GLOBALFOCUS;
|
||||
fmod_flags |= FSOUND_INIT_DSOUND_HRTF_FULL;
|
||||
#endif
|
||||
|
||||
#if LL_LINUX
|
||||
|
||||
@@ -233,6 +233,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
|
||||
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
|
||||
//llinfos << "LLURLRequest::process_impl()" << llendl;
|
||||
if(!buffer) return STATUS_ERROR;
|
||||
if(!mDetail) return STATUS_ERROR; //Seems to happen on occasion. Need to hunt down why.
|
||||
switch(mState)
|
||||
{
|
||||
case STATE_INITIALIZED:
|
||||
|
||||
@@ -307,6 +307,11 @@ bool LLTexUnit::bind(LLCubeMap* cubeMap)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cubeMap->mImages[0].isNull())
|
||||
{
|
||||
llwarns << "NULL LLTexUnit::bind cubeMap->mImages[0]" << llendl;
|
||||
return false;
|
||||
}
|
||||
if (mCurrTexture != cubeMap->mImages[0]->getTexName())
|
||||
{
|
||||
if (gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps)
|
||||
|
||||
@@ -9,6 +9,17 @@
|
||||
<string>settings_rlv.xml</string>
|
||||
</array>
|
||||
|
||||
<key>AllowLargeSounds</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Bypass stricter sound size/sample checks, which were introduced in SL2.x, for sound decoding.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FloaterAvatarTextRect</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -96,6 +96,7 @@ void LLFloaterHardwareSettings::refreshEnabledState()
|
||||
childSetMinValue("GrapicsCardTextureMemory", min_tex_mem);
|
||||
childSetMaxValue("GrapicsCardTextureMemory", max_tex_mem);
|
||||
|
||||
mLastVBOState = LLVertexBuffer::sEnableVBOs;
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
|
||||
!gGLManager.mHasVertexBufferObject)
|
||||
{
|
||||
@@ -158,6 +159,13 @@ void LLFloaterHardwareSettings::onClose(bool app_quitting)
|
||||
}
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLFloaterHardwareSettings::draw()
|
||||
{
|
||||
if(mLastVBOState == !LLVertexBuffer::sEnableVBOs)
|
||||
refreshEnabledState();
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
|
||||
@@ -75,6 +75,9 @@ public:
|
||||
/// sync up menu with parameters
|
||||
void refresh();
|
||||
|
||||
/// Draw the panel...
|
||||
void draw();
|
||||
|
||||
/// Apply the changed values.
|
||||
void apply();
|
||||
|
||||
@@ -87,6 +90,7 @@ public:
|
||||
protected:
|
||||
LLSliderCtrl* mCtrlVideoCardMem;
|
||||
|
||||
//Retained values for cancel/reset
|
||||
BOOL mUseVBO;
|
||||
BOOL mUseFBO;
|
||||
BOOL mUseAniso;
|
||||
@@ -96,6 +100,7 @@ protected:
|
||||
F32 mFogRatio;
|
||||
BOOL mProbeHardwareOnStartup;
|
||||
|
||||
bool mLastVBOState; //track changes to LLVertexBuffer::sEnableVBOs every frame. Bleh.
|
||||
private:
|
||||
// one instance on the inside
|
||||
static LLFloaterHardwareSettings* sHardwareSettings;
|
||||
|
||||
@@ -603,14 +603,14 @@ void LLFloaterWorldMap::trackLandmark( const LLUUID& landmark_item_id )
|
||||
void LLFloaterWorldMap::trackEvent(const LLItemInfo &event_info)
|
||||
{
|
||||
mTrackedStatus = LLTracker::TRACKING_LOCATION;
|
||||
LLTracker::trackLocation(event_info.mPosGlobal, event_info.mName, event_info.mToolTip, LLTracker::LOCATION_EVENT);
|
||||
LLTracker::trackLocation(event_info.getGlobalPosition(), event_info.getName(), event_info.getToolTip(), LLTracker::LOCATION_EVENT);
|
||||
setDefaultBtn("Teleport");
|
||||
}
|
||||
|
||||
void LLFloaterWorldMap::trackGenericItem(const LLItemInfo &item)
|
||||
{
|
||||
mTrackedStatus = LLTracker::TRACKING_LOCATION;
|
||||
LLTracker::trackLocation(item.mPosGlobal, item.mName, item.mToolTip, LLTracker::LOCATION_ITEM);
|
||||
LLTracker::trackLocation(item.getGlobalPosition(), item.getName(), item.getToolTip(), LLTracker::LOCATION_ITEM);
|
||||
setDefaultBtn("Teleport");
|
||||
}
|
||||
|
||||
@@ -629,7 +629,7 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
|
||||
setDefaultBtn("");
|
||||
return;
|
||||
}
|
||||
if (sim_info->mAccess == SIM_ACCESS_DOWN)
|
||||
if (sim_info->isDown())
|
||||
{
|
||||
// Down sim. Show the blue circle of death!
|
||||
LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
|
||||
@@ -840,8 +840,11 @@ void LLFloaterWorldMap::friendsChanged()
|
||||
if(avatar_id.notNull())
|
||||
{
|
||||
LLCtrlSelectionInterface *iface = childGetSelectionInterface("friend combo");
|
||||
if(!iface || !iface->setCurrentByID(avatar_id) ||
|
||||
!t.getBuddyInfo(avatar_id)->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION) || gAgent.isGodlike())
|
||||
const LLRelationship* buddy_info = t.getBuddyInfo(avatar_id);
|
||||
if(!iface ||
|
||||
!iface->setCurrentByID(avatar_id) ||
|
||||
(buddy_info && !buddy_info->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION)) ||
|
||||
gAgent.isGodlike())
|
||||
{
|
||||
LLTracker::stopTracking(NULL);
|
||||
}
|
||||
@@ -856,11 +859,10 @@ void LLFloaterWorldMap::buildAvatarIDList()
|
||||
|
||||
// Delete all but the "None" entry
|
||||
S32 list_size = list->getItemCount();
|
||||
while (list_size > 1)
|
||||
if (list_size > 1)
|
||||
{
|
||||
list->selectNthItem(1);
|
||||
list->selectItemRange(1, -1);
|
||||
list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
|
||||
--list_size;
|
||||
}
|
||||
|
||||
LLSD default_column;
|
||||
@@ -1565,10 +1567,10 @@ 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()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
|
||||
for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
{
|
||||
LLSimInfo* info = (*it).second;
|
||||
std::string sim_name = info->mName;
|
||||
std::string sim_name = info->getName();
|
||||
std::string sim_name_lower = sim_name;
|
||||
LLStringUtil::toLower(sim_name_lower);
|
||||
|
||||
@@ -1653,15 +1655,13 @@ void LLFloaterWorldMap::onCommitSearchResult(LLUICtrl*, void* userdata)
|
||||
LLStringUtil::toLower(sim_name);
|
||||
|
||||
std::map<U64, LLSimInfo*>::const_iterator it;
|
||||
for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
|
||||
for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
{
|
||||
LLSimInfo* info = (*it).second;
|
||||
std::string info_sim_name = info->mName;
|
||||
LLStringUtil::toLower(info_sim_name);
|
||||
|
||||
if (sim_name == info_sim_name)
|
||||
LLSimInfo* info = it->second;
|
||||
|
||||
if (info->isName(sim_name))
|
||||
{
|
||||
LLVector3d pos_global = from_region_handle( info->mHandle );
|
||||
LLVector3d pos_global = info->getGlobalOrigin();
|
||||
F64 local_x = self->childGetValue("spin x");
|
||||
F64 local_y = self->childGetValue("spin y");
|
||||
F64 local_z = self->childGetValue("spin z");
|
||||
|
||||
@@ -154,25 +154,17 @@ void LLMapLayerResponder::result(const LLSD& result)
|
||||
|
||||
// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
|
||||
|
||||
LLSimInfo* siminfo = new LLSimInfo();
|
||||
LLWorldMap::sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle);
|
||||
if (iter != LLWorldMap::getInstance()->mSimInfoMap.end())
|
||||
LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
if (siminfo == NULL)
|
||||
{
|
||||
LLSimInfo* oldinfo = iter->second;
|
||||
for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image)
|
||||
{
|
||||
siminfo->mMapImageID[image] = oldinfo->mMapImageID[image];
|
||||
}
|
||||
delete oldinfo;
|
||||
siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle);
|
||||
}
|
||||
LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
|
||||
|
||||
siminfo->mHandle = handle;
|
||||
siminfo->mName.assign( name );
|
||||
siminfo->mAccess = access; /*Flawfinder: ignore*/
|
||||
siminfo->mRegionFlags = region_flags;
|
||||
siminfo->mWaterHeight = (F32) water_height;
|
||||
siminfo->mMapImageID[agent_flags] = image_id;
|
||||
siminfo->setName( name );
|
||||
siminfo->setAccess( access ); /*Flawfinder: ignore*/
|
||||
siminfo->setRegionFlags( region_flags );
|
||||
siminfo->setWaterHeight( (F32) water_height );
|
||||
siminfo->setMapImageID( image_id, agent_flags );
|
||||
if (use_web_map_tiles)
|
||||
{
|
||||
siminfo->mCurrentImage = LLWorldMap::loadObjectsTile((U32)x_regions, (U32)y_regions);
|
||||
@@ -199,7 +191,7 @@ void LLMapLayerResponder::result(const LLSD& result)
|
||||
LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
|
||||
LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
|
||||
{
|
||||
if (siminfo->mAccess == SIM_ACCESS_DOWN)
|
||||
if (siminfo->isDown())
|
||||
{
|
||||
// We were tracking this location, but it doesn't exist
|
||||
LLWorldMap::getInstance()->mInvalidLocation = true;
|
||||
|
||||
@@ -1717,14 +1717,7 @@ void LLPanelAvatar::resetGroupList()
|
||||
row["id"] = id ;
|
||||
row["columns"][0]["value"] = group_string;
|
||||
row["columns"][0]["font"] = "SANSSERIF_SMALL";
|
||||
if (group_data.mListInProfile)
|
||||
{
|
||||
row["columns"][0]["color"] = gColors.getColor("DefaultListText").getValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
row["columns"][0]["color"] = gColors.getColor("ScrollUnselectedColor").getValue();
|
||||
}
|
||||
row["columns"][0]["font-style"] = group_data.mListInProfile ? "BOLD" : "NORMAL";
|
||||
row["columns"][0]["width"] = 0;
|
||||
group_list->addElement(row);
|
||||
}
|
||||
|
||||
@@ -687,6 +687,8 @@ bool idle_startup()
|
||||
if(init)
|
||||
{
|
||||
gAudiop->setMuted(TRUE);
|
||||
if(gSavedSettings.getBOOL("AllowLargeSounds"))
|
||||
gAudiop->setAllowLargeSounds(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -583,6 +583,12 @@ static bool handlePhoenixNameSystemChanged(const LLSD& newvalue)
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
static bool handleAllowLargeSounds(const LLSD& newvalue)
|
||||
{
|
||||
if(gAudiop)
|
||||
gAudiop->setAllowLargeSounds(newvalue.asBoolean());
|
||||
return true;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
void settings_setup_listeners()
|
||||
{
|
||||
@@ -754,6 +760,8 @@ void settings_setup_listeners()
|
||||
// [Ansariel: Display name support]
|
||||
gSavedSettings.getControl("PhoenixNameSystem")->getSignal()->connect(boost::bind(&handlePhoenixNameSystemChanged, _1));
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
gSavedSettings.getControl("AllowLargeSounds")->getSignal()->connect(boost::bind(&handleAllowLargeSounds, _1));
|
||||
}
|
||||
|
||||
template <> eControlType get_control_type<U32>(const U32& in, LLSD& out)
|
||||
|
||||
@@ -931,21 +931,24 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
|
||||
|
||||
void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
|
||||
{
|
||||
LLTimer kill_timer;
|
||||
LLViewerObject *objectp;
|
||||
|
||||
|
||||
S32 count = 0;
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = *iter;
|
||||
|
||||
if (objectp->mRegionp == regionp)
|
||||
{
|
||||
++count;
|
||||
killObject(objectp);
|
||||
}
|
||||
}
|
||||
|
||||
// Have to clean right away because the region is becoming invalid.
|
||||
cleanDeadObjects(FALSE);
|
||||
llinfos << "Removed " << count << " objects for region " << regionp->getName() << ". (" << kill_timer.getElapsedTimeF64()*1000.0 << "ms)" << llendl;
|
||||
}
|
||||
|
||||
void LLViewerObjectList::killAllObjects()
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "llregionflags.h"
|
||||
#include "hippogridmanager.h"
|
||||
bool LLWorldMap::sGotMapURL = false;
|
||||
const F32 AGENTS_UPDATE_TIMER = 60.0; // Seconds between 2 agent requests for a region
|
||||
const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // 10 minutes
|
||||
|
||||
// For DEV-17507, do lazy image loading in llworldmapview.cpp instead,
|
||||
@@ -73,8 +74,8 @@ LLItemInfo::LLItemInfo(F32 global_x, F32 global_y,
|
||||
mRegionHandle = to_region_handle(mPosGlobal);
|
||||
}
|
||||
|
||||
LLSimInfo::LLSimInfo()
|
||||
: mHandle(0),
|
||||
LLSimInfo::LLSimInfo(U64 handle)
|
||||
: mHandle(handle),
|
||||
mName(),
|
||||
mAgentsUpdateTime(0),
|
||||
mShowAgentLocations(FALSE),
|
||||
@@ -86,12 +87,8 @@ LLSimInfo::LLSimInfo()
|
||||
}
|
||||
|
||||
|
||||
LLVector3d LLSimInfo::getGlobalOrigin() const
|
||||
{
|
||||
return from_region_handle(mHandle);
|
||||
}
|
||||
|
||||
LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
|
||||
LLVector3d LLSimInfo::getGlobalPos(const LLVector3& local_pos) const
|
||||
{
|
||||
LLVector3d pos = from_region_handle(mHandle);
|
||||
pos.mdV[VX] += local_pos.mV[VX];
|
||||
@@ -100,6 +97,47 @@ LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
|
||||
return pos;
|
||||
}
|
||||
|
||||
LLVector3d LLSimInfo::getGlobalOrigin() const
|
||||
{
|
||||
return from_region_handle(mHandle);
|
||||
}
|
||||
LLVector3 LLSimInfo::getLocalPos(LLVector3d global_pos) const
|
||||
{
|
||||
LLVector3d sim_origin = from_region_handle(mHandle);
|
||||
return LLVector3(global_pos - sim_origin);
|
||||
}
|
||||
|
||||
void LLSimInfo::clearImage()
|
||||
{
|
||||
if (!mOverlayImage.isNull())
|
||||
{
|
||||
mOverlayImage->setBoostLevel(0);
|
||||
mOverlayImage = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLSimInfo::dropImagePriority()
|
||||
{
|
||||
if (!mOverlayImage.isNull())
|
||||
{
|
||||
mOverlayImage->setBoostLevel(0);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the agent count for that region
|
||||
void LLSimInfo::updateAgentCount(F64 time)
|
||||
{
|
||||
if ((time - mAgentsUpdateTime > AGENTS_UPDATE_TIMER) || mFirstAgentRequest)
|
||||
{
|
||||
LLWorldMap::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, mHandle);
|
||||
mAgentsUpdateTime = time;
|
||||
mFirstAgentRequest = false;
|
||||
}
|
||||
}
|
||||
bool LLSimInfo::isName(const std::string& name) const
|
||||
{
|
||||
return (LLStringUtil::compareInsensitive(name, mName) == 0);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// World Map
|
||||
@@ -203,20 +241,23 @@ void LLWorldMap::eraseItems()
|
||||
|
||||
void LLWorldMap::clearImageRefs()
|
||||
{
|
||||
// We clear the reference to the images we're holding.
|
||||
// Images hold by the world mipmap first
|
||||
mWorldMipmap.reset();
|
||||
|
||||
// Images hold by the region map
|
||||
LLSimInfo* sim_info = NULL;
|
||||
for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
|
||||
{
|
||||
LLSimInfo* info = (*it).second;
|
||||
if (info->mCurrentImage)
|
||||
sim_info = it->second;
|
||||
if(sim_info)
|
||||
{
|
||||
info->mCurrentImage->setBoostLevel(0);
|
||||
info->mCurrentImage = NULL;
|
||||
}
|
||||
if (info->mOverlayImage)
|
||||
{
|
||||
info->mOverlayImage->setBoostLevel(0);
|
||||
info->mOverlayImage = NULL;
|
||||
if (sim_info->mCurrentImage)
|
||||
{
|
||||
sim_info->mCurrentImage->setBoostLevel(0);
|
||||
sim_info->mCurrentImage = NULL;
|
||||
}
|
||||
sim_info->clearImage();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -233,6 +274,13 @@ void LLWorldMap::clearSimFlags()
|
||||
}
|
||||
}
|
||||
|
||||
LLSimInfo* LLWorldMap::createSimInfoFromHandle(const U64 handle)
|
||||
{
|
||||
LLSimInfo* sim_info = new LLSimInfo(handle);
|
||||
mSimInfoMap[handle] = sim_info;
|
||||
return sim_info;
|
||||
}
|
||||
|
||||
void LLWorldMap::equalizeBoostLevels()
|
||||
{
|
||||
mWorldMipmap.equalizeBoostLevels();
|
||||
@@ -250,11 +298,7 @@ LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle)
|
||||
sim_info_map_t::iterator it = mSimInfoMap.find(handle);
|
||||
if (it != mSimInfoMap.end())
|
||||
{
|
||||
LLSimInfo* sim_info = (*it).second;
|
||||
if (sim_info)
|
||||
{
|
||||
return sim_info;
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -265,39 +309,38 @@ LLSimInfo* LLWorldMap::simInfoFromName(const std::string& sim_name)
|
||||
LLSimInfo* sim_info = NULL;
|
||||
if (!sim_name.empty())
|
||||
{
|
||||
for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
|
||||
// Iterate through the entire sim info map and compare the name
|
||||
sim_info_map_t::iterator it;
|
||||
for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
|
||||
{
|
||||
sim_info = (*it).second;
|
||||
if (sim_info
|
||||
&& (0 == LLStringUtil::compareInsensitive(sim_name, sim_info->mName)) )
|
||||
sim_info = it->second;
|
||||
if (sim_info && sim_info->isName(sim_name) )
|
||||
{
|
||||
// break out of loop if success
|
||||
break;
|
||||
}
|
||||
sim_info = NULL;
|
||||
}
|
||||
// If we got to the end, we haven't found the sim. Reset the ouput value to NULL.
|
||||
if (it == mSimInfoMap.end())
|
||||
sim_info = NULL;
|
||||
}
|
||||
return sim_info;
|
||||
}
|
||||
|
||||
bool LLWorldMap::simNameFromPosGlobal(const LLVector3d& pos_global, std::string & outSimName )
|
||||
{
|
||||
bool gotSimName = true;
|
||||
LLSimInfo* sim_info = simInfoFromPosGlobal(pos_global);
|
||||
|
||||
U64 handle = to_region_handle(pos_global);
|
||||
|
||||
sim_info_map_t::iterator it = mSimInfoMap.find(handle);
|
||||
if (it != mSimInfoMap.end())
|
||||
if (sim_info)
|
||||
{
|
||||
LLSimInfo* info = (*it).second;
|
||||
outSimName = info->mName;
|
||||
outSimName = sim_info->getName();
|
||||
}
|
||||
else
|
||||
{
|
||||
gotSimName = false;
|
||||
outSimName = "(unknown region)";
|
||||
}
|
||||
|
||||
return gotSimName;
|
||||
return (sim_info != NULL);
|
||||
}
|
||||
|
||||
void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer)
|
||||
@@ -657,28 +700,20 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
|
||||
y_meters,
|
||||
x_meters+REGION_WIDTH_UNITS,
|
||||
y_meters+REGION_WIDTH_UNITS) || adjust;
|
||||
|
||||
// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
|
||||
|
||||
LLSimInfo* siminfo = new LLSimInfo();
|
||||
sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle);
|
||||
if (iter != LLWorldMap::getInstance()->mSimInfoMap.end())
|
||||
//LL_INFOS("World Map") << "Map sim : " << name << ", ID : " << image_id.getString() << LL_ENDL;
|
||||
// Insert the region in the region map of the world map
|
||||
// Loading the LLSimInfo object with what we got and insert it in the map
|
||||
LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
if (siminfo == NULL)
|
||||
{
|
||||
LLSimInfo* oldinfo = iter->second;
|
||||
for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image)
|
||||
{
|
||||
siminfo->mMapImageID[image] = oldinfo->mMapImageID[image];
|
||||
}
|
||||
delete oldinfo;
|
||||
siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle);
|
||||
}
|
||||
LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
|
||||
|
||||
siminfo->mHandle = handle;
|
||||
siminfo->mName.assign( name );
|
||||
siminfo->mAccess = accesscode;
|
||||
siminfo->mRegionFlags = region_flags;
|
||||
siminfo->mWaterHeight = (F32) water_height;
|
||||
siminfo->mMapImageID[agent_flags] = image_id;
|
||||
siminfo->setName( name );
|
||||
siminfo->setAccess( accesscode );
|
||||
siminfo->setRegionFlags( region_flags );
|
||||
siminfo->setWaterHeight((F32) water_height);
|
||||
siminfo->setMapImageID( image_id, agent_flags );
|
||||
|
||||
#ifdef IMMEDIATE_IMAGE_LOAD
|
||||
if (use_web_map_tiles)
|
||||
@@ -710,7 +745,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
|
||||
LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
|
||||
LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
|
||||
{
|
||||
if (siminfo->mAccess == SIM_ACCESS_DOWN)
|
||||
if (siminfo->isDown())
|
||||
{
|
||||
// We were tracking this location, but it doesn't exist
|
||||
LLWorldMap::getInstance()->mInvalidLocation = true;
|
||||
@@ -783,7 +818,7 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
|
||||
Y /= REGION_WIDTH_UNITS;
|
||||
|
||||
LLItemInfo new_item(world_x, world_y, name, uuid, extra, extra2);
|
||||
LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(new_item.mRegionHandle);
|
||||
LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(new_item.getRegionHandle());
|
||||
|
||||
switch (type)
|
||||
{
|
||||
@@ -826,13 +861,13 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
|
||||
S32 display_hour = timep->tm_hour % 12;
|
||||
if (display_hour == 0) display_hour = 12;
|
||||
|
||||
new_item.mToolTip = llformat( "%d:%02d %s",
|
||||
new_item.setTooltip( llformat( "%d:%02d %s",
|
||||
display_hour,
|
||||
timep->tm_min,
|
||||
(timep->tm_hour < 12 ? "AM" : "PM") );
|
||||
(timep->tm_hour < 12 ? "AM" : "PM") ) );
|
||||
|
||||
// HACK: store Z in extra2
|
||||
new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
|
||||
new_item.setElevation((F64)extra2);
|
||||
if (type == MAP_ITEM_PG_EVENT)
|
||||
{
|
||||
LLWorldMap::getInstance()->mPGEvents.push_back(new_item);
|
||||
@@ -851,9 +886,9 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
|
||||
case MAP_ITEM_LAND_FOR_SALE: // land for sale
|
||||
case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale
|
||||
{
|
||||
new_item.mToolTip = llformat("%d sq. m. %s%d", new_item.mExtra,
|
||||
new_item.setTooltip(llformat("%d sq. m. %s%d", new_item.mExtra,
|
||||
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
|
||||
new_item.mExtra2);
|
||||
new_item.mExtra2));
|
||||
if (type == MAP_ITEM_LAND_FOR_SALE)
|
||||
{
|
||||
LLWorldMap::getInstance()->mLandForSale.push_back(new_item);
|
||||
@@ -873,19 +908,19 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
|
||||
{
|
||||
if (!siminfo)
|
||||
{
|
||||
llinfos << "siminfo missing for " << new_item.mPosGlobal.mdV[0] << ", " << new_item.mPosGlobal.mdV[1] << llendl;
|
||||
llinfos << "siminfo missing for " << new_item.getGlobalPosition().mdV[0] << ", " << new_item.getGlobalPosition().mdV[1] << llendl;
|
||||
break;
|
||||
}
|
||||
// llinfos << "New Location " << new_item.mName << llendl;
|
||||
|
||||
item_info_list_t& agentcounts = LLWorldMap::getInstance()->mAgentLocationsMap[new_item.mRegionHandle];
|
||||
item_info_list_t& agentcounts = LLWorldMap::getInstance()->mAgentLocationsMap[new_item.getRegionHandle()];
|
||||
|
||||
// Find the last item in the list with a different name and erase them
|
||||
item_info_list_t::iterator lastiter;
|
||||
for (lastiter = agentcounts.begin(); lastiter!=agentcounts.end(); ++lastiter)
|
||||
{
|
||||
const LLItemInfo& info = *lastiter;
|
||||
if (info.mName == new_item.mName)
|
||||
if (info.isName(new_item.getName()))
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -918,10 +953,10 @@ void LLWorldMap::dump()
|
||||
from_region_handle(handle, &x_pos, &y_pos);
|
||||
|
||||
llinfos << x_pos << "," << y_pos
|
||||
<< " " << info->mName
|
||||
<< " " << (S32)info->mAccess
|
||||
<< " " << std::hex << info->mRegionFlags << std::dec
|
||||
<< " " << info->mWaterHeight
|
||||
<< " " << info->getName()
|
||||
<< " " << (S32)info->getAccess()
|
||||
<< " " << std::hex << info->getRegionFlags() << std::dec
|
||||
<< " " << info->getWaterHeight()
|
||||
//<< " " << info->mTelehubName
|
||||
//<< " " << info->mTelehubPosition
|
||||
<< llendl;
|
||||
@@ -1088,9 +1123,6 @@ void LLWorldMap::dropImagePriorities()
|
||||
for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
|
||||
{
|
||||
LLSimInfo* info = it->second;
|
||||
if (!info->mOverlayImage.isNull())
|
||||
{
|
||||
info->mOverlayImage->setBoostLevel(0);
|
||||
}
|
||||
info->dropImagePriority();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "llworldmipmap.h"
|
||||
#include "lluuid.h"
|
||||
#include "llmemory.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewertexture.h"
|
||||
#include "lleventinfo.h"
|
||||
#include "v3color.h"
|
||||
@@ -56,14 +57,26 @@ class LLItemInfo
|
||||
public:
|
||||
LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id, S32 extra = 0, S32 extra2 = 0);
|
||||
|
||||
// Setters
|
||||
void setTooltip(const std::string& tooltip) { mToolTip = tooltip; }
|
||||
void setElevation(F64 z) { mPosGlobal.mdV[VZ] = z; }
|
||||
// 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; }
|
||||
U64 getRegionHandle() const { return mRegionHandle; }
|
||||
bool isName(const std::string& name) const { return (mName == name); } // True if name same as item's name
|
||||
private:
|
||||
std::string mName;
|
||||
std::string mToolTip;
|
||||
LLVector3d mPosGlobal;
|
||||
LLUUID mID;
|
||||
U64 mRegionHandle;
|
||||
public: //public for now.. non-standard.
|
||||
BOOL mSelected;
|
||||
S32 mExtra;
|
||||
S32 mExtra2;
|
||||
U64 mRegionHandle;
|
||||
};
|
||||
|
||||
#define MAP_SIM_IMAGE_TYPES 3
|
||||
@@ -74,25 +87,55 @@ public:
|
||||
class LLSimInfo
|
||||
{
|
||||
public:
|
||||
LLSimInfo();
|
||||
LLSimInfo(U64 handle);
|
||||
|
||||
LLVector3d getGlobalPos(LLVector3 local_pos) const;
|
||||
// Convert local region coordinates into world coordinates
|
||||
LLVector3d getGlobalPos(const LLVector3& local_pos) const;
|
||||
// Get the world coordinates of the SW corner of that region
|
||||
LLVector3d getGlobalOrigin() const;
|
||||
LLVector3 getLocalPos(LLVector3d global_pos) const;
|
||||
|
||||
public:
|
||||
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
|
||||
// Setters
|
||||
void setName(std::string& name) { mName = name; }
|
||||
void setAccess (U8 accesscode) { mAccess = accesscode; }
|
||||
void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; }
|
||||
void setWaterHeight (F32 water_height) { mWaterHeight = water_height; }
|
||||
void setAlpha(F32 alpha) { mAlpha = alpha; }
|
||||
|
||||
void setMapImageID (const LLUUID& id, const U8 &layer) { mMapImageID[layer] = id; }
|
||||
|
||||
// Accessors
|
||||
std::string getName() const { return mName; }
|
||||
const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); }
|
||||
const U32 getRegionFlags() const { return mRegionFlags; }
|
||||
const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); }
|
||||
const U8 getAccess() const { return mAccess; }
|
||||
|
||||
const F32 getWaterHeight() const { return mWaterHeight; }
|
||||
const F32 getAlpha() const { return mAlpha; }
|
||||
const U64 getHandle() const { return mHandle; }
|
||||
bool isName(const std::string& name) const;
|
||||
bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
|
||||
bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
|
||||
bool isAdult() { return (mAccess == SIM_ACCESS_ADULT); }
|
||||
private:
|
||||
U64 mHandle;
|
||||
std::string mName;
|
||||
|
||||
F64 mAgentsUpdateTime;
|
||||
BOOL mShowAgentLocations; // are agents visible?
|
||||
|
||||
F64 mAgentsUpdateTime; // Time stamp giving the last time the agents information was requested for that region
|
||||
bool mFirstAgentRequest; // Init agent request flag
|
||||
U8 mAccess;
|
||||
U32 mRegionFlags;
|
||||
F32 mWaterHeight;
|
||||
|
||||
F32 mAlpha;
|
||||
|
||||
public:
|
||||
BOOL mShowAgentLocations; // are agents visible?
|
||||
|
||||
// Image ID for the current overlay mode.
|
||||
LLUUID mMapImageID[MAP_SIM_IMAGE_TYPES];
|
||||
|
||||
@@ -116,6 +159,7 @@ struct LLWorldMapLayer
|
||||
|
||||
class LLWorldMap : public LLSingleton<LLWorldMap>
|
||||
{
|
||||
friend class LLMapLayerResponder;
|
||||
public:
|
||||
typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport);
|
||||
|
||||
@@ -138,6 +182,9 @@ public:
|
||||
// Drops the priority of the images being fetched
|
||||
void dropImagePriorities();
|
||||
|
||||
// Region Map access
|
||||
typedef std::map<U64, LLSimInfo*> sim_info_map_t;
|
||||
const LLWorldMap::sim_info_map_t& getRegionMap() const { return mSimInfoMap; }
|
||||
// Returns simulator information, or NULL if out of range
|
||||
LLSimInfo* simInfoFromHandle(const U64 handle);
|
||||
|
||||
@@ -195,11 +242,14 @@ public:
|
||||
private:
|
||||
bool clearItems(bool force = false); // Clears the item lists
|
||||
|
||||
public:
|
||||
// Create a region record corresponding to the handle, insert it in the region map and returns a pointer
|
||||
LLSimInfo* createSimInfoFromHandle(const U64 handle);
|
||||
|
||||
// Map from region-handle to simulator info
|
||||
typedef std::map<U64, LLSimInfo*> sim_info_map_t;
|
||||
sim_info_map_t mSimInfoMap;
|
||||
|
||||
public:
|
||||
|
||||
BOOL mIsTrackingUnknownLocation, mInvalidLocation, mIsTrackingDoubleClick, mIsTrackingCommit;
|
||||
LLVector3d mUnknownLocation;
|
||||
|
||||
|
||||
@@ -127,10 +127,6 @@ std::map<std::string,std::string> LLWorldMapView::sStringsMap;
|
||||
#define SIM_MAP_AGENT_SCALE 8 // width in pixels, where we start drawing agents
|
||||
#define SIM_MAP_SCALE 4 // width in pixels, where we start drawing sim tiles
|
||||
|
||||
// Updates for agent locations.
|
||||
#define AGENTS_UPDATE_TIME 60.0 // in seconds
|
||||
|
||||
|
||||
|
||||
void LLWorldMapView::initClass()
|
||||
{
|
||||
@@ -261,7 +257,7 @@ void LLWorldMapView::setScale( F32 scale )
|
||||
F32 old_scale = sMapScale;
|
||||
|
||||
sMapScale = scale;
|
||||
if (sMapScale == 0.f)
|
||||
if (sMapScale <= 0.f)
|
||||
{
|
||||
sMapScale = 0.1f;
|
||||
}
|
||||
@@ -308,7 +304,7 @@ void LLWorldMapView::setPan( S32 x, S32 y, BOOL snap )
|
||||
|
||||
BOOL is_agent_in_region(LLViewerRegion* region, LLSimInfo* info)
|
||||
{
|
||||
return ((region && info) && (info->mName == region->getName()));
|
||||
return ((region && info) && (info->isName(region->getName())));
|
||||
}
|
||||
|
||||
|
||||
@@ -328,6 +324,8 @@ void LLWorldMapView::draw()
|
||||
|
||||
const S32 width = getRect().getWidth();
|
||||
const S32 height = getRect().getHeight();
|
||||
const F32 half_width = F32(width) / 2.0f;
|
||||
const F32 half_height = F32(height) / 2.0f;
|
||||
LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal();
|
||||
|
||||
LLLocalClipRect clip(getLocalRect());
|
||||
@@ -346,6 +344,7 @@ void LLWorldMapView::draw()
|
||||
}
|
||||
|
||||
gGL.flush();
|
||||
|
||||
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
|
||||
gGL.setColorMask(true, true);
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
@@ -354,17 +353,15 @@ void LLWorldMapView::draw()
|
||||
drawMipmap(width, height);
|
||||
else
|
||||
drawTiles(width, height);
|
||||
|
||||
gGL.flush();
|
||||
LLFontGL* font = LLFontGL::getFontSansSerifSmall();
|
||||
const F32 half_width = F32(width) / 2.0f;
|
||||
const F32 half_height = F32(height) / 2.0f;
|
||||
|
||||
// Draw the region name in the lower left corner
|
||||
for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
|
||||
it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
|
||||
for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
|
||||
it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
{
|
||||
U64 handle = it->first;
|
||||
LLSimInfo* info = (*it).second;
|
||||
LLSimInfo* info = it->second;
|
||||
|
||||
LLVector3d origin_global = from_region_handle(handle);
|
||||
|
||||
@@ -372,29 +369,26 @@ void LLWorldMapView::draw()
|
||||
LLVector3d rel_region_pos = origin_global - camera_global;
|
||||
F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * sMapScale;
|
||||
F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * sMapScale;
|
||||
|
||||
F32 bottom = sPanY + half_height + relative_y;
|
||||
F32 left = sPanX + half_width + relative_x;
|
||||
F32 top = bottom + sMapScale ;
|
||||
F32 right = left + sMapScale ;
|
||||
|
||||
// disregard regions that are outside the rectangle
|
||||
if (top < 0.f ||
|
||||
bottom > height ||
|
||||
right < 0.f ||
|
||||
left > width )
|
||||
|
||||
// Coordinates of the sim in pixels in the UI panel
|
||||
// When the view isn't panned, 0,0 = center of rectangle
|
||||
F32 bottom = sPanY + half_height + relative_y;
|
||||
F32 left = sPanX + half_width + relative_x;
|
||||
F32 top = bottom + sMapScale ;
|
||||
F32 right = left + sMapScale ;
|
||||
|
||||
// Discard if region is outside the screen rectangle (not visible on screen)
|
||||
if ((top < 0.f) || (bottom > height) ||
|
||||
(right < 0.f) || (left > width) )
|
||||
{
|
||||
// Drop the "land for sale" fetching priority since it's outside the view rectangle
|
||||
info->dropImagePriority();
|
||||
continue;
|
||||
}
|
||||
|
||||
info->mShowAgentLocations = (sMapScale >= SIM_MAP_AGENT_SCALE);
|
||||
mVisibleRegions.push_back(handle);
|
||||
// See if the agents need updating
|
||||
if (current_time - info->mAgentsUpdateTime > AGENTS_UPDATE_TIME)
|
||||
{
|
||||
LLWorldMap::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, info->mHandle);
|
||||
info->mAgentsUpdateTime = current_time;
|
||||
}
|
||||
info->updateAgentCount(current_time);
|
||||
|
||||
std::string mesg;
|
||||
if (sMapScale < sThresholdA)
|
||||
@@ -416,14 +410,14 @@ void LLWorldMapView::draw()
|
||||
mesg = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
else if (info->mAccess == SIM_ACCESS_DOWN)
|
||||
else if (info->isDown())
|
||||
{
|
||||
mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str());
|
||||
mesg = llformat( "%s (%s)", info->getName().c_str(), sStringsMap["offline"].c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
mesg = info->mName;
|
||||
U8 access = info->mAccess;
|
||||
mesg = info->getName();
|
||||
U8 access = info->getAccess();
|
||||
switch(access)
|
||||
{
|
||||
case SIM_ACCESS_MIN:
|
||||
@@ -615,8 +609,8 @@ void LLWorldMapView::setVisible(BOOL visible)
|
||||
}
|
||||
}
|
||||
}
|
||||
for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
|
||||
it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
|
||||
for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
|
||||
it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
{
|
||||
LLSimInfo* info = (*it).second;
|
||||
if (info->mCurrentImage.notNull())
|
||||
@@ -742,8 +736,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
|
||||
bool use_web_map_tiles = LLWorldMap::useWebMapTiles();
|
||||
|
||||
for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
|
||||
it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
|
||||
for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
|
||||
it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
{
|
||||
U64 handle = (*it).first;
|
||||
LLSimInfo* info = (*it).second;
|
||||
@@ -776,7 +770,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
// 1. Tiles are zoomed out small enough, or
|
||||
// 2. Sim's texture has not been loaded yet
|
||||
F32 map_scale_cutoff = SIM_MAP_SCALE;
|
||||
if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) > 0)
|
||||
if ((info->getRegionFlags() & REGION_FLAGS_NULL_LAYER) > 0)
|
||||
{
|
||||
map_scale_cutoff = SIM_NULL_MAP_SCALE;
|
||||
}
|
||||
@@ -789,18 +783,18 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
if (sim_visible)
|
||||
{
|
||||
// Fade in
|
||||
if (info->mAlpha < 0.0f)
|
||||
info->mAlpha = 1.f; // don't fade initially
|
||||
if (info->getAlpha() < 0.0f)
|
||||
info->setAlpha( 1.f ); // don't fade initially
|
||||
else
|
||||
info->mAlpha = lerp(info->mAlpha, 1.f, LLCriticalDamp::getInterpolant(0.15f));
|
||||
info->setAlpha(lerp(info->getAlpha(), 1.f, LLCriticalDamp::getInterpolant(0.15f)));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fade out
|
||||
if (info->mAlpha < 0.0f)
|
||||
info->mAlpha = 0.f; // don't fade initially
|
||||
if (info->getAlpha() < 0.0f)
|
||||
info->setAlpha( 0.f ); // don't fade initially
|
||||
else
|
||||
info->mAlpha = lerp(info->mAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f));
|
||||
info->setAlpha(lerp(info->getAlpha(), 0.f, LLCriticalDamp::getInterpolant(0.15f)));
|
||||
}
|
||||
|
||||
// discard regions that are outside the rectangle
|
||||
@@ -870,7 +864,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
|
||||
// LLTextureView::addDebugImage(simimage);
|
||||
|
||||
if (sim_visible && info->mAlpha > 0.001f)
|
||||
if (sim_visible && info->getAlpha() > 0.001f)
|
||||
{
|
||||
// Draw using the texture. If we don't clamp we get artifact at
|
||||
// the edge.
|
||||
@@ -879,7 +873,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
gGL.getTexUnit(0)->bind(simimage);
|
||||
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
F32 alpha = sim_alpha * info->mAlpha;
|
||||
F32 alpha = sim_alpha * info->getAlpha();
|
||||
gGL.color4f(1.f, 1.0f, 1.0f, alpha);
|
||||
|
||||
gGL.begin(LLRender::QUADS);
|
||||
@@ -909,7 +903,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
gGL.end();
|
||||
}
|
||||
|
||||
if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) == 0)
|
||||
if ((info->getRegionFlags() & REGION_FLAGS_NULL_LAYER) == 0)
|
||||
{
|
||||
// draw an alpha of 1 where the sims are visible (except NULL sims)
|
||||
gGL.flush();
|
||||
@@ -930,7 +924,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
|
||||
}
|
||||
}
|
||||
|
||||
if (info->mAccess == SIM_ACCESS_DOWN)
|
||||
if (info->isDown())
|
||||
{
|
||||
// Draw a transparent red square over down sims
|
||||
gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
|
||||
@@ -980,7 +974,7 @@ void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items,
|
||||
|
||||
void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image)
|
||||
{
|
||||
drawImage(item.mPosGlobal, image);
|
||||
drawImage(item.getGlobalPosition(), image);
|
||||
}
|
||||
|
||||
|
||||
@@ -1018,7 +1012,7 @@ void LLWorldMapView::drawAgents()
|
||||
{
|
||||
U64 handle = *iter;
|
||||
LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
if (siminfo && (siminfo->mAccess == SIM_ACCESS_DOWN))
|
||||
if (siminfo && (siminfo->isDown()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -1036,7 +1030,7 @@ void LLWorldMapView::drawAgents()
|
||||
sim_agent_count += info.mExtra;
|
||||
// Here's how we'd choose the color if info.mID were available but it's not being sent:
|
||||
//LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? friend_color : avatar_color;
|
||||
drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, avatar_color);
|
||||
drawImageStack(info.getGlobalPosition(), sAvatarSmallImage, agent_count, 3.f, avatar_color);
|
||||
}
|
||||
LLWorldMap::getInstance()->mNumAgents[handle] = sim_agent_count; // override mNumAgents for this sim
|
||||
}
|
||||
@@ -1427,14 +1421,14 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* stic
|
||||
// std::string message = llformat("%s (%s)", info->getName().c_str(), info->getAccessString().c_str());
|
||||
// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||
std::string message = llformat("%s (%s)",
|
||||
(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? info->mName.c_str() : RlvStrings::getString(RLV_STRING_HIDDEN).c_str(),
|
||||
LLViewerRegion::accessToString(info->mAccess).c_str());
|
||||
(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? info->getName().c_str() : RlvStrings::getString(RLV_STRING_HIDDEN).c_str(),
|
||||
info->getAccessString().c_str());
|
||||
// [/RLVa:KB]
|
||||
|
||||
if (info->mAccess != SIM_ACCESS_DOWN)
|
||||
if (!info->isDown())
|
||||
{
|
||||
S32 agent_count = LLWorldMap::getInstance()->mNumAgents[info->mHandle];
|
||||
if (region && region->getHandle() == info->mHandle)
|
||||
S32 agent_count = LLWorldMap::getInstance()->mNumAgents[info->getHandle()];
|
||||
if (region && region->getHandle() == info->getHandle())
|
||||
{
|
||||
++agent_count; // Bump by 1 if we're here
|
||||
}
|
||||
@@ -1458,7 +1452,7 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* stic
|
||||
msg.assign( message );
|
||||
|
||||
// Optionally show region flags
|
||||
std::string region_flags = LLViewerRegion::regionFlagsToString(info->mRegionFlags);
|
||||
std::string region_flags = info->getFlagsString();
|
||||
|
||||
if (!region_flags.empty())
|
||||
{
|
||||
@@ -1808,7 +1802,7 @@ void LLWorldMapView::reshape( S32 width, S32 height, BOOL called_from_parent )
|
||||
|
||||
bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track)
|
||||
{
|
||||
LLVector3 pos_view = globalPosToView(item.mPosGlobal);
|
||||
LLVector3 pos_view = globalPosToView(item.getGlobalPosition());
|
||||
S32 item_x = llround(pos_view.mV[VX]);
|
||||
S32 item_y = llround(pos_view.mV[VY]);
|
||||
|
||||
@@ -1817,12 +1811,12 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
|
||||
if (y < item_y - BIG_DOT_RADIUS) return false;
|
||||
if (y > item_y + BIG_DOT_RADIUS) return false;
|
||||
|
||||
LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.mRegionHandle);
|
||||
LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.getRegionHandle());
|
||||
if (sim_info)
|
||||
{
|
||||
if (track)
|
||||
{
|
||||
gFloaterWorldMap->trackLocation(item.mPosGlobal);
|
||||
gFloaterWorldMap->trackLocation(item.getGlobalPosition());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1832,7 +1826,7 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
|
||||
}
|
||||
|
||||
item.mSelected = TRUE;
|
||||
*id = item.mID;
|
||||
*id = item.getUUID();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -2167,7 +2161,7 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
|
||||
// Teleport if we got a valid location
|
||||
LLVector3d pos_global = viewPosToGlobal(x,y);
|
||||
LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
|
||||
if (sim_info && sim_info->mAccess != SIM_ACCESS_DOWN)
|
||||
if (sim_info && !sim_info->isDown())
|
||||
{
|
||||
gAgent.teleportViaLocation( pos_global );
|
||||
}
|
||||
|
||||
@@ -929,6 +929,8 @@ void LLPipeline::restoreGL()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resetLocalLights(); //Default all gl light parameters. Fixes light brightness problems on fullscren toggle
|
||||
}
|
||||
|
||||
|
||||
@@ -4679,6 +4681,29 @@ static F32 calc_light_dist(LLVOVolume* light, const LLVector3& cam_pos, F32 max_
|
||||
return dist;
|
||||
}
|
||||
|
||||
//Default all gl light parameters. Used upon restoreGL. Fixes brightness problems on fullscren toggle
|
||||
void LLPipeline::resetLocalLights()
|
||||
{
|
||||
glEnable(GL_LIGHTING);
|
||||
for (S32 i = 0; i < 8; ++i)
|
||||
{
|
||||
LLLightState *pLight = gGL.getLight(i);
|
||||
pLight->enable();
|
||||
pLight->setAmbient(LLColor4::black);
|
||||
pLight->setConstantAttenuation(0.f);
|
||||
pLight->setDiffuse(LLColor4::black);
|
||||
pLight->setLinearAttenuation(0.f);
|
||||
pLight->setPosition(LLVector4(0.f,0.f,0.f,0.f));
|
||||
pLight->setQuadraticAttenuation(0.f);
|
||||
pLight->setSpecular(LLColor4::black);
|
||||
pLight->setSpotCutoff(0.f);
|
||||
pLight->setSpotDirection(LLVector3(0.f,0.f,0.f));
|
||||
pLight->setSpotExponent(0.f);
|
||||
pLight->disable();
|
||||
}
|
||||
glDisable(GL_LIGHTING);
|
||||
}
|
||||
|
||||
void LLPipeline::calcNearbyLights(LLCamera& camera)
|
||||
{
|
||||
assertInitialized();
|
||||
@@ -4712,6 +4737,7 @@ void LLPipeline::calcNearbyLights(LLCamera& camera)
|
||||
LLVOVolume* volight = drawable->getVOVolume();
|
||||
if (!volight || !drawable->isState(LLDrawable::LIGHT))
|
||||
{
|
||||
setLight(drawable,false); //remove from mLight list
|
||||
drawable->clearState(LLDrawable::NEARBY_LIGHT);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -242,6 +242,7 @@ public:
|
||||
|
||||
S32 getLightCount() const { return mLights.size(); }
|
||||
|
||||
void resetLocalLights(); //Default all gl light parameters. Used upon restoreGL. Fixes light brightness problems on fullscren toggle
|
||||
void calcNearbyLights(LLCamera& camera);
|
||||
void setupHWLights(LLDrawPool* pool);
|
||||
void setupAvatarLights(BOOL for_edit = FALSE);
|
||||
|
||||
Reference in New Issue
Block a user