diff --git a/etc/message.xml b/etc/message.xml
index 04cdbc8f2..8dfd75e13 100644
--- a/etc/message.xml
+++ b/etc/message.xml
@@ -672,7 +672,10 @@
FetchInventoryDescendents
false
-
+
+ WebFetchInventoryDescendents
+ false
+
FetchInventory
true
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 3b1c1e467..11d3f7ab7 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -30,6 +30,8 @@ include(Versions)
include(UnixInstall)
+set (GCC_DISABLE_FATAL_WARNINGS TRUE)
+
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ReleaseSSE2 CACHE STRING
"Build type. One of: Debug Release ReleaseSSE2 RelWithDebInfo" FORCE)
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index 6aea07fd0..8391f3d2f 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -103,12 +103,10 @@ LLAssetDictionary::LLAssetDictionary()
//addEntry(LLAssetType::AT_FAVORITE, new AssetEntry("FAVORITE", "favorite", "", false, false, false));
addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "sym link", false, false, true));
addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "sym folder link", false, false, true));
- //addEntry(LLAssetType::AT_CURRENT_OUTFIT, new AssetEntry("FOLDER_LINK", "current", "current outfit", false, false, false));
- //addEntry(LLAssetType::AT_OUTFIT, new AssetEntry("OUTFIT", "outfit", "outfit", false, false, false));
- //addEntry(LLAssetType::AT_MY_OUTFITS, new AssetEntry("MY_OUTFITS", "my_otfts", "my outfits", false, false, false));
-#if MESH_ENABLED
- addEntry(LLAssetType::AT_MESH, new AssetEntry("MESH", "mesh", "mesh", false, false, false));
-#endif //MESH_ENABLED
+ addEntry(LLAssetType::AT_CURRENT_OUTFIT, new AssetEntry("FOLDER_LINK", "current", "current outfit", false, false, false));
+ addEntry(LLAssetType::AT_OUTFIT, new AssetEntry("OUTFIT", "outfit", "outfit", false, false, false));
+ addEntry(LLAssetType::AT_MY_OUTFITS, new AssetEntry("MY_OUTFITS", "my_otfts", "my outfits", false, false, false));
+ addEntry(LLAssetType::AT_MESH, new AssetEntry("MESH", "mesh", "mesh", false, true, true));
addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, false, false, false));
};
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 4590fc831..c253754ab 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -139,18 +139,16 @@ public:
// Inventory folder link
AT_LINK_FOLDER = 25,
- //AT_CURRENT_OUTFIT = 46,
+ AT_CURRENT_OUTFIT = 46,
- //AT_OUTFIT = 47,
+ AT_OUTFIT = 47,
- //AT_MY_OUTFITS = 48,
+ AT_MY_OUTFITS = 48,
-#if MESH_ENABLED
AT_MESH = 49,
// Mesh data in our proprietary SLM format
AT_COUNT = 50,
-#endif //MESH_ENABLED
// +*********************************************+
// | TO ADD AN ELEMENT TO THIS ENUM: |
// +*********************************************+
@@ -160,10 +158,6 @@ public:
// | 4. ADD TO LLAssetType::mAssetTypeHumanNames |
// +*********************************************+
- //AT_COUNT = 49,
-#if !MESH_ENABLED
- AT_COUNT = 26,
-#endif //!MESH_ENABLED
AT_NONE = -1
};
diff --git a/indra/llcommon/stdenums.h b/indra/llcommon/stdenums.h
index 1a5678dde..ef0582f95 100644
--- a/indra/llcommon/stdenums.h
+++ b/indra/llcommon/stdenums.h
@@ -55,7 +55,8 @@ enum EDragAndDropType
DAD_ANIMATION = 12,
DAD_GESTURE = 13,
DAD_LINK = 14,
- DAD_COUNT = 15, // number of types in this enum
+ DAD_MESH = 15,
+ DAD_COUNT = 16, // number of types in this enum
};
// Reasons for drags to be denied.
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index 9640d3e62..fc4829b2b 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -28,6 +28,11 @@
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
+#if LL_LINUX && defined(LL_STANDALONE)
+#include
+#include
+#endif
+
#include "linden_common.h"
#include "apr_pools.h"
@@ -85,9 +90,15 @@ void LLImageJ2C::openDSO()
j2cimpl_dso_memory_pool.create();
//attempt to load the shared library
+#if LL_LINUX && defined(LL_STANDALONE)
+ void *dso_handle = dlopen(dso_path.c_str(), RTLD_NOW | RTLD_GLOBAL);
+ rv = (!dso_handle)?APR_EDSOOPEN:apr_os_dso_handle_put(&j2cimpl_dso_handle,
+ dso_handle, j2cimpl_dso_memory_pool());
+#else
rv = apr_dso_load(&j2cimpl_dso_handle,
dso_path.c_str(),
j2cimpl_dso_memory_pool());
+#endif
//now, check for success
if ( rv == APR_SUCCESS )
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
index f4ab79d03..f833ec692 100644
--- a/indra/llinventory/llinventorytype.h
+++ b/indra/llinventory/llinventorytype.h
@@ -67,7 +67,9 @@ public:
IT_WEARABLE = 18,
IT_ANIMATION = 19,
IT_GESTURE = 20,
- IT_COUNT = 21,
+
+ IT_MESH = 22,
+ IT_COUNT = 23,
IT_NONE = -1
};
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 855d1cccf..ad6ab9111 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -43,6 +43,8 @@ F32 gPrehashVersionNumber = 2.000f;
char* _PREHASH_X = LLMessageStringTable::getInstance()->getString("X");
char* _PREHASH_Y = LLMessageStringTable::getInstance()->getString("Y");
char* _PREHASH_Z = LLMessageStringTable::getInstance()->getString("Z");
+char* _PREHASH_SizeX = LLMessageStringTable::getInstance()->getString("SizeX");
+char* _PREHASH_SizeY = LLMessageStringTable::getInstance()->getString("SizeY");
char* _PREHASH_AddFlags = LLMessageStringTable::getInstance()->getString("AddFlags");
char* _PREHASH_FailureInfo = LLMessageStringTable::getInstance()->getString("FailureInfo");
char* _PREHASH_MapData = LLMessageStringTable::getInstance()->getString("MapData");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index 77cfe710a..19a851a21 100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -43,6 +43,8 @@ extern F32 gPrehashVersionNumber;
extern char * _PREHASH_X;
extern char * _PREHASH_Y;
extern char * _PREHASH_Z;
+extern char * _PREHASH_SizeX;
+extern char * _PREHASH_SizeY;
extern char * _PREHASH_AddFlags;
extern char * _PREHASH_FailureInfo;
extern char * _PREHASH_MapData;
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 4b5420b6b..231b10bfa 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -65,6 +65,9 @@ endif (NOT WORD_SIZE EQUAL 32)
list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
add_library (llplugin ${llplugin_SOURCE_FILES})
+if(LINUX AND STANDALONE)
+ target_link_libraries (llplugin rt dl)
+endif(LINUX AND STANDALONE)
add_dependencies(llplugin prepare)
diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp
index 793fb22f4..a8da3051a 100644
--- a/indra/llplugin/llplugininstance.cpp
+++ b/indra/llplugin/llplugininstance.cpp
@@ -32,6 +32,10 @@
*
* @endcond
*/
+#if LL_LINUX && defined(LL_STANDALONE)
+#include
+#include
+#endif
#include "linden_common.h"
@@ -83,16 +87,25 @@ int LLPluginInstance::load(std::string &plugin_file)
{
pluginInitFunction init_function = NULL;
+#if LL_LINUX && defined(LL_STANDALONE)
+ void *dso_handle = dlopen(plugin_file.c_str(), RTLD_NOW | RTLD_GLOBAL);
+ int result = (!dso_handle)?APR_EDSOOPEN:apr_os_dso_handle_put(&mDSOHandle,
+ dso_handle, AIAPRRootPool::get()());
+#else
int result = apr_dso_load(&mDSOHandle,
plugin_file.c_str(),
LLAPRRootPool::get()());
+#endif
if(result != APR_SUCCESS)
{
char buf[1024];
apr_dso_error(mDSOHandle, buf, sizeof(buf));
+#if LL_LINUX && defined(LL_STANDALONE)
+ LL_WARNS("Plugin") << "plugin load " << plugin_file << " failed with error " << result << " , additional info string: " << buf << LL_ENDL;
+#else
LL_WARNS("Plugin") << "apr_dso_load of " << plugin_file << " failed with error " << result << " , additional info string: " << buf << LL_ENDL;
-
+#endif
}
if(result == APR_SUCCESS)
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index 0d68738e7..6ba2f323b 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -40,6 +40,7 @@
#include "llpluginmessageclasses.h"
#if LL_LINUX
#include
+#include
#endif
#include "llapr.h"
@@ -406,7 +407,23 @@ void LLPluginProcessParent::idle(void)
std::string const terminal_command = (env = getenv("LL_DEBUG_TERMINAL_COMMAND")) ? env : "/usr/bin/xterm -geometry 160x24+0+0 -e %s";
char const* const gdb_path = (env = getenv("LL_DEBUG_GDB_PATH")) ? env : "/usr/bin/gdb";
cmd << gdb_path << " -n /proc/" << mProcess.getProcessID() << "/exe " << mProcess.getProcessID();
- std::vector tokens = boost::program_options::split_unix(terminal_command, " ");
+
+ typedef boost::tokenizer< boost::escaped_list_separator<
+ char>, typename std::basic_string<
+ char>::const_iterator,
+ std::basic_string > tokenizerT;
+
+ tokenizerT tok(terminal_command.begin(),
+ terminal_command.end(),
+ boost::escaped_list_separator< char >("\\",
+ " ", "'\""));
+ std::vector< std::basic_string > tokens;
+ for (typename tokenizerT::iterator
+ cur_token(tok.begin()), end_token(tok.end());
+ cur_token != end_token; ++cur_token) {
+ if (!cur_token->empty())
+ tokens.push_back(*cur_token);
+ }
std::vector::iterator token = tokens.begin();
mDebugger.setExecutable(*token);
while (++token != tokens.end())
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 0a951e7e9..df583eb62 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -2418,6 +2418,12 @@ BOOL LLTextEditor::handleEditKey(const KEY key, const MASK mask)
}
}
+ if( handled )
+ {
+ // take selection to 'primary' clipboard
+ updatePrimary();
+ }
+
return handled;
}
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index 8d927f7e9..e5d61d180 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -49,6 +49,7 @@ set(llwindow_HEADER_FILES
set(viewer_SOURCE_FILES
llwindow.cpp
+ llmousehandler.cpp
)
set(viewer_HEADER_FILES
diff --git a/indra/llwindow/llmousehandler.cpp b/indra/llwindow/llmousehandler.cpp
new file mode 100644
index 000000000..8695e92f7
--- /dev/null
+++ b/indra/llwindow/llmousehandler.cpp
@@ -0,0 +1,58 @@
+/**
+ * @file llmousehandler.cpp
+ * @brief LLMouseHandler class implementation
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llmousehandler.h"
+
+//virtual
+BOOL LLMouseHandler::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down)
+{
+ BOOL handled = FALSE;
+ if (down)
+ {
+ switch (clicktype)
+ {
+ case CLICK_LEFT: handled = handleMouseDown(x, y, mask); break;
+ case CLICK_RIGHT: handled = handleRightMouseDown(x, y, mask); break;
+ case CLICK_MIDDLE: handled = handleMiddleMouseDown(x, y, mask); break;
+ case CLICK_DOUBLELEFT: handled = handleDoubleClick(x, y, mask); break;
+ default:
+ llwarns << "Unhandled enum." << llendl;
+ }
+ }
+ else
+ {
+ switch (clicktype)
+ {
+ case CLICK_LEFT: handled = handleMouseUp(x, y, mask); break;
+ case CLICK_RIGHT: handled = handleRightMouseUp(x, y, mask); break;
+ case CLICK_MIDDLE: handled = handleMiddleMouseUp(x, y, mask); break;
+ case CLICK_DOUBLELEFT: handled = handleDoubleClick(x, y, mask); break;
+ default:
+ llwarns << "Unhandled enum." << llendl;
+ }
+ }
+ return handled;
+}
diff --git a/indra/llwindow/llmousehandler.h b/indra/llwindow/llmousehandler.h
index f3a2edd8a..7bd0f2eeb 100644
--- a/indra/llwindow/llmousehandler.h
+++ b/indra/llwindow/llmousehandler.h
@@ -33,9 +33,10 @@
#ifndef LL_MOUSEHANDLER_H
#define LL_MOUSEHANDLER_H
-#include "llstring.h"
+#include "linden_common.h"
+#include "llrect.h"
-// Abstract interface.
+// Mostly-abstract interface.
// Intended for use via multiple inheritance.
// A class may have as many interfaces as it likes, but never needs to inherit one more than once.
@@ -49,13 +50,23 @@ public:
SHOW_IF_NOT_BLOCKED,
SHOW_ALWAYS,
} EShowToolTip;
+ typedef enum {
+ CLICK_LEFT,
+ CLICK_MIDDLE,
+ CLICK_RIGHT,
+ CLICK_DOUBLELEFT
+ } EClickType;
+ virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0;
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) = 0;
- virtual BOOL handleHover(S32 x, S32 y, MASK mask) = 0;
- virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) = 0;
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0;
+ virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask) = 0;
+ virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask) = 0;
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) = 0;
virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) = 0;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0;
+
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) = 0;
+ virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) = 0;
virtual BOOL handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) = 0;
virtual EShowToolTip getShowToolTip() { return SHOW_IF_NOT_BLOCKED; };
virtual const std::string& getName() const = 0;
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 2023beaf0..59c76d4d0 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -1372,7 +1372,7 @@ BOOL LLWindowSDL::pasteTextFromPrimary(LLWString &dst)
BOOL LLWindowSDL::copyTextToPrimary(const LLWString &s)
{
- return FALSE; // unsupported
+ return FALSE; // unsupported
}
#endif // LL_GTK
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index d46ffcdd9..a6b9ff4f9 100644
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -82,6 +82,7 @@ public:
/*virtual*/ void captureMouse();
/*virtual*/ void releaseMouse();
/*virtual*/ void setMouseClipping( BOOL b );
+
/*virtual*/ BOOL isClipboardTextAvailable();
/*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst);
/*virtual*/ BOOL copyTextToClipboard(const LLWString & src);
@@ -89,7 +90,7 @@ public:
/*virtual*/ BOOL isPrimaryTextAvailable();
/*virtual*/ BOOL pasteTextFromPrimary(LLWString &dst);
/*virtual*/ BOOL copyTextToPrimary(const LLWString & src);
-
+
/*virtual*/ void flashIcon(F32 seconds);
/*virtual*/ F32 getGamma();
/*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma
diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp
index ffbb91340..919fb758c 100644
--- a/indra/lscript/lscript_library/lscript_library.cpp
+++ b/indra/lscript/lscript_library/lscript_library.cpp
@@ -462,29 +462,35 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "llGetLinkNumberOfSides", "i", "i");
// IDEVO Name lookup calls, see lscript_avatar_names.h
- addFunction(10.f, 0.f, dummy_func, "llGetUsername", "s", "k");
- addFunction(10.f, 0.f, dummy_func, "llRequestUsername", "k", "k");
- addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");
+ addFunction(10.f, 0.f, dummy_func, "llGetUsername", "s", "k");
+ addFunction(10.f, 0.f, dummy_func, "llRequestUsername", "k", "k");
+ addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestDisplayName", "k", "k");
-
addFunction(10.f, 0.f, dummy_func, "llGetEnv", "s", "s");
addFunction(10.f, 0.f, dummy_func, "llRegionSayTo", NULL, "kis");
// Adding missing (more recent) LSL functions.
- addFunction(10.f, 0.f, dummy_func, "llCastRay", "l", "vvl");
- addFunction(10.f, 0.f, dummy_func, "llGetSPMaxMemory", "i", NULL);
- addFunction(10.f, 0.f, dummy_func, "llGetUsedMemory", "i", NULL);
- addFunction(10.f, 0.f, dummy_func, "llGodLikeRezObject", NULL, "kv");
- addFunction(10.f, 0.f, dummy_func, "llScriptProfiler", NULL, "i");
- addFunction(10.f, 0.f, dummy_func, "llSetInventoryPermMask", NULL, "sii");
- addFunction(10.f, 0.f, dummy_func, "llSetObjectPermMask", NULL, "ii");
-
- // energy, sleep, dummy_func, name, return type, parameters, help text, gods-only
-
- // IF YOU ADD NEW SCRIPT CALLS, YOU MUST PUT THEM AT THE END OF THIS LIST.
- // Otherwise the bytecode numbers for each call will be wrong, and all
- // existing scripts will crash.
+ addFunction(10.f, 0.f, dummy_func, "llCastRay", "l", "vvl");
+ addFunction(10.f, 0.f, dummy_func, "llGetSPMaxMemory", "i", NULL);
+ addFunction(10.f, 0.f, dummy_func, "llGetUsedMemory", "i", NULL);
+ addFunction(10.f, 0.f, dummy_func, "llGodLikeRezObject", NULL, "kv");
+ addFunction(10.f, 0.f, dummy_func, "llScriptProfiler", NULL, "i");
+ addFunction(10.f, 0.f, dummy_func, "llSetInventoryPermMask", NULL, "sii");
+ addFunction(10.f, 0.f, dummy_func, "llSetObjectPermMask", NULL, "ii");
+ // Even more recent
+ addFunction(10.f, 0.f, dummy_func, "llSetMemoryLimit", "i", "i");
+ addFunction(10.f, 0.f, dummy_func, "llSetLinkMedia", "i", "iil");
+ addFunction(10.f, 0.f, dummy_func, "llGetLinkMedia", "l", "iil");
+ addFunction(10.f, 0.f, dummy_func, "llClearLinkMedia", "i", "ii");
+ addFunction(10.f, 0.f, dummy_func, "llSetLinkCamera", NULL, "ivv");
+ addFunction(10.f, 0.f, dummy_func, "llSetContentType", NULL, "ki");
+ addFunction(10.f, 0.f, dummy_func, "llLinkSitTarget", NULL, "ivr");
+ addFunction(10.f, 0.f, dummy_func, "llAvatarOnLinkSitTarget", "k", "i");
+ /* No info on these new functions yet....
+ * addFunction(10.f, 0.f, dummy_func, "llSetVelocity", "", "");
+ * addFunction(10.f, 0.f, dummy_func, "llSetRotationalVelocity", "", "");
+ */
// REGARDING OSSL FUNCTIONS
// These additions should be posted underneath the llFunctions
@@ -496,6 +502,8 @@ void LLScriptLibrary::init()
// OSSL corrections and syntax additions added + set in same order as found in OSSL_stub.cs of OpenSim Source (Updated PM October-21-2010
// based on OpenSimulator Ver. 0.7.x DEV/Master Git # a7acb650d400a280a7b9edabd304376dff9c81af - a7acb65-r/14142
// Updates by WhiteStar Magic
+
+ // It should be noted though, that the order of OSSL functions is not important for correct functionality.
addFunction(10.f, 0.f, dummy_func, "osSetRegionWaterHeight", NULL, "f");
addFunction(10.f, 0.f, dummy_func, "osSetRegionSunSettings", NULL, "iif");
@@ -583,12 +591,15 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "osUnixTimeToTimestamp", "s", "i");
addFunction(10.f, 0.f, dummy_func, "osSetPenColor", NULL, "ss");
addFunction(10.f, 0.f, dummy_func, "osGetSunParam","f", "s");
- addFunction(10.f, 0.f, dummy_func, "osSetSunParam", "sf", NULL);
+ addFunction(10.f, 0.f, dummy_func, "osSetSunParam", NULL, "sf");
addFunction(10.f, 0.f, dummy_func, "osSetParcelDetails", NULL, "vl");
addFunction(10.f, 0.f, dummy_func, "osGetTerrainHeight", "f", "ii");
addFunction(10.f, 0.f, dummy_func, "osSetTerrainHeight", NULL, "iif");
addFunction(10.f, 0.f, dummy_func, "osGetAvatarList", "l", NULL);
addFunction(10.f, 0.f, dummy_func, "osTeleportOwner", NULL, "svv");
+ addFunction(10.f, 0.f, dummy_func, "osGetWindParam","f", "ss");
+ addFunction(10.f, 0.f, dummy_func, "osSetWindParam", NULL, "ssf");
+
// LightShare functions
addFunction(10.f, 0.f, dummy_func, "cmSetWindlightScene", "i", "l");
@@ -599,6 +610,20 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "lsSetWindlightScene", "i", "l");
addFunction(10.f, 0.f, dummy_func, "lsSetWindlightSceneTargeted", "i", "lk");
addFunction(10.f, 0.f, dummy_func, "lsGetWindlightScene", "l", "l");
+
+ // New OSSL functions 08-10-2011
+ addFunction(10.f, 0.f, dummy_func, "osNpcSaveAppearance", "k", "ks");
+ addFunction(10.f, 0.f, dummy_func, "osNpcLoadAppearance", NULL, "ks");
+ addFunction(10.f, 0.f, dummy_func, "osNpcMoveToTarget", NULL, "kvi");
+ addFunction(10.f, 0.f, dummy_func, "osOwnerSaveAppearance", "k", "s");
+
+ // More new stuffs
+ addFunction(10.f, 0.f, dummy_func, "osNpcGetRot", "r", "k");
+ addFunction(10.f, 0.f, dummy_func, "osNpcSetRot", NULL, "kr");
+ addFunction(10.f, 0.f, dummy_func, "osAgentSaveAppearance", "k", "ks");
+ addFunction(10.f, 0.f, dummy_func, "osNpcGetPos", "v", "k");
+ addFunction(10.f, 0.f, dummy_func, "osNpcStopMoveToTarget", NULL, "k");
+
}
LLScriptLibraryFunction::LLScriptLibraryFunction(F32 eu, F32 st, void (*exec_func)(LLScriptLibData *, LLScriptLibData *, const LLUUID &), const char *name, const char *ret_type, const char *args, BOOL god_only)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 1e347b6bd..3d3298acc 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -232,6 +232,7 @@ set(viewer_SOURCE_FILES
llfloaterproperties.cpp
llfloaterregioninfo.cpp
llfloaterreporter.cpp
+ llfloatersearchreplace.cpp
llfloaterscriptdebug.cpp
llfloatersellland.cpp
llfloatersettingsdebug.cpp
@@ -715,6 +716,7 @@ set(viewer_HEADER_FILES
llfloaterproperties.h
llfloaterregioninfo.h
llfloaterreporter.h
+ llfloatersearchreplace.h
llfloaterscriptdebug.h
llfloatersellland.h
llfloatersettingsdebug.h
diff --git a/indra/newview/app_settings/client_tags_sg1.xml b/indra/newview/app_settings/client_tags_sg1.xml
index 2bca70a9d..bdbd53003 100644
--- a/indra/newview/app_settings/client_tags_sg1.xml
+++ b/indra/newview/app_settings/client_tags_sg1.xml
@@ -1 +1,1443 @@
-
\ No newline at end of file
+
+
+
+ 841ef25b-3b90-caf9-ea3d-5649e755db65
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ adcbe893-7643-fd12-f61c-0b39717e2e32
+
+ name
+ tyk3n
+ color
+
+ 0.9921568627451
+ 0.5921568627451
+ 0.5843137254902
+ 1
+
+
+ ccb509cf-cc69-e569-38f1-5086c687afd1
+
+ name
+ Ruby
+ color
+
+ 0.86274509803922
+ 0.29411764705882
+ 0.38823529411765
+ 1
+
+
+ d3eb4a5f-aec5-4bcb-b007-cce9efe89d37
+
+ name
+ rivlife
+ color
+
+ 0.32941176470588
+ 0.42745098039216
+ 0.12156862745098
+ 1
+
+
+ c252d89d-6f7c-7d90-f430-d140d2e3fbbe
+
+ name
+ VLife
+ color
+
+ 0.9921568627451
+ 0.34509803921569
+ 0.1843137254902
+ 1
+
+ evil
+ true
+
+ 1c29480c-c608-df87-28bb-964fb64c5366
+
+ name
+ Gemini
+ color
+
+ 0.86274509803922
+ 0.76078431372549
+ 0.38823529411765
+ 1
+
+
+ 2c9c1e0b-e5d1-263e-16b1-7fc6d169f3d6
+
+ name
+ PhoxSL
+ color
+
+ 0.49411764705882
+ 0.84313725490196
+ 0.68235294117647
+ 1
+
+ evil
+ true
+
+ 0f6723d2-5b23-6b58-08ab-308112b33786
+
+ name
+ CryoLife
+ color
+
+ 0.32941176470588
+ 0.10980392156863
+ 0.78823529411765
+ 1
+
+ evil
+ true
+
+ 58a8b7ec-1455-7162-5d96-d3c3ead2ed71
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ f5a48821-9a98-d09e-8d6a-50cc08ba9a47
+
+ name
+ NeilLife
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.12156862745098
+ 1
+
+ evil
+ true
+
+ 734fed29-4c51-63e5-1648-6589949d7585
+
+ name
+ Explicit
+ color
+
+ 0.6
+ 0.42745098039216
+ 0.8078431372549
+ 1
+
+
+ ccda2b3b-e72c-a112-e126-fee238b67218
+
+ name
+ Emerald
+ color
+
+ 0.32941176470588
+ 0.89411764705882
+ 0.12156862745098
+ 1
+
+
+ 2a9a406c-f448-68f2-4e38-878f8c46c190
+
+ name
+ Meerkat
+ color
+
+ 0.9921568627451
+ 0.7921568627451
+ 0.53333333333333
+ 1
+
+
+ b6820989-bf42-ff59-ddde-fd3fd3a74fe4
+
+ name
+ Meerkat
+ color
+
+ 0.9921568627451
+ 0.7921568627451
+ 0.53333333333333
+ 1
+
+
+ 3ab7e2fa-9572-ef36-1a30-d855dbea4f92
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ 9422e9d7-7b11-83e4-6262-4a8db4716a3b
+
+ name
+ BetaLife
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.78823529411765
+ 1
+
+
+ 4da16427-d81e-e816-f346-aaf4741b8056
+
+ name
+ iLife
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.78823529411765
+ 1
+
+
+ ffce04ff-5303-4909-a044-d37af7ab0b0e
+
+ name
+ Corgi
+ color
+
+ 0.9921568627451
+ 0.5921568627451
+ 0.18039215686275
+ 1
+
+ evil
+ true
+
+ c5b570ca-bb7e-3c81-afd1-f62646b20014
+
+ name
+ Kung Fu
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.78823529411765
+ 1
+
+
+ cc7a030f-282f-c165-44d2-b5ee572e72bf
+
+ name
+ Imprudence
+ color
+
+ 0.8078431372549
+ 0.46666666666667
+ 0.81960784313725
+ 1
+
+
+ 4e8dcf80-336b-b1d8-ef3e-08dacf015a0f
+
+ name
+ Sapphire
+ color
+
+ 0.32941176470588
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 5aa5c70d-d787-571b-0495-4fc1bdef1500
+
+ name
+ LGG Proxy
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 0bcd5f5d-a4ce-9ea4-f9e8-15132653b3d8
+
+ name
+ MoyMix
+ color
+
+ 0.9921568627451
+ 0.56078431372549
+ 0.65490196078431
+ 1
+
+
+ 8183e823-c443-2142-6eb6-2ab763d4f81c
+
+ name
+ Day Oh proxy
+ color
+
+ 0.49411764705882
+ 0.34509803921569
+ 0.68235294117647
+ 1
+
+
+ 3da8a69a-58ca-023f-2161-57f2ab3b5702
+
+ name
+ Operator
+ color
+
+ 0
+ 0.73725490196078
+ 1
+ 1
+
+ evil
+ true
+
+ ed63fbd0-589e-fe1d-a3d0-16905efaa96b
+
+ name
+ Phoenix
+ color
+
+ 0.66274509803922
+ 0.22745098039216
+ 0.12549019607843
+ 1
+
+
+ 81b3e921-ee31-aa57-ff9b-ec1f28e41da1
+
+ name
+ Infinity
+ color
+
+ 0.72941176470588
+ 0.62745098039216
+ 0.38823529411765
+ 1
+
+
+ 5262d71a-88f7-ef40-3b15-00ea148ab4b5
+
+ name
+ Gemini.Bot
+ color
+
+ 0.86274509803922
+ 0.76078431372549
+ 0.38823529411765
+ 1
+
+
+ 77662f23-c77a-9b4d-5558-26b757b2144c
+
+ name
+ PSL
+ color
+
+ 0.7921568627451
+ 0.44313725490196
+ 0.58039215686275
+ 1
+
+
+ e734563e-1c31-2a35-3ed5-8552c807439f
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ f3fd74a6-fee7-4b2f-93ae-ddcb5991da04
+
+ name
+ PSL
+ color
+
+ 0.7921568627451
+ 0.44313725490196
+ 0.58039215686275
+ 1
+
+
+ f5feab57-bde5-2074-97af-517290213eaa
+
+ name
+ Onyx
+ color
+
+ 0.36078431372549
+ 0.36078431372549
+ 0.36078431372549
+ 1
+
+ evil
+ true
+
+ e52d21f7-3c8b-819f-a3db-65c432295dac
+
+ name
+ CryoLife
+ color
+
+ 0.32941176470588
+ 0.10980392156863
+ 0.78823529411765
+ 1
+
+ evil
+ true
+
+ 7c4d47a3-0c51-04d1-fa47-e4f3ac12f59b
+
+ name
+ Kung Fu
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.78823529411765
+ 1
+
+
+ 92fc8bff-c604-815a-a716-60be97ed53d1
+
+ name
+ Banana
+ color
+
+ 1
+ 0.6
+ 0.10196078431373
+ 1
+
+
+ b32f01bc-f9b3-4535-b1f3-99dc38f022db
+
+ name
+ Meta7
+ color
+
+ 1
+ 1
+ 1
+ 1
+
+
+ 8873757c-092a-98fb-1afd-ecd347566fcd
+
+ name
+ Ascent
+ color
+
+ 0.37647058823529
+ 1
+ 1
+ 1
+
+
+ 28b4da3f-5f9b-f44e-1387-6a115ab482c5
+
+ name
+ Diamond
+ color
+
+ 0.8156862745098
+ 0.7921568627451
+ 0.68235294117647
+ 1
+
+
+ c1936b62-6db5-1bc2-cfb6-54b040db74b4
+
+ name
+ Shenanigans
+ color
+
+ 0.7843137254902
+ 0.7843137254902
+ 0.47058823529412
+ 1
+
+
+ 7d65a82d-df53-1e5d-65ea-f82c98fa9d16
+
+ name
+ BSD
+ color
+
+ 0.63137254901961
+ 0.12549019607843
+ 0.93725490196078
+ 1
+
+
+ 287aaa37-2f88-275a-edf4-7ea6bb82fb8d
+
+ name
+ lolcat
+ color
+
+ 0.69803921568627
+ 0.13333333333333
+ 0.13333333333333
+ 1
+
+
+ 806a8249-e235-f051-ac4c-0a58b570f1c1
+
+ name
+ Luna
+ color
+
+ 0.43921568627451
+ 0.72156862745098
+ 1
+ 1
+
+
+ d64bf2e9-651f-0b6e-9e8f-4311d42287e3
+
+ name
+ Pie_Viewer
+ color
+
+ 0.49803921568627
+ 0.24705882352941
+ 1
+ 1
+
+
+ 29705410-bcdf-bfd5-e811-5fca794dfbc1
+
+ name
+ HippoMeow
+ color
+
+ 0.2
+ 0.95686274509804
+ 1
+ 1
+
+
+ e8dd2ab3-e074-710c-bac9-e80790990bff
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ b8c99aa0-6e82-0a84-3fc9-f73dc89471c2
+
+ name
+ ProlapsedPussyLife
+ color
+
+ 0.66666666666667
+ 0
+ 0.6
+ 1
+
+
+ ffb65745-2120-e248-33e0-13dd9166b3ba
+
+ name
+ TWH
+ color
+
+ 1
+ 0.12941176470588
+ 0.12941176470588
+ 1
+
+ evil
+ true
+
+ b33b69ae-6b6c-b395-0175-ce76a871173b
+
+ name
+ Nicholas
+ color
+
+ 0.4
+ 0.26666666666667
+ 1
+ 1
+
+
+ af8c86bd-c377-c331-7476-58abeb7af8fc
+
+ name
+ The Sorcerer
+ color
+
+ 0.54117647058824
+ 0.16862745098039
+ 0.88627450980392
+ 1
+
+
+ 049af712-22c9-b2c4-50c7-90a9f1d1e5ef
+
+ name
+ GNR
+ color
+
+ 0.90196078431373
+ 0.90196078431373
+ 0.90196078431373
+ 1
+
+
+ 9ee02f6b-c244-75d4-1737-da8afb9d8d52
+
+ name
+ Hacked
+ color
+
+ 0.93333333333333
+ 0.93333333333333
+ 1
+ 1
+
+
+ ed943d3f-7a29-8339-11b9-cd0c06a1241b
+
+ name
+ /yiff/
+ color
+
+ 0.47843137254902
+ 0.47843137254902
+ 0.47843137254902
+ 1
+
+
+ 4ca51a79-41c0-91ec-7c58-a5195951bda2
+
+ name
+ Horny Thel
+ color
+
+ 1
+ 0.27058823529412
+ 0
+ 1
+
+
+ 8cc85294-c3d9-8f9f-e507-c324ef49786e
+
+ name
+ IncognitoLife
+ color
+
+ 0
+ 0
+ 0
+ 1
+
+
+ 91144252-196e-bac9-3737-92752eee612d
+
+ name
+ Canine
+ color
+
+ 0.87058823529412
+ 0.85882352941176
+ 1
+ 1
+
+
+ 9995490f-b248-46f2-91ed-910289676f99
+
+ name
+ $
+ color
+
+ 0.25490196078431
+ 0.25490196078431
+ 0.25490196078431
+ 1
+
+
+ 745ac6b7-5b03-450d-6b01-577da127d7d2
+
+ name
+ Zidonuke
+ color
+
+ 0
+ 0
+ 0.58823529411765
+ 1
+
+
+ d2fd7988-786f-40bc-54cb-c2ad557a639d
+
+ name
+ Firestorm
+ color
+
+ 0.94117647058824
+ 0
+ 0
+ 1
+
+
+ bb7fba3a-e7e0-14d6-b1ae-ce43f67745ab
+
+ name
+ Apple Life
+ color
+
+ 0
+ 1
+ 0.003921568627451
+ 1
+
+
+ c3e958f3-cfb5-9e8b-edb7-d12d5c0623d5
+
+ name
+ Winky
+ color
+
+ 0.26274509803922
+ 0.43137254901961
+ 0.93333333333333
+ 1
+
+
+ 54d93609-1392-2a93-255c-a9dd429ecca5
+
+ name
+ Emergence
+ color
+
+ 0.8156862745098
+ 0
+ 0
+ 1
+
+
+ 57f9da7c-0323-c412-58be-80b0441b887e
+
+ name
+ Neon Glow
+ color
+
+ 0.28235294117647
+ 0.25490196078431
+ 0.90980392156863
+ 1
+
+
+ 481a055f-36b5-af82-ac49-24709f013e50
+
+ name
+ Nano
+ color
+
+ 0.70588235294118
+ 0.84705882352941
+ 0
+ 1
+
+
+ f25263b7-6167-4f34-a4ef-af65213b2e39
+
+ name
+ Singularity
+ color
+
+ 0.70588235294118
+ 0.7843137254902
+ 0.7843137254902
+ 1
+
+
+ 734bae36-a197-b087-ee2d-a098d58fed55
+
+ name
+ Moreland Grove
+ color
+
+ 1
+ 0.49803921568627
+ 0.49803921568627
+ 1
+
+
+ 6c622b79-b49d-b5da-e4d1-2f45ecec6106
+
+ name
+ Volt Viewer
+ color
+
+ 1
+ 1
+ 0
+ 1
+
+
+ f8551a21-c960-5132-366a-f55ea63d97c3
+
+ name
+ Hacker
+ color
+
+ 0.64313725490196
+ 0.64313725490196
+ 0.64313725490196
+ 1
+
+
+ 4e6c4027-9bbd-2dc5-2c00-c55a08fd49d1
+
+ name
+ DOWN SYNDROME
+ color
+
+ 0.082352941176471
+ 0.074509803921569
+ 0.074509803921569
+ 1
+
+
+ 2b459a3b-5420-21a1-7dda-eccf02de6c37
+
+ name
+ Sun
+ color
+
+ 0.25490196078431
+ 0.36862745098039
+ 0.52549019607843
+ 1
+
+
+ af22a7af-a3f9-b4e4-79de-3d9f4653f9e3
+
+ name
+ Foxy!
+ color
+
+ 0.74509803921569
+ 0.23529411764706
+ 0.19607843137255
+ 1
+
+
+ 4b84e182-f0cc-d8da-94c8-25b59c4e4b99
+
+ name
+ Deus Ex Machina
+ color
+
+ 0.98039215686275
+ 0.54901960784314
+ 0
+ 1
+
+
+ 01f13da6-fd61-82be-5a8b-68f2d165d8cd
+
+ name
+ Smilodon
+ color
+
+ 1
+ 0.50196078431373
+ 0
+ 1
+
+
+ 4b6f6b75-bf77-d1ff-0000-000000000000
+
+ name
+ Kokua
+ color
+
+ 0.74901960784314
+ 0.46666666666667
+ 0.8078431372549
+ 1
+
+
+ 9a4d13d4-b36b-ff89-715b-9b53091c1473
+
+ name
+ SuperLife
+ color
+
+ 0.88235294117647
+ 0.88235294117647
+ 0
+ 1
+
+
+ bdef8fc2-df54-fa80-757a-f7f346bbcf77
+
+ name
+ KoreDEV
+ color
+
+ 0.54509803921569
+ 0.27058823529412
+ 0.074509803921569
+ 1
+
+
+ d0770263-aec5-6a26-f987-37c14e8f6523
+
+ name
+ HXO-Life
+ color
+
+ 0
+ 0
+ 0.88235294117647
+ 1
+
+ evil
+ true
+
+ 1a1d86b2-edda-aa01-6e23-5b0cc7c2fe35
+
+ name
+ S3aian
+ color
+
+ 0.047058823529412
+ 0.003921568627451
+ 0.88235294117647
+ 1
+
+
+ 3386a955-641c-1113-18e7-d4a5165a62bd
+
+ name
+ StreetLife
+ color
+
+ 0.54509803921569
+ 0.54509803921569
+ 0.51372549019608
+ 1
+
+
+ 14ae222f-cf97-fcff-6b90-21593d824dbd
+
+ name
+ FuckLife
+ color
+
+ 0.03921568627451
+ 0.015686274509804
+ 0.07843137254902
+ 1
+
+
+ b2848bed-38b3-3d6b-6ebe-7b4cb7d4994a
+
+ name
+ KoreDEV-Ghost
+ color
+
+ 0.03921568627451
+ 0.19607843137255
+ 0.07843137254902
+ 1
+
+
+ c58fca06-33b3-827d-d81c-a886a631affc
+
+ name
+ Whale
+ color
+
+ 1
+ 0.61176470588235
+ 0
+ 1
+
+
+ a1057672-e67b-7b40-118c-4e6898457dcb
+
+ name
+ TeeLife
+ color
+
+ 0.35294117647059
+ 0
+ 0.003921568627451
+ 1
+
+
+ f709044d-3f7e-3d94-6c40-17e9d456d35a
+
+ name
+ God Proxy
+ color
+
+ 0
+ 0.86666666666667
+ 0
+ 1
+
+
+ 0b6bc011-15c7-721d-f4c9-cdbaf3448dba
+
+ name
+ MoonBot
+ color
+
+ 0.58823529411765
+ 0.15686274509804
+ 0.90196078431373
+ 1
+
+
+ f40db76a-f6fc-449f-a6e8-47e1484fa294
+
+ name
+ JoinOurHomoMafia
+ color
+
+ 1
+ 0.31372549019608
+ 0.65882352941176
+ 1
+
+
+ 2d02f0a7-48a0-46b3-944f-6a0a7523aaf6
+
+ name
+ HomoLife
+ color
+
+ 0.85882352941176
+ 0.035294117647059
+ 0.43137254901961
+ 1
+
+
+ 3f23c201-e73a-4b86-b294-5fef9919dc23
+
+ name
+ Shotta
+ color
+
+ 0
+ 0.50196078431373
+ 1
+ 1
+
+
+ c1d1a634-7d1f-70ac-513e-471c3a81d01b
+
+ name
+ c1Tanzanite
+ color
+
+ 0.54509803921569
+ 0.035294117647059
+ 0.96470588235294
+ 1
+
+
+ 397554b9-3e2f-4255-5fde-76f93e71295b
+
+ name
+ Genesis
+ color
+
+ 0.74901960784314
+ 0.74901960784314
+ 0.74901960784314
+ 1
+
+
+ e5a99018-4886-d48d-4793-54514f3c5a7b
+
+ name
+ MarzWorld
+ color
+
+ 0.82745098039216
+ 0.82745098039216
+ 0.82745098039216
+ 1
+
+
+ 869e0c1a-a2d9-4b92-bd70-5044d6bd2284
+
+ name
+ Bluebird
+ color
+
+ 0.019607843137255
+ 0.58823529411765
+ 0.9843137254902
+ 1
+
+
+ 8cdf6c66-2f8f-1aa9-f8ee-0493acf90328
+
+ name
+ Nexus
+ color
+
+ 0.4078431372549
+ 0.13333333333333
+ 0.54509803921569
+ 1
+
+
+ 1fb9ce5c-bb36-a0c1-72b5-e4f3406c6d56
+
+ name
+ Lucid
+ color
+
+ 0.67843137254902
+ 0.98823529411765
+ 0.97254901960784
+ 1
+
+
+ 6043a54c-b320-523a-ed15-a8fdd2ebc923
+
+ name
+ Blunix
+ color
+
+ 0.047058823529412
+ 0
+ 1
+ 1
+
+
+ 611300d4-9188-102f-9530-68c7f52dc17a
+
+ name
+ C1501
+ color
+
+ 0.98039215686275
+ 0.38039215686275
+ 0.57647058823529
+ 1
+
+
+ e46e7c2b-1de3-5347-db43-42ee4e1f5bf2
+
+ name
+ Vos
+ color
+
+ 0.70588235294118
+ 0.70588235294118
+ 0.70588235294118
+ 1
+
+
+ 697e702f-29e2-2a31-8dcd-b53f5c25a27c
+
+ name
+ Milkshake
+ color
+
+ 0.74509803921569
+ 0.63137254901961
+ 0.52549019607843
+ 1
+
+
+ ae4e92fb-023d-23ba-d060-3403f953ab1a
+
+ name
+ Phoenix
+ color
+
+ 0.99607843137255
+ 0.56078431372549
+ 0.65490196078431
+ 1
+
+
+ 5d9581af-d615-bc16-2667-2f04f8eeefe4
+
+ name
+ Phoenix
+ color
+
+ 0.32941176470588
+ 0.89411764705882
+ 0.12156862745098
+ 1
+
+
+ 5f0e7c32-38c3-9214-01f0-fb16a5b40128
+
+ name
+ Phoenix
+ color
+
+ 1
+ 1
+ 0.1843137254902
+ 1
+
+
+ e35f7d40-6071-4b29-9727-5647bdafb5d5
+
+ name
+ Phoenix
+ color
+
+ 1
+ 1
+ 1
+ 1
+
+
+ e71b780e-1a57-400d-4649-959f69ec7d51
+
+ name
+ Phoenix
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 5bb6e4a6-8e24-7c92-be2e-91419bb0ebcb
+
+ name
+ Phoenix
+ color
+
+ 0.34901960784314
+ 0.34901960784314
+ 1
+ 1
+
+
+ e4117c3f-cc02-d537-665d-c31b8c11bb18
+
+ name
+ Emerald
+ color
+
+ 1
+ 0
+ 1
+ 1
+
+
+ 8cf0577c-22d3-6a73-523c-15c0a90d6c27
+
+ name
+ Phoenix
+ color
+
+ 0.72941176470588
+ 0.36078431372549
+ 0.65490196078431
+ 1
+
+
+ ddf41cfa-f5c5-0dee-3ed9-f3fb0adb1ead
+
+ name
+ Phoenix
+ color
+
+ 1
+ 0
+ 1
+ 1
+
+
+ dd0ccfa2-8124-b165-176d-f3dc08f4189e
+
+ name
+ Phoenix
+ color
+
+ 0.50196078431373
+ 0
+ 1
+ 1
+
+
+ c1c189f5-6dab-fc03-ea5a-f9f68f90b018
+
+ name
+ Phoenix
+ color
+
+ 0.99607843137255
+ 0.39607843137255
+ 0.12156862745098
+ 1
+
+
+ bf33bd15-7020-cce1-3725-48923440b7ee
+
+ name
+ Emerald
+ color
+
+ 0.98039215686275
+ 0.69019607843137
+ 0.34117647058824
+ 1
+
+
+ 1e0948ab-706a-b309-434c-a694436a79be
+
+ name
+ Emerald
+ color
+
+ 1
+ 1
+ 1
+ 1
+
+
+ 072343d0-1ce9-0952-4106-5312af4a789a
+
+ name
+ Emerald
+ color
+
+ 0.99607843137255
+ 0.56078431372549
+ 0.65490196078431
+ 1
+
+
+ 1da8eb54-a70f-bd4a-77e5-c7b815c3b2a2
+
+ name
+ Emerald
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 4eb67510-0924-ebb1-50ca-8af5694cd267
+
+ name
+ Emerald
+ color
+
+ 0.34901960784314
+ 0.34901960784314
+ 1
+ 1
+
+
+ e741e2bf-cf8c-191c-97f2-b2709a843dfc
+
+ name
+ Emerald
+ color
+
+ 0.99607843137255
+ 0.39607843137255
+ 0.12156862745098
+ 1
+
+
+ 8078ffb3-840c-d037-caf3-5cd02c2e7040
+
+ name
+ Emerald
+ color
+
+ 1
+ 1
+ 0.1843137254902
+ 1
+
+
+ 602243f4-8fb1-ac00-d5bc-7ab50c4433b7
+
+ name
+ Emerald
+ color
+
+ 0.50196078431373
+ 0
+ 1
+ 1
+
+
+ 0ae2f973-98c1-a4e8-9f4b-9db2044ab079
+
+ name
+ Emerald
+ color
+
+ 0.72941176470588
+ 0.36078431372549
+ 0.65490196078431
+ 1
+
+
+ b748af88-58e2-995b-cf26-9486dea8e830
+
+ name
+ Radegast
+ color
+
+ 0.56862
+ 0.78431
+ 1
+ 1
+
+
+ isComplete
+ true
+
+
diff --git a/indra/newview/app_settings/grass.xml b/indra/newview/app_settings/grass.xml
index 4fc3b798a..e59487c2b 100644
--- a/indra/newview/app_settings/grass.xml
+++ b/indra/newview/app_settings/grass.xml
@@ -1,47 +1,46 @@
-
\ No newline at end of file
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ae3059556..3cb5445cd 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -212,7 +212,7 @@
Type
Boolean
Value
- 0
+ 1
MediaFilterRect
@@ -14538,5 +14538,27 @@
Value
1
+ LastGrass
+
+ Comment
+ The last grass selected in the create dialog
+ Persist
+ 1
+ Type
+ String
+ Value
+ Random
+
+ LastTree
+
+ Comment
+ The last tree selected in the create dialog
+ Persist
+ 1
+ Type
+ String
+ Value
+ Random
+
diff --git a/indra/newview/app_settings/windlight/days/Colder%20Tones.xml b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
new file mode 100644
index 000000000..63d0b099e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
@@ -0,0 +1,28 @@
+
+
+
+ 0
+ Midnight
+
+
+ 0.24999989569187164
+ Purple
+
+
+ 0.49999979138374329
+ Blue Midday
+
+
+ 0.74999970197677612
+ Blizzard
+
+
+ 0.87499958276748657
+ Ghost
+
+
+ 0.99999958276748657
+ Midnight
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
new file mode 100644
index 000000000..f75b52e6e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
@@ -0,0 +1,32 @@
+
+
+
+ 0
+ Night
+
+
+ 0.12499994784593582
+ Blizzard
+
+
+ 0.24999989569187164
+ Sunrise
+
+
+ 0.49999979138374329
+ Midday 3
+
+
+ 0.68749970197677612
+ Pirate
+
+
+ 0.81249970197677612
+ Coastal Sunset
+
+
+ 0.99999958276748657
+ Midnight
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
new file mode 100644
index 000000000..6dc1ba9f4
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
@@ -0,0 +1,44 @@
+
+
+
+ 0
+ A-12AM
+
+
+ 0.12499994784593582
+ A-3AM
+
+
+ 0.22222213447093964
+ Barcelona
+
+
+ 0.30208322405815125
+ Sunrise
+
+
+ 0.37499985098838806
+ Sailor's Delight
+
+
+ 0.53819423913955688
+ Coastal Afternoon
+
+
+ 0.63194417953491211
+ Pirate
+
+
+ 0.7048608660697937
+ Desert Sunset
+
+
+ 0.74999970197677612
+ Coastal Sunset
+
+
+ 0.87499958276748657
+ Blizzard
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
new file mode 100644
index 000000000..302af5a9b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
@@ -0,0 +1,72 @@
+
+
+
+ 0
+ Sheer Surreality
+
+
+ 0.062499973922967911
+ A-12AM
+
+
+ 0.12499994784593582
+ Sheer Surreality
+
+
+ 0.18749992549419403
+ A-3AM
+
+
+ 0.24999989569187164
+ Sheer Surreality
+
+
+ 0.31249985098838806
+ A-6AM
+
+
+ 0.37499985098838806
+ Sheer Surreality
+
+
+ 0.43749979138374329
+ A-9AM
+
+
+ 0.49999979138374329
+ Sheer Surreality
+
+
+ 0.5624997615814209
+ A-12PM
+
+
+ 0.62499970197677612
+ Sheer Surreality
+
+
+ 0.68749970197677612
+ A-3PM
+
+
+ 0.74999970197677612
+ Sheer Surreality
+
+
+ 0.81249970197677612
+ A-6PM
+
+
+ 0.87499958276748657
+ Sheer Surreality
+
+
+ 0.93749958276748657
+ A-9PM
+
+
+ 0.99999958276748657
+ Sheer Surreality
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Tropicalia.xml b/indra/newview/app_settings/windlight/days/Tropicalia.xml
new file mode 100644
index 000000000..89a56d4a1
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Tropicalia.xml
@@ -0,0 +1,32 @@
+
+
+
+ 0.062499973922967911
+ Purple
+
+
+ 0.16666659712791443
+ Funky Funky
+
+
+ 0.31249985098838806
+ Sunrise
+
+
+ 0.49999979138374329
+ Fine Day
+
+
+ 0.66666638851165771
+ Desert Sunset
+
+
+ 0.74999970197677612
+ Sailor's Delight
+
+
+ 0.95833295583724976
+ Midnight
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Weird-O.xml b/indra/newview/app_settings/windlight/days/Weird-O.xml
new file mode 100644
index 000000000..1e312f246
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Weird-O.xml
@@ -0,0 +1,56 @@
+
+
+
+ 0
+ Funky Funky
+
+
+ 0.13194438815116882
+ Funky Funky Funky
+
+
+ 0.26041656732559204
+ Gelatto
+
+
+ 0.40624985098838806
+ Funky Funky Funky
+
+
+ 0.43749979138374329
+ Ghost
+
+
+ 0.46874979138374329
+ Gelatto
+
+
+ 0.5486108660697937
+ Sheer Surreality
+
+
+ 0.6076386570930481
+ Gelatto
+
+
+ 0.68055528402328491
+ Ghost
+
+
+ 0.75694411993026733
+ Sheer Surreality
+
+
+ 0.87847185134887695
+ Gelatto
+
+
+ 0.91319411993026733
+ Funky Funky Funky
+
+
+ 0.96527737379074097
+ Funky Funky Funky
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/B5%2DShadowDancing.xml b/indra/newview/app_settings/windlight/skies/B5%2DShadowDancing.xml
new file mode 100644
index 000000000..a1a8f026d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/B5%2DShadowDancing.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.08999999612569809
+
+ blue_density
+
+ 0.37999999523162842
+ 0.37999999523162842
+ 0.37999999523162842
+ 0.18999999761581421
+
+ blue_horizon
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.34999999403953552
+
+ cloud_color
+
+ 0
+ 0
+ 0
+ 0
+
+ cloud_pos_density1
+
+ 0.2800000011920929
+ 0.59999996423721313
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 0.2199999988079071
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.069999776780605
+ 9.9299997761845589
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00039999998989515007
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.6000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.7017695903778076
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.5099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 13.600001335144043
+ 0.0010000000474974513
+ -0.39999997615814209
+ 1
+
+ haze_density
+
+ 0.81999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.59999996423721313
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.42413315176963806
+ 0.087851203978061676
+ -0.90132862329483032
+ 0
+
+ max_y
+
+ 2562
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0.74000000953674316
+ sun_angle
+ 0.087964601814746857
+ sunlight_color
+
+ 1.1999999284744263
+ 1.1999999284744263
+ 1.1999999284744263
+ 0.39999997615814209
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Annas%20Many%20Murders.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Annas%20Many%20Murders.xml
new file mode 100644
index 000000000..f585ddb6d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Annas%20Many%20Murders.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.08999999612569809
+ 0
+ 0.070000000298023224
+
+ blue_density
+
+ 0.17999999225139618
+ 0.19999998807907104
+ 0.14000000059604645
+ 0.2199999988079071
+
+ blue_horizon
+
+ 0.29999998211860657
+ 0.17999999225139618
+ 0.19999998807907104
+ 0.29999998211860657
+
+ cloud_color
+
+ 0.61000001430511475
+ 0.53999996185302734
+ 0.56000000238418579
+ 0.61000001430511475
+
+ cloud_pos_density1
+
+ 0.44999998807907104
+ 0.55000001192092896
+ 0.059999998658895493
+ 1
+
+ cloud_pos_density2
+
+ 0.53999996185302734
+ 0.47999998927116394
+ 0.039999999105930328
+ 1
+
+ cloud_scale
+
+ 0.18000000715255737
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 12.989999771118164
+ 10.510000228881836
+
+ cloud_shadow
+
+ 0.63999998569488525
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 23
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.0106194019317627
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17000000178813934
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.90482699871063232
+ 1.7484555314695172e-007
+ -0.42577937245368958
+ 0
+
+ max_y
+
+ 322
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 6.2831854820251465
+ sunlight_color
+
+ 0.65999996662139893
+ 0.53999996185302734
+ 0.59999996423721313
+ 0.65999996662139893
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20BLUNIVERSE.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20BLUNIVERSE.xml
new file mode 100644
index 000000000..8c2082e43
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20BLUNIVERSE.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0.14999999105930328
+ 0.14999999105930328
+
+ blue_density
+
+ 0
+ 0.37999999523162842
+ 0.56000000238418579
+ 0.56000000238418579
+
+ blue_horizon
+
+ 0.45999997854232788
+ 0.37999999523162842
+ 0.57999998331069946
+ 0.57999998331069946
+
+ cloud_color
+
+ 0.11999999731779099
+ 0.10999999940395355
+ 0.11999999731779099
+ 0.11999999731779099
+
+ cloud_pos_density1
+
+ 0.69999998807907104
+ 0.34999999403953552
+ 0.79999995231628418
+ 1
+
+ cloud_pos_density2
+
+ 0.29999998211860657
+ 0.17000000178813934
+ 0.17000000178813934
+ 1
+
+ cloud_scale
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.359999656677246
+ 10.029999732971191
+
+ cloud_shadow
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 9.9999997473787516e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.1938052177429199
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.8000011444091797
+ 0.0010000000474974513
+ -1.5999999046325684
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.35999998450279236
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.76900023221969604
+ 0.56208312511444092
+ -0.30446872115135193
+ 0
+
+ max_y
+
+ 349
+ 0
+ 0
+ 1
+
+ preset_num
+ 24
+ star_brightness
+ 2
+ sun_angle
+ 2.5446903705596924
+ sunlight_color
+
+ 1.4099999666213989
+ 1.6500000953674316
+ 2.0399999618530273
+ 2.0399999618530273
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Immersiva%20Grey%20Dust.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Immersiva%20Grey%20Dust.xml
new file mode 100644
index 000000000..2a07b39d0
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Immersiva%20Grey%20Dust.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.23999999463558197
+ 0.029999999329447746
+ 0.32999998331069946
+
+ blue_density
+
+ 0.15999999642372131
+ 0.15999999642372131
+ 0.47999998927116394
+ 0.47999998927116394
+
+ blue_horizon
+
+ 0.19999998807907104
+ 0.19999998807907104
+ 0.43999999761581421
+ 0.43999999761581421
+
+ cloud_color
+
+ 0.48999997973442078
+ 0.50999999046325684
+ 0.64999997615814209
+ 0.64999997615814209
+
+ cloud_pos_density1
+
+ 0.48999997973442078
+ 0.50999999046325684
+ 0.2199999988079071
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.039999999105930328
+ 1
+
+ cloud_scale
+
+ 0.11999999731779099
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.659999847412109
+ 20
+
+ cloud_shadow
+
+ 0.70999997854232788
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00018999999156221747
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.3876104354858398
+ enable_cloud_scroll
+
+ 1
+ 0
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -0.29999998211860657
+ 1
+
+ haze_density
+
+ 3.7799999713897705
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.64833343029022217
+ 0.32094338536262512
+ 0.69040501117706299
+ 0
+
+ max_y
+
+ 376
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 2.8148672580718994
+ sunlight_color
+
+ 0.75
+ 0.71999996900558472
+ 0.77999997138977051
+ 0.77999997138977051
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Mayfly.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Mayfly.xml
new file mode 100644
index 000000000..272d1e041
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Mayfly.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.23999999463558197
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0.15999999642372131
+ 0.43999999761581421
+ 0.89999997615814209
+ 0.89999997615814209
+
+ blue_horizon
+
+ 0
+ 0
+ 0.059999998658895493
+ 0.029999999329447746
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.31999999284744263
+ 0.22999998927116394
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.98999994993209839
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.15000000596046448
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.359999656677246
+ 10.219999313354492
+
+ cloud_shadow
+
+ 0.42999997735023499
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00052000000141561031
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 3.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.8380527496337891
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 7.7999997138977051
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.1100000143051147
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.12999999523162842
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.98646044731140137
+ 0.10661106556653976
+ -0.12461899220943451
+ 0
+
+ max_y
+
+ 591
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.71999996900558472
+ sun_angle
+ 3.0347785949707031
+ sunlight_color
+
+ 1.5
+ 1.5299999713897705
+ 2.8499999046325684
+ 0.94999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20blue%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20blue%20%28Paulina%29.xml
new file mode 100644
index 000000000..a426aac29
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20blue%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.2300000190734863
+ 1.2300000190734863
+ 1.1914535760879517
+ 0.40999999642372131
+
+ blue_density
+
+ 0.2199999988079071
+ 0.57999998331069946
+ 0.55851858854293823
+ 0.68000000715255737
+
+ blue_horizon
+
+ 0.2159720099190805
+ 0.36269319055529792
+ 0.41333344578742803
+ 0.62444435060024084
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00011000000085914508
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 6.2831854820251465
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 1.2670240323586768e-007
+ 0.68911367654800415
+ -0.72465324401855469
+ 0
+
+ max_y
+
+ 403
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2999999523162842
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 0.52803641557693481
+ 0.52897685766220093
+ 0.56999999284744263
+ 0.18999999761581421
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20dark%20blue%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20dark%20blue%20%28Paulina%29.xml
new file mode 100644
index 000000000..4fbdfe121
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20dark%20blue%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.58604651689529419
+ 0.7813953161239624
+ 1.0499999523162842
+ 0.34999999403953552
+
+ blue_density
+
+ 0.43999999761581421
+ 0.43999999761581421
+ 0.43999999761581421
+ 0.2199999988079071
+
+ blue_horizon
+
+ 0.2159720099190805
+ 0.36269319055529792
+ 0.41333344578742803
+ 0.62444435060024084
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0002899999963119626
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.1938052177429199
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.6200000047683716
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.9034002423286438
+ 0.23649945855140686
+ 0.35768145322799683
+ 1
+
+ max_y
+
+ 1047
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2999999523162842
+ sun_angle
+ 3.3803541660308838
+ sunlight_color
+
+ 2.3344762325286865
+ 2.3386342525482178
+ 2.5199999809265137
+ 0.8399999737739563
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20light%20pink%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20light%20pink%20%28Paulina%29.xml
new file mode 100644
index 000000000..a3d67ac73
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20light%20pink%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7400000095367432
+ 1.4500001668930054
+ 1.353333592414856
+ 0.57999998331069946
+
+ blue_density
+
+ 0.17032256722450256
+ 0.47999998927116394
+ 0.3449999988079071
+ 0.23999999463558197
+
+ blue_horizon
+
+ 0.93999999761581421
+ 0.2199999988079071
+ 0.25999999046325684
+ 0.93999999761581421
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.6495571136474609
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.2799999713897705
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 0.2199999988079071
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.08999999612569809
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.72322285175323486
+ 0.68911415338516235
+ -0.045501336455345154
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 3.9018585681915283
+ sunlight_color
+
+ 1.9521123170852661
+ 2.0000483989715576
+ 2.0999999046325684
+ 0.69999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20warm%20pinks%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20warm%20pinks%20%28Paulina%29.xml
new file mode 100644
index 000000000..72d3345c4
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20warm%20pinks%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.68999993801116943
+ 0.44999998807907104
+ 0.42000001668930054
+ 0.68999993801116943
+
+ blue_density
+
+ 0.25714284181594849
+ 0.71428567171096802
+ 1
+ 0.5
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.17999999225139618
+ 0.25999999046325684
+ 0.56000000238418579
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00042999998549930751
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 9.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.81681406497955322
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.8199999332427979
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.029999999329447746
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.63206756114959717
+ 0.49818456172943115
+ -0.59355098009109497
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 5.7616815567016602
+ sunlight_color
+
+ 1.7400000095367432
+ 1.5899999141693115
+ 0.71999996900558472
+ 1.7400000095367432
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Midday.xml b/indra/newview/app_settings/windlight/skies/Midday.xml
new file mode 100644
index 000000000..119b3e141
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midday.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.0499999523162842
+ 1.0499999523162842
+ 1.0499999523162842
+ 0.34999999403953552
+
+ blue_density
+
+ 0.24475815892219543
+ 0.44872328639030457
+ 0.75999999046325684
+ 0.37999999523162842
+
+ blue_horizon
+
+ 0.49548381567001343
+ 0.49548381567001343
+ 0.63999998569488525
+ 0.31999999284744263
+
+ cloud_color
+
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.199999809265137
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00017999998817685992
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0.80000001192092896
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.18999999761581421
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 1605
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.7342105507850647
+ 0.78157895803451538
+ 0.89999997615814209
+ 0.29999998211860657
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Midnight.xml b/indra/newview/app_settings/windlight/skies/Midnight.xml
new file mode 100644
index 000000000..0aba31214
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midnight.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.20405027270317078
+ 0.24246673285961151
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0.44999998807907104
+ 0.44999998807907104
+ 0.44999998807907104
+ 1
+
+ blue_horizon
+
+ 0.23999999463558197
+ 0.23999999463558197
+ 0.23999999463558197
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00030000001424923539
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.8876205482883961e-007
+ 1
+
+ max_y
+
+ 906.20001220703125
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 2
+ sun_angle
+ 4.7123894691467285
+ sunlight_color
+
+ 0.34876692295074463
+ 0.35574248433113098
+ 0.65999996662139893
+ 0.2199999988079071
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%201.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%201.xml
new file mode 100644
index 000000000..4dee8354e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%201.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_density
+
+ 0.5
+ 0.5
+ 0.5
+ 0.25
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.2800000011920929
+
+ cloud_color
+
+ 0.22617273092134837
+ 0.2261830306064212
+ 0.22618354559006093
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.12499716758729562
+ 1
+
+ cloud_scale
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.19999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%202.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%202.xml
new file mode 100644
index 000000000..ef93fdc08
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%202.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.099999994039535522
+
+ blue_density
+
+ 0.5
+ 0.5
+ 0.5
+ 0.25
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.2800000011920929
+
+ cloud_color
+
+ 0
+ 0
+ 0
+ 0
+
+ cloud_pos_density1
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_pos_density2
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.19999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20blue.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20blue.xml
new file mode 100644
index 000000000..69a23e7f9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20blue.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 3
+ 3
+
+ blue_density
+
+ 0
+ 0
+ 2
+ 2
+
+ blue_horizon
+
+ 0
+ 0
+ 2
+ 2
+
+ cloud_color
+
+ 0
+ 1
+ 0
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026999998954124749
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.6389377117156982
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.48175370693206787
+ 0
+ 0.87630659341812134
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.2107079029083252
+ sunlight_color
+
+ 0
+ 0
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20extreme.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20extreme.xml
new file mode 100644
index 000000000..09d9c3546
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20extreme.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 2
+ 2
+ 2
+ 2
+
+ blue_horizon
+
+ 2
+ 2
+ 2
+ 2
+
+ cloud_color
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.7422776573475858e-008
+ 0
+ 1
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.1415927410125732
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20green.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20green.xml
new file mode 100644
index 000000000..9343abe71
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20green.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 3
+ 0
+ 3
+
+ blue_density
+
+ 0
+ 2
+ 0
+ 2
+
+ blue_horizon
+
+ 0
+ 2
+ 0
+ 2
+
+ cloud_color
+
+ 0
+ 1
+ 0
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026999998954124749
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.6389377117156982
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.48175376653671265
+ 0
+ 0.87630665302276611
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.2107079029083252
+ sunlight_color
+
+ 0
+ 3
+ 0
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20red.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20red.xml
new file mode 100644
index 000000000..0ce00b1e8
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20red.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 0
+ 0
+ 3
+
+ blue_density
+
+ 2
+ 0
+ 0
+ 2
+
+ blue_horizon
+
+ 2
+ 0
+ 0
+ 2
+
+ cloud_color
+
+ 0
+ 1
+ 0
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026999998954124749
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.6389377117156982
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.48175376653671265
+ 0
+ 0.87630665302276611
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.2107079029083252
+ sunlight_color
+
+ 3
+ 0
+ 0
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20underground%20comic.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20underground%20comic.xml
new file mode 100644
index 000000000..62ebaa233
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20underground%20comic.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 0.35000002384185791
+ 0.28999707102775574
+ 0.57999998331069946
+ 0.57999998331069946
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.42976745963096619
+ 0.2734883725643158
+ 0.56000000238418579
+
+ cloud_color
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0.56000000238418579
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.2199999988079071
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.7422776573475858e-008
+ 0
+ 1
+ 0
+
+ max_y
+
+ 632
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.1415927410125732
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20fog.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20fog.xml
new file mode 100644
index 000000000..088f09cbb
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20fog.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_density
+
+ 0.39999997615814209
+ 0.39999997615814209
+ 0.39999997615814209
+ 0.19999998807907104
+
+ blue_horizon
+
+ 1
+ 1
+ 1
+ 0.5
+
+ cloud_color
+
+ 0.22617273092134837
+ 0.2261830306064212
+ 0.22618354559006093
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.12499716758729562
+ 1
+
+ cloud_scale
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.5
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.32999998331069946
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20gray.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20gray.xml
new file mode 100644
index 000000000..fbbf36485
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20gray.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_density
+
+ 2
+ 2
+ 2
+ 1
+
+ blue_horizon
+
+ 2
+ 2
+ 2
+ 1
+
+ cloud_color
+
+ 0.22617273092134837
+ 0.2261830306064212
+ 0.22618354559006093
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.12499716758729562
+ 1
+
+ cloud_scale
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 1
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0
+ 1
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 0
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20green.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20green.xml
new file mode 100644
index 000000000..8c5e8f119
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20green.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 1.2599999904632568
+ 0
+ 1.2599999904632568
+
+ blue_density
+
+ 0.019999999552965164
+ 0.019999999552965164
+ 0.019999999552965164
+ 0.0099999997764825821
+
+ blue_horizon
+
+ 0
+ 0
+ 0
+ 0
+
+ cloud_color
+
+ 0
+ 0.5
+ 0
+ 0.5
+
+ cloud_pos_density1
+
+ 0
+ 0
+ 0.5
+ 1
+
+ cloud_pos_density2
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.5
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.062831856310367584
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.05404643714427948
+ 0.509041428565979
+ 0.85904353857040405
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 0.53407078981399536
+ sunlight_color
+
+ 0
+ 1.1399999856948853
+ 0
+ 1.1399999856948853
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orange%20Incubus.xml b/indra/newview/app_settings/windlight/skies/Orange%20Incubus.xml
new file mode 100644
index 000000000..6ab92ce6f
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orange%20Incubus.xml
@@ -0,0 +1,142 @@
+
+
+
+ ambient
+
+ 1.8999998569488525
+ 0.80384618043899536
+ 2.8499999046325684
+ 0.94999998807907104
+
+ blue_density
+
+ 0.43999999761581421
+ 0
+ 0
+ 0.2199999988079071
+
+ blue_horizon
+
+ 0.2800000011920929
+ 0
+ 0
+ 0.2800000011920929
+
+ cloud_color
+
+ 0.75
+ 0.56999999284744263
+ 0
+ 0.75
+
+ cloud_pos_density1
+
+ 1
+ 0.48999997973442078
+ 0.34999999403953552
+ 1
+
+ cloud_pos_density2
+
+ 0.31000000238418579
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 0.59999996423721313
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 8.1899995803833008
+ 9.7199993133544922
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 9.9999997473787516e-006
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 18.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.4504423141479492
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.57999998331069946
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.019999999552965164
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 3.1154863222582208e-007
+ 1
+ 3.765976543945726e-007
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 26
+ star_brightness
+ 2
+ sun_angle
+ 4.7123894691467285
+ sunlight_color
+
+ 0
+ 0.80999994277954102
+ 2.0699999332427979
+ 2.0699999332427979
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/PaperSnow.xml b/indra/newview/app_settings/windlight/skies/PaperSnow.xml
new file mode 100644
index 000000000..a34ac8df6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/PaperSnow.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.62999999523162842
+ 0.62999999523162842
+ 0.62999999523162842
+ 0.62999999523162842
+
+ blue_density
+
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.23999999463558197
+ 0.56000000238418579
+
+ blue_horizon
+
+ 0.59999996423721313
+ 0.59999996423721313
+ 0.68000000715255737
+ 0.74000000953674316
+
+ cloud_color
+
+ 0.12862999737262726
+ 0.12862999737262726
+ 0.12862999737262726
+ 1
+
+ cloud_pos_density1
+
+ 0.88419097661972046
+ 0.53047597408294678
+ 0.4270470142364502
+ 1
+
+ cloud_pos_density2
+
+ 0.38419300317764282
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10
+ 10
+
+ cloud_shadow
+
+ 0.61711597442626953
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 6.4079799652099609
+ 0.0012815999798476696
+ -0.44999998807907104
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.12999999523162842
+ 0.21744099259376526
+ 0.21744099259376526
+ 1
+
+ lightnorm
+
+ 0
+ 0.25477027893066406
+ -0.96700161695480347
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 2
+ star_brightness
+ 0
+ sun_angle
+ 6.0255751609802246
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Abracadabra.xml b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra.xml
new file mode 100644
index 000000000..21e73f0a4
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.29999998211860657
+ 0.2800000011920929
+ 0.51999998092651367
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00022000000171829015
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 31.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.3353981971740723
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.2800000011920929
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.86661803722381592
+ 0.36227512359619141
+ 0.34311801195144653
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Abracadabra2.xml b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra2.xml
new file mode 100644
index 000000000..55158516c
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra2.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.53999996185302734
+ 0.45999997854232788
+ 0.53999996185302734
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.9061942100524902
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 15.59999942779541
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.26999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.34311828017234802
+ 0.36227512359619141
+ -0.86661791801452637
+ 0
+
+ max_y
+
+ 483
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Abracadabra3.xml b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra3.xml
new file mode 100644
index 000000000..9b5388ab6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra3.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.53999996185302734
+ 0.45999997854232788
+ 0.53999996185302734
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.026547908782959
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 15.59999942779541
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.26999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.88645249605178833
+ 0.36227512359619141
+ -0.28802555799484253
+ 0
+
+ max_y
+
+ 483
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Annamaria.xml b/indra/newview/app_settings/windlight/skies/Places%20Annamaria.xml
new file mode 100644
index 000000000..15876975d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Annamaria.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.17999999225139618
+ 0
+ 0.17999999225139618
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.75999999046325684
+ 1
+
+ blue_horizon
+
+ 0.084897957742214203
+ 0.11000000685453415
+ 0.25999999046325684
+ 0.12999999523162842
+
+ cloud_color
+
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_pos_density1
+
+ 0.63999998569488525
+ 0.5
+ 0.56999999284744263
+ 1
+
+ cloud_pos_density2
+
+ 0.37000000476837158
+ 0.35999998450279236
+ 0
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.219999775290489
+ 9.9899997767060995
+
+ cloud_shadow
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.3999996185302734
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.1484252234531596e-008
+ 0.36227512359619141
+ 0.93207120895385742
+ 0
+
+ max_y
+
+ 671
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0.2199999988079071
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Astryls%20Wild.xml b/indra/newview/app_settings/windlight/skies/Places%20Astryls%20Wild.xml
new file mode 100644
index 000000000..c9783190b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Astryls%20Wild.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7372221946716309
+ 1.7699999809265137
+ 1.5899999141693115
+ 1.7999999523162842
+
+ blue_density
+
+ 0.5
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.31999999284744263
+ 0.2800000011920929
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00053999997908249497
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.56548666954040527
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -2.2999999523162842
+ 1
+
+ haze_density
+
+ 1.4299999475479126
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.38828861713409424
+ 0.68911367654800415
+ -0.61184495687484741
+ 0
+
+ max_y
+
+ 886
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4699999094009399
+ 1.4399999380111694
+ 1.4699999094009399
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Babbage.xml b/indra/newview/app_settings/windlight/skies/Places%20Babbage.xml
new file mode 100644
index 000000000..a7176d14e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Babbage.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0
+ 0.39999699592590332
+ 0.80000197887420654
+ 0.97999995946884155
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00072999997064471245
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 7.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.5
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.64999997615814209
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 1745
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.17999999225139618
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay%20Surreal.xml b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay%20Surreal.xml
new file mode 100644
index 000000000..1b06037ae
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay%20Surreal.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.53999996185302734
+ 0.45999997854232788
+ 0.53999996185302734
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 7.0000001869630069e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 31.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.0840702056884766
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 15.59999942779541
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.26999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.75406128168106079
+ 0.36227512359619141
+ 0.54785788059234619
+ 0
+
+ max_y
+
+ 403
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay.xml b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay.xml
new file mode 100644
index 000000000..d4fa195fe
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.029999999329447746
+ 0
+ 0.21000000834465027
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.17142856121063232
+ 0
+ 0.23999999463558197
+
+ cloud_color
+
+ 0.26999998092651367
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013999998918734491
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.799999237060547
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.7592918872833252
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.2999999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 2.5999999046325684
+ 0.0013735899701714516
+ -2.5
+ 1
+
+ haze_density
+
+ 1.7300000190734863
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.14999999105930328
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.98228722810745239
+ 0
+ -0.187381312251091
+ 0
+
+ max_y
+
+ 1396
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.9199999570846558
+ 1.7699999809265137
+ 0
+ 1.9199999570846558
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Bentham.xml b/indra/newview/app_settings/windlight/skies/Places%20Bentham.xml
new file mode 100644
index 000000000..db35e04ec
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Bentham.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.59999996423721313
+ 0.4888889491558075
+ 0.40000000596046448
+ 0.19999998807907104
+
+ blue_density
+
+ 1.059999942779541
+ 0.47638890147209167
+ 0.47638890147209167
+ 1.059999942779541
+
+ blue_horizon
+
+ 0.14000000059604645
+ 0.31999999284744263
+ 0.62000000476837158
+ 0.62000000476837158
+
+ cloud_color
+
+ 0.28999999165534973
+ 0.28999999165534973
+ 0.31999999284744263
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 9.9299993515014648
+
+ cloud_shadow
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00032999998074956238
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.7752208709716797
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0799999237060547
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.91343516111373901
+ 0.4029063880443573
+ -0.057468503713607788
+ 0
+
+ max_y
+
+ 644
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 2.25
+ 1.8899999856948853
+ 1.6800000667572021
+ 2.25
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Cornfield.xml b/indra/newview/app_settings/windlight/skies/Places%20Cornfield.xml
new file mode 100644
index 000000000..77416688e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Cornfield.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7400000095367432
+ 1.619999885559082
+ 1.4099999666213989
+ 2.4600000381469727
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.2800000011920929
+ 0.29999998211860657
+ 0.37999999523162842
+ 0.39999997615814209
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.5238933563232422
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -2.2999999523162842
+ 1
+
+ haze_density
+
+ 1.4299999475479126
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.71181762218475342
+ 0.68911367654800415
+ 0.1357865184545517
+ 0
+
+ max_y
+
+ 242
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4399999380111694
+ 1.4399999380111694
+ 0.47999998927116394
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Cromac.xml b/indra/newview/app_settings/windlight/skies/Places%20Cromac.xml
new file mode 100644
index 000000000..efec78721
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Cromac.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.0799999237060547
+ 0.98999994993209839
+ 0.77999997138977051
+ 1.0799999237060547
+
+ blue_density
+
+ 0.64736837148666382
+ 0.48414888978004456
+ 0.81999999284744263
+ 0.40999999642372131
+
+ blue_horizon
+
+ 0.5
+ 0.49548381567001343
+ 0.45999997854232788
+ 0.51999998092651367
+
+ cloud_color
+
+ 0.4100000062111997
+ 0.4100000062111997
+ 0.4100000062111997
+ 0.4100000062111997
+
+ cloud_pos_density1
+
+ 0.14000000059604645
+ 0.62000000476837158
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.35999998450279236
+ 0.56999999284744263
+ 0.12999999523162842
+ 1
+
+ cloud_scale
+
+ 0.35999998450279236
+ 0
+ 0
+ 1.0000000149011612
+
+ cloud_scroll_rate
+
+ 10.199999791580112
+ 10.010999679880427
+
+ cloud_shadow
+
+ 0.29999998211860657
+ 0
+ 0
+ 1.0000000149011612
+
+ density_multiplier
+
+ 7.9999997979030013e-005
+ 0
+ 0
+ 1.0000000149011612
+
+ distance_multiplier
+
+ 5.4000000953674316
+ 0
+ 0
+ 1.0000000149011612
+
+ east_angle
+ 4.2725663185119629
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.8399999141693115
+ 0
+ 0
+ 1.0000000149011612
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.55000001192092896
+ 1
+
+ haze_density
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17999999225139618
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.14154624938964844
+ 0.98768830299377441
+ 0.066606558859348297
+ 0
+
+ max_y
+
+ 805
+ 0
+ 0
+ 1.0000000149011612
+
+ preset_num
+ 28
+ star_brightness
+ 0.25999999046325684
+ sun_angle
+ 1.7278760671615601
+ sunlight_color
+
+ 0.69882339239120483
+ 0.8258824348449707
+ 1.0799999237060547
+ 0.35999998450279236
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Crucible.xml b/indra/newview/app_settings/windlight/skies/Places%20Crucible.xml
new file mode 100644
index 000000000..08c15adf0
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Crucible.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.20405015781398106
+ 0.24246659642869872
+ 0.33000011563842691
+ 0.11000042485298422
+
+ blue_density
+
+ 0.44999968444335536
+ 0.44999993884084688
+ 0.45000033684982554
+ 1
+
+ blue_horizon
+
+ 0.2399998628207527
+ 0.23999996847777538
+ 0.24000000489354534
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00030000017352815878
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2.6920993051460229e-006
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 3.9999967092453517
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1.5953180371869324e-007
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0.99963462352752686
+ 0.027029547840356827
+ 1
+
+ max_y
+
+ 906.19966977159493
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 1.9999979734420776
+ sun_angle
+ 4.6853561401367187
+ sunlight_color
+
+ 0.34876771076233126
+ 0.35574326291055058
+ 0.66000120168018839
+ 0.22000041117803448
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20District8.xml b/indra/newview/app_settings/windlight/skies/Places%20District8.xml
new file mode 100644
index 000000000..0ef69a361
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20District8.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.21000000834465027
+ 0.08999999612569809
+ 0.26999998092651367
+
+ blue_density
+
+ 0.71999996900558472
+ 1.0199999809265137
+ 1.059999942779541
+ 1.059999942779541
+
+ blue_horizon
+
+ 0.35999998450279236
+ 0.36272725462913513
+ 0.41999998688697815
+ 0.5
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.7000002861022949
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.3300881385803223
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2200000286102295
+ 0
+ 0
+ 1
+
+ glow
+
+ 16.600000381469727
+ 0.0010000000474974513
+ -0.049999997019767761
+ 1
+
+ haze_density
+
+ 2.1599998474121094
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.25999999046325684
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.17994101345539093
+ 0.27899131178855896
+ -0.94328427314758301
+ 1
+
+ max_y
+
+ 698
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 3.4243361949920654
+ sunlight_color
+
+ 2.0999999046325684
+ 2.1599998474121094
+ 2.1599998474121094
+ 2.1599998474121094
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Duskwood.xml b/indra/newview/app_settings/windlight/skies/Places%20Duskwood.xml
new file mode 100644
index 000000000..2389e9660
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Duskwood.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.17999999225139618
+ 0
+ 0.17999999225139618
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.75999999046325684
+ 1
+
+ blue_horizon
+
+ 0.084897957742214203
+ 0.11000000685453415
+ 0.25999999046325684
+ 0.12999999523162842
+
+ cloud_color
+
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_pos_density1
+
+ 0.63999998569488525
+ 0.5
+ 0.56999999284744263
+ 1
+
+ cloud_pos_density2
+
+ 0.37000000476837158
+ 0.35999998450279236
+ 0
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.219999775290489
+ 9.9899997767060995
+
+ cloud_shadow
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 33.100002288818359
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.3999996185302734
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.1484252234531596e-008
+ 0.36227512359619141
+ 0.93207120895385742
+ 0
+
+ max_y
+
+ 671
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0.2199999988079071
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Eridu.xml b/indra/newview/app_settings/windlight/skies/Places%20Eridu.xml
new file mode 100644
index 000000000..d93310016
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Eridu.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.50999999046325684
+ 0.57310229539871216
+ 0.59999996423721313
+ 0.59999996423721313
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.15130999684333801
+ 0.30000001192092896
+ 0.35131001472473145
+ 1
+
+ cloud_color
+
+ 0.12862999737262726
+ 0.12862999737262726
+ 0.12862999737262726
+ 1
+
+ cloud_pos_density1
+
+ 0.88419097661972046
+ 0.53047597408294678
+ 0.4270470142364502
+ 1
+
+ cloud_pos_density2
+
+ 0.38419300317764282
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10
+ 10
+
+ cloud_shadow
+
+ 0.61711597442626953
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0001250890054507181
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 11.40000057220459
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.4035391807556152
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.87999999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 6.4079799652099609
+ 0.0012815999798476696
+ -0.42292699217796326
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.21744099259376526
+ 0.21744099259376526
+ 0.21744099259376526
+ 1
+
+ lightnorm
+
+ 0.76102709770202637
+ 0.15643447637557983
+ 0.62957614660263062
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 2
+ star_brightness
+ 0
+ sun_angle
+ 0.15707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Erie.xml b/indra/newview/app_settings/windlight/skies/Places%20Erie.xml
new file mode 100644
index 000000000..7be0e3ffd
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Erie.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.08999999612569809
+
+ blue_density
+
+ 0.35999998450279236
+ 0.35999998450279236
+ 0.35999998450279236
+ 0.17999999225139618
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 1.9799998998641968
+ 1.9799998998641968
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00054999999701976776
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.5499999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.5
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.64999997615814209
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 1745
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.08999999612569809
+ 0.070000007748603821
+ 0.08999999612569809
+ 0.029999999329447746
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Eugene%202.xml b/indra/newview/app_settings/windlight/skies/Places%20Eugene%202.xml
new file mode 100644
index 000000000..85a0a2d93
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Eugene%202.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.029999997466802597
+ 0
+ 0.070000000298023224
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013999998918734491
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.799999237060547
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.382300853729248
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 4.190000057220459
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.8000011444091797
+ 0.0013735899701714516
+ -0.94999998807907104
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.019999999552965164
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.98228728771209717
+ 0
+ 0.18738122284412384
+ 0
+
+ max_y
+
+ 1396
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.2300000190734863
+ 0.82000011205673218
+ 0.84000003337860107
+ 1.2899999618530273
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Eugene%20BL.xml b/indra/newview/app_settings/windlight/skies/Places%20Eugene%20BL.xml
new file mode 100644
index 000000000..2402f44d0
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Eugene%20BL.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.029999997466802597
+ 0
+ 0.070000000298023224
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.17142856121063232
+ 0
+ 0.23999999463558197
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013999998918734491
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.799999237060547
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.382300853729248
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.1499999761581421
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.8000011444091797
+ 0.0013735899701714516
+ -0.94999998807907104
+ 1
+
+ haze_density
+
+ 1.7300000190734863
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.14999999105930328
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.98228728771209717
+ 0
+ 0.18738122284412384
+ 0
+
+ max_y
+
+ 1396
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.2300000190734863
+ 0.82000011205673218
+ 0
+ 0.40999999642372131
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Greed.xml b/indra/newview/app_settings/windlight/skies/Places%20Greed.xml
new file mode 100644
index 000000000..268716b94
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Greed.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.1699999570846558
+ 0.95727264881134033
+ 0.95727264881134033
+ 0.38999998569488525
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00046000001020729542
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 1
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.4035391807556152
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6200000047683716
+ 0
+ 0
+ 1
+
+ glow
+
+ 4.2000007629394531
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.75594335794448853
+ 0.19354932010173798
+ -0.6253705620765686
+ 0
+
+ max_y
+
+ 562.5
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 2.9468140602111816
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Greed2.xml b/indra/newview/app_settings/windlight/skies/Places%20Greed2.xml
new file mode 100644
index 000000000..ec5282f7e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Greed2.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.1699999570846558
+ 0.95727264881134033
+ 0.95727264881134033
+ 0.38999998569488525
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00046000001020729542
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 1
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.9530971050262451
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2200000286102295
+ 0
+ 0
+ 1
+
+ glow
+
+ 4.2000007629394531
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.18383802473545074
+ 0.19354932010173798
+ 0.96371269226074219
+ 0
+
+ max_y
+
+ 562.5
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 2.9468140602111816
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Imagine.xml b/indra/newview/app_settings/windlight/skies/Places%20Imagine.xml
new file mode 100644
index 000000000..48fba1e31
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Imagine.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.68999993801116943
+ 0.68999993801116943
+ 0.68999993801116943
+ 0.68999993801116943
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.25999999046325684
+ 0.29999998211860657
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00038999997195787728
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 11.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.7176985740661621
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.68000000715255737
+ 0
+ 0
+ 1
+
+ glow
+
+ 12.399999618530273
+ 0.0010000000474974513
+ -1.8500000238418579
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.41922605037689209
+ 0.6227877140045166
+ -0.6605944037437439
+ 0
+
+ max_y
+
+ 940
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.4692919254302979
+ sunlight_color
+
+ 2.6700000762939453
+ 2.6700000762939453
+ 2.6700000762939453
+ 0.88999998569488525
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Kingsport.xml b/indra/newview/app_settings/windlight/skies/Places%20Kingsport.xml
new file mode 100644
index 000000000..dfaf68596
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Kingsport.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+
+ blue_density
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00058999995235353708
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 12.800000190734863
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.4199999570846558
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.5
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.64999997615814209
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 2013
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.17999999225139618
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Kunming.xml b/indra/newview/app_settings/windlight/skies/Places%20Kunming.xml
new file mode 100644
index 000000000..e641bebcc
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Kunming.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.89999997615814209
+ 0.80999994277954102
+ 0.80999994277954102
+ 0.89999997615814209
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.48999997973442078
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00059999997029080987
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 18.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.2044246196746826
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.4199999570846558
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.39999997615814209
+ 1
+
+ haze_density
+
+ 0.68000000715255737
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.43999999761581421
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.062790632247924805
+ 0
+ 0.99802672863006592
+ 0
+
+ max_y
+
+ 859
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Las%20Legunas.xml b/indra/newview/app_settings/windlight/skies/Places%20Las%20Legunas.xml
new file mode 100644
index 000000000..4121f8fa6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Las%20Legunas.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7372221946716309
+ 1.7699999809265137
+ 1.5899999141693115
+ 1.7999999523162842
+
+ blue_density
+
+ 0.5
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.31999999284744263
+ 0.2800000011920929
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.8399999737739563
+ 0.5899999737739563
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.17000000178813934
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00033999999868683517
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.56548666954040527
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -2.2999999523162842
+ 1
+
+ haze_density
+
+ 1.9199999570846558
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.38828861713409424
+ 0.68911367654800415
+ -0.61184495687484741
+ 0
+
+ max_y
+
+ 403
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4699999094009399
+ 1.4399999380111694
+ 1.4699999094009399
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Legacies.xml b/indra/newview/app_settings/windlight/skies/Places%20Legacies.xml
new file mode 100644
index 000000000..a8284bb2a
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Legacies.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0.19999998807907104
+ 0.39999699592590332
+ 1.0199999809265137
+ 1.0199999809265137
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00039999998989515007
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 14.199999809265137
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2799999713897705
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.39999997615814209
+ 1
+
+ haze_density
+
+ 3.8599998950958252
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.77999997138977051
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.99715888500213623
+ -0.07532694935798645
+ 0
+
+ max_y
+
+ 1745
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.6461946964263916
+ sunlight_color
+
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.17999999225139618
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Midian.xml b/indra/newview/app_settings/windlight/skies/Places%20Midian.xml
new file mode 100644
index 000000000..40a34a4a9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Midian.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.85248766300455259
+ 0.69348653809556993
+ 0.71145841248196007
+ 0.83318269234937503
+
+ blue_density
+
+ 0.20779243499502797
+ 0.41026214234642566
+ 0.72814986965084927
+ 1
+
+ blue_horizon
+
+ 0.13484086845960519
+ 0.21892986884401466
+ 0.24794709491764877
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00029999998514540493
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 6.2831854820251465
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.3500000238418579
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 1.3774588671593051
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.29999998211860657
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 1.7484556735780643e-007
+ 0
+ -1
+ 0
+
+ max_y
+
+ 564
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.41058114171028137
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 2.3274268943138168
+ 2.3288588977004565
+ 2.3913246215581694
+ 0.83987117651068388
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Mother.xml b/indra/newview/app_settings/windlight/skies/Places%20Mother.xml
new file mode 100644
index 000000000..753cf0706
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Mother.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.71999996900558472
+ 0.54638898372650146
+ 0.58705025911331177
+ 0.71999996900558472
+
+ blue_density
+
+ 0.28678349408657766
+ 0.42322183665254443
+ 0.63743695308465931
+ 1
+
+ blue_horizon
+
+ 0.16913637525681224
+ 0.22580146354854946
+ 0.24535531286049661
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.70999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.20999999344348907
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.3399999737739563
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 8.6099996566772461
+ 6.2799997329711914
+
+ cloud_shadow
+
+ 0.23999999463558197
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031999999191612005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 40.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8849555253982544
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.7599999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.7999992370605469
+ 0.0010000000474974513
+ -1.1000000238418579
+ 1
+
+ haze_density
+
+ 2.2327472009226881
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.085684981703968377
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.60160976648330688
+ 0.77450323104858398
+ -0.19547481834888458
+ 1
+
+ max_y
+
+ 644
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.92893773317337036
+ sun_angle
+ 4.027522087097168
+ sunlight_color
+
+ 2.624443531036377
+ 2.6294984817504883
+ 2.8499999046325684
+ 0.94999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Old%20New%20York.xml b/indra/newview/app_settings/windlight/skies/Places%20Old%20New%20York.xml
new file mode 100644
index 000000000..df356084b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Old%20New%20York.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.56999999284744263
+ 0.59999996423721313
+ 0.71999996900558472
+ 0.71999996900558472
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.23999999463558197
+ 0.30000001192092896
+ 0.35131001472473145
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.12862999737262726
+ 0.12862999737262726
+ 0.12862999737262726
+ 1
+
+ cloud_pos_density1
+
+ 0.88419097661972046
+ 0.53047597408294678
+ 0.4270470142364502
+ 1
+
+ cloud_pos_density2
+
+ 0.38419300317764282
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10
+ 10
+
+ cloud_shadow
+
+ 0.61711597442626953
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 18.899999618530273
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.4035391807556152
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 4.4000005722045898
+ 0.0012815999798476696
+ -0.64999997615814209
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17000000178813934
+ 0.21744099259376526
+ 0.21744099259376526
+ 1
+
+ lightnorm
+
+ 0.76102709770202637
+ 0.15643447637557983
+ 0.62957614660263062
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 2
+ star_brightness
+ 0.65999996662139893
+ sun_angle
+ 0.15707963705062866
+ sunlight_color
+
+ 1.3199999332427979
+ 0.69959986209869385
+ 0.71279996633529663
+ 0.43999999761581421
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Paris%202.xml b/indra/newview/app_settings/windlight/skies/Places%20Paris%202.xml
new file mode 100644
index 000000000..431ee1867
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Paris%202.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.85248766300455259
+ 0.69348653809556993
+ 0.71145841248196007
+ 0.83318269234937503
+
+ blue_density
+
+ 0.20779243499502797
+ 0.41026214234642566
+ 0.72814986965084927
+ 1
+
+ blue_horizon
+
+ 0.13484086845960519
+ 0.21892986884401466
+ 0.24794709491764877
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.34999999403953552
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00029999998514540493
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.0787608623504639
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.1599998474121094
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.4000015258789063
+ 0.0010000000474974513
+ -0.34999999403953552
+ 1
+
+ haze_density
+
+ 1.3774588671593051
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.29999998211860657
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.062790460884571075
+ 0
+ 0.99802672863006592
+ 0
+
+ max_y
+
+ 564
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.41058114171028137
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 2.3274268943138168
+ 2.3288588977004565
+ 2.3913246215581694
+ 0.83987117651068388
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Paris.xml b/indra/newview/app_settings/windlight/skies/Places%20Paris.xml
new file mode 100644
index 000000000..ebd2970c9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Paris.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.2300000190734863
+ 1.0553969144821167
+ 1.0920002460479736
+ 1.2300000190734863
+
+ blue_density
+
+ 0.57999998331069946
+ 0.59999996423721313
+ 0.77111077308654785
+ 0.55220913887023926
+
+ blue_horizon
+
+ 0.29999998211860657
+ 0.41715732216835022
+ 0.53167486190795898
+ 0.65999996662139893
+
+ cloud_color
+
+ 0.35893553611745688
+ 0.35893553611745688
+ 0.35893553611745688
+ 0.57387644052505493
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.96666919575807242
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999999993404913
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.283160487214445
+ 10.010999818490745
+
+ cloud_shadow
+
+ 0.23999999463558197
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 7.0000001869630069e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.8955750465393066
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.2300000190734863
+ 0
+ 0
+ 1
+
+ glow
+
+ 7.4000000953674316
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 1.0499999523162842
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.37999999523162842
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.68454724550247192
+ 0
+ 0.72896856069564819
+ 0
+
+ max_y
+
+ 268
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 1.3187105655670166
+ 1.3529220819473267
+ 1.7100000381469727
+ 1.7100000381469727
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Pathfinder.xml b/indra/newview/app_settings/windlight/skies/Places%20Pathfinder.xml
new file mode 100644
index 000000000..43e69daea
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Pathfinder.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.47999998927116394
+ 0.39111119508743286
+ 0.31999999284744263
+ 0.47999998927116394
+
+ blue_density
+
+ 0.059999998658895493
+ 0.059999998658895493
+ 0.059999998658895493
+ 0.029999999329447746
+
+ blue_horizon
+
+ 1.8600000143051147
+ 0.47999998927116394
+ 0.47999998927116394
+ 1.8600000143051147
+
+ cloud_color
+
+ 0.28999999165534973
+ 0.28999999165534973
+ 0.31999999284744263
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 9.9299993515014648
+
+ cloud_shadow
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00019999999494757503
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 3.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8849555253982544
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 2.809999942779541
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.87044608592987061
+ 0.4029063880443573
+ 0.28282502293586731
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 1.8600000143051147
+ 1.7699999809265137
+ 1.6537500619888306
+ 1.8600000143051147
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Sand.xml b/indra/newview/app_settings/windlight/skies/Places%20Sand.xml
new file mode 100644
index 000000000..da66198d5
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Sand.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.59999996423721313
+ 0.4888889491558075
+ 0.40000000596046448
+ 0.19999998807907104
+
+ blue_density
+
+ 2
+ 0.97999995946884155
+ 0.97999995946884155
+ 2
+
+ blue_horizon
+
+ 0.71999996900558472
+ 0.50086963176727295
+ 0.50086963176727295
+ 0.35999998450279236
+
+ cloud_color
+
+ 0.28999999165534973
+ 0.28999999165534973
+ 0.31999999284744263
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 9.9299993515014648
+
+ cloud_shadow
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.6548666954040527
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.1499999761581421
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.53796529769897461
+ 0.4029063880443573
+ -0.74044561386108398
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 2.25
+ 1.8899999856948853
+ 1.6800000667572021
+ 2.25
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Terre%20Des%20Mortes.xml b/indra/newview/app_settings/windlight/skies/Places%20Terre%20Des%20Mortes.xml
new file mode 100644
index 000000000..00ae35765
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Terre%20Des%20Mortes.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.26999998092651367
+ 0.35999998450279236
+ 0.35999998450279236
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.25999999046325684
+ 0.29999998211860657
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00076999998418614268
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.899999618530273
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.0840702056884766
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.63296741247177124
+ 0.6227877140045166
+ 0.45987796783447266
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.4692919254302979
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4399999380111694
+ 1.4399999380111694
+ 0.47999998927116394
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Urbania.xml b/indra/newview/app_settings/windlight/skies/Places%20Urbania.xml
new file mode 100644
index 000000000..4aed800ea
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Urbania.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0.029999997466802597
+ 0
+ 0.029999999329447746
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.39999997615814209
+ 0.17142856121063232
+ 0
+ 0.39999997615814209
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00058999995235353708
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 20.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.2566369771957397
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.9599999189376831
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.8000011444091797
+ 0.0013735899701714516
+ -0.94999998807907104
+ 1
+
+ haze_density
+
+ 1.7300000190734863
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.45999997854232788
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.95105648040771484
+ 0
+ 0.30901706218719482
+ 0
+
+ max_y
+
+ 1450
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.2300000190734863
+ 0.82000011205673218
+ 0
+ 0.40999999642372131
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Wiccan.xml b/indra/newview/app_settings/windlight/skies/Places%20Wiccan.xml
new file mode 100644
index 000000000..7e220c9ff
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Wiccan.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.71999996900558472
+ 0.54638898372650146
+ 0.58705025911331177
+ 0.71999996900558472
+
+ blue_density
+
+ 0.28678349408657766
+ 0.42322183665254443
+ 0.63743695308465931
+ 1
+
+ blue_horizon
+
+ 0.16913637525681224
+ 0.22580146354854946
+ 0.24535531286049661
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.70999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.20999999344348907
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.3399999737739563
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 8.6099996566772461
+ 6.2799997329711914
+
+ cloud_shadow
+
+ 0.23999999463558197
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00038568499229132969
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0.53555402121232365
+ 0
+ 0
+ 1
+
+ east_angle
+ 6.2831854820251465
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 2.2327472009226881
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.085684981703968377
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -1.6790306744951522e-007
+ 0.27899131178855896
+ 0.96029365062713623
+ 1
+
+ max_y
+
+ 722.13795372575987
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.92893773317337036
+ sun_angle
+ 3.4243361949920654
+ sunlight_color
+
+ 2.624443531036377
+ 2.6294984817504883
+ 2.8499999046325684
+ 0.94999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20alirium.xml b/indra/newview/app_settings/windlight/skies/Places%20alirium.xml
new file mode 100644
index 000000000..6bed05a85
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20alirium.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.21000000834465027
+ 0.08999999612569809
+ 0.26999998092651367
+
+ blue_density
+
+ 0.47886797785758972
+ 0.90452831983566284
+ 0.93999999761581421
+ 0.4699999988079071
+
+ blue_horizon
+
+ 0.28636360168457031
+ 0.36272725462913513
+ 0.41999998688697815
+ 0.20999999344348907
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.10999999940395355
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.800000190734863
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.2725663185119629
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.7599999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 16.600000381469727
+ 0.0010000000474974513
+ -0.24999998509883881
+ 1
+
+ haze_density
+
+ 1.1899999380111694
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.2199999988079071
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.84336334466934204
+ 0.36227512359619141
+ 0.39685636758804321
+ 0
+
+ max_y
+
+ 564
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 2.4600000381469727
+ 2.4600000381469727
+ 2.4600000381469727
+ 0.81999999284744263
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%2DEmbryo.xml b/indra/newview/app_settings/windlight/skies/Places%2DEmbryo.xml
new file mode 100644
index 000000000..66d490aa9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%2DEmbryo.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.23999999463558197
+ 0
+ 0.35999998450279236
+
+ blue_density
+
+ 0.15999999642372131
+ 0.15999999642372131
+ 0.15999999642372131
+ 0.079999998211860657
+
+ blue_horizon
+
+ 0.19999998807907104
+ 0.19999998807907104
+ 0.19999998807907104
+ 0.099999994039535522
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+
+ cloud_pos_density1
+
+ 0.53999996185302734
+ 0.50999999046325684
+ 0.2199999988079071
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.039999999105930328
+ 1
+
+ cloud_scale
+
+ 0.15999999642372131
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 20
+ 20
+
+ cloud_shadow
+
+ 0.68000000715255737
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 23
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.2619466781616211
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17000000178813934
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.70520544052124023
+ 0.4029063880443573
+ 0.58339667320251465
+ 0
+
+ max_y
+
+ 322
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 0.71999996900558472
+ 0.71999996900558472
+ 0.71999996900558472
+ 0.23999999463558197
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/StrawberrySingh%2Ecom%20%2D%20Closeups.xml b/indra/newview/app_settings/windlight/skies/StrawberrySingh%2Ecom%20%2D%20Closeups.xml
new file mode 100644
index 000000000..d9a45e832
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/StrawberrySingh%2Ecom%20%2D%20Closeups.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.9524954557418823
+ 2.0699999332427979
+ 2.059481143951416
+ 0.68999999761581421
+
+ blue_density
+
+ 2
+ 2
+ 2
+ 1
+
+ blue_horizon
+
+ 1.5
+ 1.5
+ 1.5
+ 0.75
+
+ cloud_color
+
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.199999809265137
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.12999999523162842
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0002899999963119626
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2599999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 10.199999809265137
+ 0.0010000000474974513
+ -1.3999999761581421
+ 1
+
+ haze_density
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.5
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0
+ 1
+ 0
+
+ max_y
+
+ 493
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.5299999713897705
+ 1.5299999713897705
+ 1.5299999713897705
+ 0.50999999046325684
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Sunrise.xml b/indra/newview/app_settings/windlight/skies/Sunrise.xml
new file mode 100644
index 000000000..bbc7aeec5
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunrise.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.80999994277954102
+ 0.46289783716201782
+ 0.62999993562698364
+ 0.26999998092651367
+
+ blue_density
+
+ 0.15793180465698242
+ 0.43499568104743958
+ 0.87000000476837158
+ 0.87000000476837158
+
+ blue_horizon
+
+ 0.20673196017742157
+ 0.40988314151763916
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_color
+
+ 0.22616604226328718
+ 0.22616604226328718
+ 0.22616604226328718
+ 0.99997219085526012
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.88000025272481253
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013883861
+ 10.010999679576344
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00062000000616535544
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2.6999279499073054
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.0009990693069994
+ 0.0010000000474963411
+ -0.48000101923815919
+ 1
+
+ haze_density
+
+ 0.53999996185302734
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.094108223915100098
+ 0.99556195735931396
+ 0
+
+ max_y
+
+ 563
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 0.094247691333293915
+ sunlight_color
+
+ 2.369999885559082
+ 2.369999885559082
+ 2.369999885559082
+ 0.78999996185302734
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Sunset%20Pink%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Sunset%20Pink%20%28Paulina%29.xml
new file mode 100644
index 000000000..9b5b74f03
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunset%20Pink%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.65999996662139893
+ 0.30564266443252563
+ 0.31655827164649963
+ 0.2199999988079071
+
+ blue_density
+
+ 1.1599999666213989
+ 0.59999996423721313
+ 1.3199999332427979
+ 1.3199999332427979
+
+ blue_horizon
+
+ 0.71153849363327026
+ 0.74000000953674316
+ 0.74000000953674316
+ 0.37000000476837158
+
+ cloud_color
+
+ 0
+ 0
+ 0.0099999997764825821
+ 0.0099999997764825821
+
+ cloud_pos_density1
+
+ 0.53999996185302734
+ 0.50999999046325684
+ 0.23999999463558197
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.059999998658895493
+ 1
+
+ cloud_scale
+
+ 0.15999999642372131
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 20
+ 20
+
+ cloud_shadow
+
+ 0.2199999988079071
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 4.9999998736893758e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.1000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.5185837745666504
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.61000001430511475
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.59999942779541016
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.8600000143051147
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.76999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.36805915832519531
+ 0.01884840801358223
+ 0.92961132526397705
+ 0
+
+ max_y
+
+ 2443
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.8600000143051147
+ sun_angle
+ 3.1227431297302246
+ sunlight_color
+
+ 1.1999999284744263
+ 0.7486223578453064
+ 0.39302670955657959
+ 1.1999999284744263
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Sunset.xml b/indra/newview/app_settings/windlight/skies/Sunset.xml
new file mode 100644
index 000000000..ebf08e1a3
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunset.xml
@@ -0,0 +1,142 @@
+
+
+ ambient
+
+ 1.0199999809265137
+ 0.80999994277954102
+ 0.80999994277954102
+ 1.0199999809265137
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00046000001020729542
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 1
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.07532646507024765
+ -0.99715894460678101
+ 0
+
+ max_y
+
+ 562.5
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 3.0661947727203369
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Brazil%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Brazil%20%28Paulina%29.xml
new file mode 100644
index 000000000..97044da7b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Brazil%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.5
+ 2.2799999713897705
+ 0.93000000715255737
+ 2.2799999713897705
+
+ blue_density
+
+ 1.2799999713897705
+ 1.2999999523162842
+ 1.3999999761581421
+ 1.3999999761581421
+
+ blue_horizon
+
+ 1
+ 1.1200000047683716
+ 0.068059712648391724
+ 1.1200000047683716
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.34999999403953552
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 5.999999848427251e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 12.800000190734863
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.8327431678771973
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ glow
+
+ 10
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 0.18999999761581421
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.5899999737739563
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.60370332002639771
+ 0.32094338536262512
+ 0.72975176572799683
+ 0
+
+ max_y
+
+ 537
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 2.8148672580718994
+ sunlight_color
+
+ 3
+ 2.3461534976959229
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Fire%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Fire%20%28Paulina%29.xml
new file mode 100644
index 000000000..5519f5ec9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Fire%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 0.89999997615814209
+ 0
+ 0.41999998688697815
+ 0.89999997615814209
+
+ blue_horizon
+
+ 1.4800000190734863
+ 1.6799999475479126
+ 2
+ 2
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.1000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.2044246196746826
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.070000000298023224
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.0000019073486328
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 2.8899998664855957
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.62000000476837158
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ 0.061363283544778824
+ 0.21200713515281677
+ -0.97533971071243286
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 0.21362832188606262
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Flirt%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Flirt%20%28Paulina%29.xml
new file mode 100644
index 000000000..70dd0d106
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Flirt%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 1
+ 0
+ 0.41999998688697815
+ 1
+
+ blue_horizon
+
+ 1.4399999380111694
+ 2
+ 2
+ 2
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0006399999838322401
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 5.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8221237659454346
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.070000000298023224
+ 0
+ 0
+ 1
+
+ glow
+
+ 2.2000002861022949
+ 0.0010000000474974513
+ -1.4499999284744263
+ 1
+
+ haze_density
+
+ 2.8899998664855957
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.62000000476837158
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.96764647960662842
+ 0.043968122452497482
+ -0.2484494149684906
+ 0
+
+ max_y
+
+ 27
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 0.043982300907373428
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Night%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Night%20%28Paulina%29.xml
new file mode 100644
index 000000000..80ee99ef6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Night%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 1
+ 0
+ 0.41999998688697815
+ 1
+
+ blue_horizon
+
+ 1.4800000190734863
+ 1.6799999475479126
+ 2
+ 2
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 22.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8221237659454346
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.070000000298023224
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.0000019073486328
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 2.8899998664855957
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.62000000476837158
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.96764647960662842
+ 0.043968122452497482
+ -0.2484494149684906
+ 0
+
+ max_y
+
+ 1289
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 0.043982300907373428
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Summer%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Summer%20%28Paulina%29.xml
new file mode 100644
index 000000000..6929904cc
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Summer%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.5
+ 2.2799999713897705
+ 0.93000000715255737
+ 2.2799999713897705
+
+ blue_density
+
+ 1.4800000190734863
+ 1.4399999380111694
+ 2
+ 2
+
+ blue_horizon
+
+ 1.2400000095367432
+ 1.1399999856948853
+ 0.71999996900558472
+ 1.2799999713897705
+
+ cloud_color
+
+ 0.2199999988079071
+ 0.23999999463558197
+ 0.68999999761581421
+ 0.68999999761581421
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.42999997735023499
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.65999996662139893
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 1.9999999494757503e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 15.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.1469020843505859
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ glow
+
+ 10
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 1.6999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.52999997138977051
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.82513469457626343
+ 0.21200692653656006
+ 0.52364665269851685
+ 1
+
+ max_y
+
+ 456
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 6.0695571899414062
+ sunlight_color
+
+ 3
+ 1.3499999046325684
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/names.txt b/indra/newview/app_settings/windlight/skies/names.txt
new file mode 100644
index 000000000..2d80cde58
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/names.txt
@@ -0,0 +1,77 @@
+- Orac - Black fog 1
+- Orac - Black fog 2
+- Orac - Drawing blue
+- Orac - Drawing extreme
+- Orac - Drawing green
+- Orac - Drawing red
+- Orac - Drawing underground comic
+- Orac - fog
+- Orac - gray
+- Orac - green
+AnaLu - outdoor city night
+AnaLutetia - AvatarOpt(2)
+AnaLutetia - AvatarOpt2 whiter
+AnaLutetia - outdoor
+AnaLutetia - Studio Light
+AnaLutetia - STUDIO2
+AnaLutetia - STUDIO3
+AnaLutetia-default
+AnaLutetia-outdoor2(2)
+AnaLutetia
+B5-ShadowDancing
+CB'%s %Rouge 1
+CB'%s %Rouge 2
+CB'%s %Rouge 3
+CB'%s %Rouge 4
+CB'%s %Rouge 5
+CB'%s %Rouge 6
+Fairy blue (Paulina)
+Fairy dark blue (Paulina)
+Fairy light pink (Paulina)
+Fairy warm pinks (Paulina)
+PaperSnow
+Places Abracadabra
+Places Abracadabra2
+Places Abracadabra3
+Places alirium
+Places Annamaria
+Places Astryls Wild
+Places Babbage
+Places Beach Cay Surreal
+Places Beach Cay
+Places Bentham
+Places Cornfield
+Places Cromac
+Places Crucible
+Places District8
+Places Duskwood
+Places Eridu
+Places Erie
+Places Eugene 2
+Places Eugene BL
+Places Greed
+Places Greed2
+Places Imagine
+Places Kingsport
+Places Kunming
+Places Las Legunas
+Places Legacies
+Places Midian
+Places Mother
+Places Old New York
+Places Paris 2
+Places Paris
+Places Pathfinder
+Places Sand
+Places Terre Des Mortes
+Places Urbania
+Places Wiccan
+Places-Embryo
+StrawberrySingh.com - Closeups
+Sunset Pink (Paulina)
+Surreal - Brazil (Paulina)
+Surreal - Fire (Paulina)
+Surreal - Flirt (Paulina)
+Surreal - Night (Paulina)
+Surreal - Summer (Paulina)
+wastelands
\ No newline at end of file
diff --git a/indra/newview/app_settings/windlight/skies/wastelands.xml b/indra/newview/app_settings/windlight/skies/wastelands.xml
new file mode 100644
index 000000000..ffb22cf37
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/wastelands.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.29999998211860657
+ 0.17999999225139618
+ 0
+ 0.29999998211860657
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.31999999284744263
+ 0.31999999284744263
+ 0.31999999284744263
+ 0.15999999642372131
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.36227512359619141
+ -0.93207120895385742
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
\ No newline at end of file
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index 34cb59877..64f14a7c8 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -116,10 +116,13 @@ fi
export VIEWER_BINARY='singularity-do-not-run-directly'
BINARY_TYPE=$(expr match "$(file -b bin/$VIEWER_BINARY)" '\(.*executable\)')
+QPP=qt4/plugins/imageformats/
if [ "${BINARY_TYPE}" == "ELF 64-bit LSB executable" ]; then
- export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib64:"`pwd`"/lib32:"${LD_LIBRARY_PATH}"'
+ QTPLUGINS=/usr/lib64/$QPP:/lib64/$QPP:/usr/local/lib64/$QPP
+ export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib64:"`pwd`"/lib32:$QTPLUGINS:"${LD_LIBRARY_PATH}"'
else
- export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib:"${LD_LIBRARY_PATH}"'
+ QTPLUGINS=/usr/lib/$QPP:/lib/$QPP:/usr/local/lib/$QPP
+ export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib:$QTPLUGINS:"${LD_LIBRARY_PATH}"'
fi
export SL_CMD='$LL_WRAPPER bin/$VIEWER_BINARY'
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 5d733fd8b..1bacedada 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -3582,7 +3582,7 @@ void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
(F32)(pos_global.mdV[VY] - region_origin.mdV[VY]),
(F32)(pos_global.mdV[VZ]));
pos_local += offset;
- teleportRequest(handle, pos_local);
+ teleportRequest(info->getHandle(), pos_local);
}
else if(regionp &&
teleportCore(regionp->getHandle() == to_region_handle_global((F32)pos_global.mdV[VX], (F32)pos_global.mdV[VY])))
@@ -3631,6 +3631,10 @@ void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global)
mbTeleportKeepsLookAt = true;
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction
U64 region_handle = to_region_handle(pos_global);
+ LLSimInfo* simInfo = LLWorldMap::instance().simInfoFromHandle(region_handle);
+ if(simInfo)
+ region_handle = simInfo->getHandle();
+
LLVector3 pos_local = (LLVector3)(pos_global - from_region_handle(region_handle));
teleportRequest(region_handle, pos_local, getTeleportKeepsLookAt());
}
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 5637e0716..886348d1a 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -523,6 +523,13 @@ BOOL LLAgentWearables::isWearableCopyable(LLWearableType::EType type) const
return FALSE;
}
+BOOL LLAgentWearables::areWearablesLoaded() const
+{
+ if(gSavedSettings.getBOOL("RenderUnloadedAvatar"))
+ return TRUE;
+ return mWearablesLoaded;
+}
+
U32 LLAgentWearables::getWearablePermMask(LLWearableType::EType type) const
{
LLUUID item_id = getWearableItemID(type);
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 75fb03b0a..70f9b0969 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -82,7 +82,7 @@ public:
BOOL isWearableModifiable(const LLUUID& item_id) const;
BOOL isWearableCopyable(LLWearableType::EType type) const;
- BOOL areWearablesLoaded() const { return mWearablesLoaded; };
+ BOOL areWearablesLoaded() const;
void updateWearablesLoaded();
//void checkWearablesLoaded() const;
//bool canMoveWearable(const LLUUID& item_id, bool closer_to_body);
diff --git a/indra/newview/llappviewerlinux_api_dbus.cpp b/indra/newview/llappviewerlinux_api_dbus.cpp
index ee160d015..b475eeedb 100644
--- a/indra/newview/llappviewerlinux_api_dbus.cpp
+++ b/indra/newview/llappviewerlinux_api_dbus.cpp
@@ -32,6 +32,11 @@
#if LL_DBUS_ENABLED
+#ifdef LL_STANDALONE
+#include
+#include
+#endif
+
#include "linden_common.h"
extern "C" {
@@ -71,9 +76,17 @@ bool grab_dbus_syms(std::string dbus_dso_name)
//attempt to load the shared library
apr_pool_create(&sSymDBUSDSOMemoryPool, NULL);
+#ifdef LL_STANDALONE
+ void *dso_handle = dlopen(dbus_dso_name.c_str(), RTLD_NOW | RTLD_GLOBAL);
+ rv = (!dso_handle)?APR_EDSOOPEN:apr_os_dso_handle_put(&sSymDBUSDSOHandle,
+ dso_handle, sSymDBUSDSOMemoryPool);
+
+ if ( APR_SUCCESS == rv )
+#else
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymDBUSDSOHandle,
dbus_dso_name.c_str(),
sSymDBUSDSOMemoryPool) ))
+#endif
{
INFOMSG("Found DSO: %s", dbus_dso_name.c_str());
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index 5f656bae2..70f79f3c5 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -165,9 +165,7 @@ void LLFloaterAvatarTextures::refresh()
// static
void LLFloaterAvatarTextures::onClickDump(void* data)
{
-//
-//#if !LL_RELEASE_FOR_DOWNLOAD
-//
+#if !LL_RELEASE_FOR_DOWNLOAD
LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data;
LLVOAvatar* avatarp = find_avatar(self->mID);
if (!avatarp) return;
@@ -179,7 +177,5 @@ void LLFloaterAvatarTextures::onClickDump(void* data)
llinfos << "Avatar TE " << i << " id " << te->getID() << llendl;
}
-//
-//#endif
-//
+#endif
}
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index b3693c5de..bfc046b7a 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -609,11 +609,14 @@ LLColor4 get_text_color(const LLChat& chat)
static const LLCachedControl mKeywordsChangeColor(gSavedPerAccountSettings, "KeywordsChangeColor", false);
static const LLCachedControl mKeywordsColor(gSavedPerAccountSettings, "KeywordsColor", LLColor4(1.f, 1.f, 1.f, 1.f));
- if (gAgent.getID() != chat.mFromID)
+ if ((gAgent.getID() != chat.mFromID) && (chat.mSourceType != CHAT_SOURCE_SYSTEM))
{
if (mKeywordsChangeColor)
{
- if (AscentKeyword::hasKeyword(chat.mText, 1))
+ std::string shortmsg(chat.mText);
+ shortmsg.erase(0, chat.mFromName.length());
+
+ if (AscentKeyword::hasKeyword(shortmsg, 1))
{
text_color = mKeywordsColor;
}
diff --git a/indra/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp
index a6b60a7cf..5e6f8f1a5 100644
--- a/indra/newview/llfloatercustomize.cpp
+++ b/indra/newview/llfloatercustomize.cpp
@@ -2694,7 +2694,7 @@ void LLFloaterCustomize::generateVisualParamHints(LLViewerJointMesh* joint_mesh,
void LLFloaterCustomize::setWearable(LLWearableType::EType type, LLWearable* wearable, U32 perm_mask, BOOL is_complete)
{
- llassert( type < WT_COUNT );
+ llassert( type < LLWearableType::WT_COUNT );
gSavedSettings.setU32("AvatarSex", (gAgentAvatarp->getSex() == SEX_MALE) );
LLPanelEditWearable* panel = mWearablePanelList[ type ];
diff --git a/indra/newview/llfloatersearchreplace.cpp b/indra/newview/llfloatersearchreplace.cpp
new file mode 100644
index 000000000..a339a54a8
--- /dev/null
+++ b/indra/newview/llfloatersearchreplace.cpp
@@ -0,0 +1,114 @@
+#include "llviewerprecompiledheaders.h"
+#include "llcheckboxctrl.h"
+#include "llfocusmgr.h"
+#include "lluictrlfactory.h"
+
+#include "llfloatersearchreplace.h"
+
+const S32 SEARCH_REPLACE_WIDTH = 300;
+const S32 SEARCH_REPLACE_HEIGHT = 120;
+const std::string SEARCH_REPLACE_TITLE = "Search and Replace";
+
+LLFloaterSearchReplace* LLFloaterSearchReplace::sInstance = NULL;
+
+LLFloaterSearchReplace::LLFloaterSearchReplace() : mEditor(NULL),
+ LLFloater(std::string("searchreplace"), LLRect(0, 0, SEARCH_REPLACE_WIDTH, SEARCH_REPLACE_HEIGHT), SEARCH_REPLACE_TITLE)
+{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_search_replace.xml");
+}
+
+LLFloaterSearchReplace::~LLFloaterSearchReplace()
+{
+ sInstance = NULL;
+}
+
+void LLFloaterSearchReplace::open()
+{
+ LLFloater::open();
+
+ if (mEditor)
+ {
+ bool fReadOnly = mEditor->isReadOnly();
+ childSetEnabled("replace_label", !fReadOnly);
+ childSetEnabled("replace_text", !fReadOnly);
+ childSetEnabled("replace_btn", !fReadOnly);
+ childSetEnabled("replace_all_btn", !fReadOnly);
+ }
+
+ childSetFocus("search_text", TRUE);
+}
+
+BOOL LLFloaterSearchReplace::postBuild()
+{
+ childSetAction("search_btn", onBtnSearch, this);
+ childSetAction("replace_btn", onBtnReplace, this);
+ childSetAction("replace_all_btn", onBtnReplaceAll, this);
+
+ setDefaultBtn("search_btn");
+
+ return TRUE;
+}
+
+void LLFloaterSearchReplace::show(LLTextEditor* editor)
+{
+ if (!sInstance)
+ {
+ sInstance = new LLFloaterSearchReplace();
+ }
+
+ if ( (sInstance) && (editor) )
+ {
+ sInstance->mEditor = editor;
+
+ LLFloater* newdependee, *olddependee = sInstance->getDependee();
+ LLView* viewp = editor->getParent();
+ while (viewp)
+ {
+ newdependee = dynamic_cast(viewp);
+ if (newdependee)
+ {
+ if (newdependee != olddependee)
+ {
+ if (olddependee)
+ olddependee->removeDependentFloater(sInstance);
+
+ if (!newdependee->getHost())
+ newdependee->addDependentFloater(sInstance);
+ else
+ newdependee->getHost()->addDependentFloater(sInstance);
+ }
+ break;
+ }
+ viewp = viewp->getParent();
+ }
+
+ sInstance->open();
+ }
+}
+
+void LLFloaterSearchReplace::onBtnSearch(void* userdata)
+{
+ if ( (!sInstance) || (!sInstance->mEditor) || (!sInstance->getDependee()) )
+ return;
+
+ LLCheckBoxCtrl* caseChk = sInstance->getChild("case_text");
+ sInstance->mEditor->selectNext(sInstance->childGetText("search_text"), caseChk->get());
+}
+
+void LLFloaterSearchReplace::onBtnReplace(void* userdata)
+{
+ if ( (!sInstance) || (!sInstance->mEditor) || (!sInstance->getDependee()) )
+ return;
+
+ LLCheckBoxCtrl* caseChk = sInstance->getChild("case_text");
+ sInstance->mEditor->replaceText(sInstance->childGetText("search_text"), sInstance->childGetText("replace_text"), caseChk->get());
+}
+
+void LLFloaterSearchReplace::onBtnReplaceAll(void* userdata)
+{
+ if ( (!sInstance) || (!sInstance->mEditor) || (!sInstance->getDependee()) )
+ return;
+
+ LLCheckBoxCtrl* caseChk = sInstance->getChild("case_text");
+ sInstance->mEditor->replaceTextAll(sInstance->childGetText("search_text"), sInstance->childGetText("replace_text"), caseChk->get());
+}
diff --git a/indra/newview/llfloatersearchreplace.h b/indra/newview/llfloatersearchreplace.h
new file mode 100644
index 000000000..9dcd0352b
--- /dev/null
+++ b/indra/newview/llfloatersearchreplace.h
@@ -0,0 +1,32 @@
+#ifndef LL_LLFLOATERSEARCHREPLACE_H
+#define LL_LLFLOATERSEARCHREPLACE_H
+
+#include "llfloater.h"
+#include "lltexteditor.h"
+
+class LLFloaterSearchReplace : public LLFloater
+{
+private:
+ LLFloaterSearchReplace();
+ virtual ~LLFloaterSearchReplace();
+
+public:
+ virtual void open();
+ virtual BOOL postBuild();
+
+public:
+ static void show(LLTextEditor* editor);
+
+ static void onBtnSearch(void* userdata);
+ static void onBtnReplace(void* userdata);
+ static void onBtnReplaceAll(void* userdata);
+
+ static LLFloaterSearchReplace* getInstance() { return sInstance; }
+
+private:
+ LLTextEditor* mEditor;
+
+ static LLFloaterSearchReplace* sInstance;
+};
+
+#endif // LL_LLFLOATERSEARCHREPLACE_H
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 0a9b5dd1d..66fdaa4c4 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -87,6 +87,8 @@
#include "qtoolalign.h" //Thank Qarl!
+#include "llvograss.h"
+#include "llvotree.h"
// Globals
LLFloaterTools *gFloaterTools = NULL;
@@ -295,6 +297,8 @@ BOOL LLFloaterTools::postBuild()
llwarns << "Tool button not found! DOA Pending." << llendl;
}
}
+ mComboTreesGrass = getChild("trees_grass");
+ childSetCommitCallback("trees_grass", onSelectTreesGrass, (void*)0);
mCheckCopySelection = getChild("checkbox copy selection");
childSetValue("checkbox copy selection",(BOOL)gSavedSettings.getBOOL("CreateToolCopySelection"));
mCheckSticky = getChild("checkbox sticky");
@@ -392,6 +396,7 @@ LLFloaterTools::LLFloaterTools()
mBtnDuplicate(NULL),
mBtnDuplicateInPlace(NULL),
+ mComboTreesGrass(NULL),
mCheckSticky(NULL),
mCheckCopySelection(NULL),
mCheckCopyCenters(NULL),
@@ -721,6 +726,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mBtnCreate ->setToggleState( tool == LLToolCompCreate::getInstance() );
+ updateTreeGrassCombo(create_visible);
+
if (mCheckCopySelection
&& mCheckCopySelection->get())
{
@@ -1058,3 +1065,77 @@ void LLFloaterTools::onFocusReceived()
LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
LLFloater::onFocusReceived();
}
+
+// static
+void LLFloaterTools::onSelectTreesGrass(LLUICtrl*, void*)
+{
+ const std::string &selected = gFloaterTools->mComboTreesGrass->getValue();
+ LLPCode pcode = LLToolPlacer::getObjectType();
+ if (pcode == LLToolPlacerPanel::sTree)
+ {
+ gSavedSettings.setString("LastTree", selected);
+ }
+ else if (pcode == LLToolPlacerPanel::sGrass)
+ {
+ gSavedSettings.setString("LastGrass", selected);
+ }
+}
+
+void LLFloaterTools::updateTreeGrassCombo(bool visible)
+{
+ LLTextBox* tree_grass_label = getChild("tree_grass_label");
+ if (visible)
+ {
+ LLPCode pcode = LLToolPlacer::getObjectType();
+ std::map::iterator it, end;
+ std::string selected;
+ if (pcode == LLToolPlacerPanel::sTree)
+ {
+ tree_grass_label->setVisible(visible);
+ LLButton* button = getChild("ToolTree");
+ tree_grass_label->setText(button->getToolTip());
+
+ selected = gSavedSettings.getString("LastTree");
+ it = LLVOTree::sSpeciesNames.begin();
+ end = LLVOTree::sSpeciesNames.end();
+ }
+ else if (pcode == LLToolPlacerPanel::sGrass)
+ {
+ tree_grass_label->setVisible(visible);
+ LLButton* button = getChild("ToolGrass");
+ tree_grass_label->setText(button->getToolTip());
+
+ selected = gSavedSettings.getString("LastGrass");
+ it = LLVOGrass::sSpeciesNames.begin();
+ end = LLVOGrass::sSpeciesNames.end();
+ }
+ else
+ {
+ mComboTreesGrass->removeall();
+ mComboTreesGrass->setLabel(LLStringExplicit("")); // LLComboBox::removeall() does not clear the label
+ mComboTreesGrass->setEnabled(false);
+ mComboTreesGrass->setVisible(false);
+ tree_grass_label->setVisible(false);
+ return;
+ }
+
+ mComboTreesGrass->removeall();
+ mComboTreesGrass->add("Random");
+
+ int select = 0, i = 0;
+
+ while (it != end)
+ {
+ const std::string &species = it->first;
+ mComboTreesGrass->add(species); ++i;
+ if (species == selected) select = i;
+ ++it;
+ }
+ // if saved species not found, default to "Random"
+ mComboTreesGrass->selectNthItem(select);
+ mComboTreesGrass->setEnabled(true);
+ }
+
+ mComboTreesGrass->setVisible(visible);
+ tree_grass_label->setVisible(visible);
+}
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index 85308315f..a06e2728c 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -155,6 +155,7 @@ public:
LLButton *mBtnDuplicateInPlace;
// Create buttons
+ LLComboBox *mComboTreesGrass;
LLCheckBoxCtrl *mCheckSticky;
LLCheckBoxCtrl *mCheckCopySelection;
LLCheckBoxCtrl *mCheckCopyCenters;
@@ -194,6 +195,9 @@ private:
BOOL mDirty;
std::map mStatusText;
+
+ void updateTreeGrassCombo(bool visible);
+ static void onSelectTreesGrass(LLUICtrl*, void*);
};
extern LLFloaterTools *gFloaterTools;
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index e6b463d6f..fb66019d8 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -651,10 +651,11 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
return;
}
- 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 sim_name = sim_info->getName();
+ U32 locX, locY;
+ from_region_handle(sim_info->getHandle(), &locX, &locY);
+ F32 region_x = pos_global.mdV[VX] - locX;
+ F32 region_y = pos_global.mdV[VY] - locY;
std::string full_name = llformat("%s (%d, %d, %d)",
// sim_name.c_str(),
// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp
index 9da28a2de..6b9ad6a17 100644
--- a/indra/newview/llhudicon.cpp
+++ b/indra/newview/llhudicon.cpp
@@ -213,7 +213,7 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en
if (mHidden)
return FALSE;
- if (mSourceObject.isNull() || mImagep.isNull())
+ if (mSourceObject.isNull() || mImagep.isNull() || mSourceObject->mDrawable.isNull())
{
markDead();
return FALSE;
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 65f3ba72a..4cfe6fa91 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -200,6 +200,7 @@ std::string ICON_NAME[ICON_NAME_COUNT] =
"inv_link_item.tga",
"inv_link_folder.tga"
+ "inv_item_mesh.png"
};
struct LLWearInfo
@@ -1119,6 +1120,13 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
// Only should happen for broken links.
new_listener = new LLLinkItemBridge(inventory, uuid);
break;
+ case LLAssetType::AT_MESH:
+ if(!(inv_type == LLInventoryType::IT_MESH))
+ {
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
+ }
+ new_listener = new LLMeshBridge(inventory, uuid);
+ break;
default:
llinfos << "Unhandled asset type (llassetstorage.h): "
<< (S32)asset_type << llendl;
@@ -5707,3 +5715,59 @@ const LLUUID &LLLinkFolderBridge::getFolderID() const
return LLUUID::null;
}
+// +=================================================+
+// | LLMeshBridge |
+// +=================================================+
+
+LLUIImagePtr LLMeshBridge::getIcon() const
+{
+ return get_item_icon(LLAssetType::AT_TEXTURE, LLInventoryType::IT_TEXTURE, 0, FALSE);
+}
+
+void LLMeshBridge::openItem()
+{
+ LLViewerInventoryItem* item = getItem();
+
+ if (item)
+ {
+ // open mesh
+ }
+}
+
+void LLMeshBridge::previewItem()
+{
+ LLViewerInventoryItem* item = getItem();
+ if(item)
+ {
+ // preview mesh
+ }
+}
+
+
+void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+ lldebugs << "LLMeshBridge::buildContextMenu()" << llendl;
+ std::vector items;
+ std::vector disabled_items;
+
+ if(isItemInTrash())
+ {
+ items.push_back(std::string("Purge Item"));
+ if (!isItemRemovable())
+ {
+ disabled_items.push_back(std::string("Purge Item"));
+ }
+
+ items.push_back(std::string("Restore Item"));
+ }
+ else
+ {
+ items.push_back(std::string("Properties"));
+
+ getClipboardEntries(true, items, disabled_items, flags);
+ }
+
+
+ hide_context_entries(menu, items, disabled_items);
+}
+
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index af74e9091..5b385f538 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -85,6 +85,7 @@ enum EInventoryIcon
LINKITEM_ICON_NAME,
LINKFOLDER_ICON_NAME,
+ MESH_ICON_NAME,
ICON_NAME_COUNT
};
@@ -646,6 +647,21 @@ protected:
static std::string sPrefix;
};
+class LLMeshBridge : public LLItemBridge
+{
+ friend class LLInvFVBridge;
+public:
+ virtual LLUIImagePtr getIcon() const;
+ virtual void openItem();
+ virtual void previewItem();
+ virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+
+protected:
+ LLMeshBridge(LLInventoryPanel* inventory,
+ const LLUUID& uuid) :
+ LLItemBridge(inventory, uuid) {}
+};
+
void rez_attachment(LLViewerInventoryItem* item,
LLViewerJointAttachment* attachment,
bool replace = false);
diff --git a/indra/newview/llinventoryview.cpp b/indra/newview/llinventoryview.cpp
index ea8d1e0c6..8edef568b 100644
--- a/indra/newview/llinventoryview.cpp
+++ b/indra/newview/llinventoryview.cpp
@@ -588,6 +588,7 @@ BOOL LLInventoryView::postBuild()
childSetAction("Inventory.ResetAll",onResetAll,this);
childSetAction("Inventory.ExpandAll",onExpandAll,this);
+ childSetAction("collapse_btn", onCollapseAll, this);
//panel->getFilter()->markDefault();
return TRUE;
@@ -1354,6 +1355,19 @@ void LLInventoryView::onExpandAll(void* userdata)
}
+//static
+void LLInventoryView::onCollapseAll(void* userdata)
+{
+ LLInventoryView* self = (LLInventoryView*) userdata;
+ self->mActivePanel = (LLInventoryPanel*)self->childGetVisibleTab("inventory filter tabs");
+
+ if (!self->mActivePanel)
+ {
+ return;
+ }
+ self->mActivePanel->closeAllFolders();
+}
+
//static
void LLInventoryView::onFilterSelected(void* userdata, bool from_click)
{
@@ -1541,6 +1555,9 @@ std::string get_item_icon_name(LLAssetType::EType asset_type,
case LLAssetType::AT_GESTURE:
idx = GESTURE_ICON_NAME;
break;
+ case LLAssetType::AT_MESH:
+ idx = MESH_ICON_NAME;
+ break;
default:
break;
}
diff --git a/indra/newview/llinventoryview.h b/indra/newview/llinventoryview.h
index d9c8e4c07..492e79d33 100644
--- a/indra/newview/llinventoryview.h
+++ b/indra/newview/llinventoryview.h
@@ -282,6 +282,7 @@ public:
static void onFilterSelected(void* userdata, bool from_click);
static void onResetAll(void* userdata);
static void onExpandAll(void* userdata);
+ static void onCollapseAll(void* userdata);
static void onSelectionChange(const std::deque &items, BOOL user_action, void* data);
const std::string getFilterSubString() { return mActivePanel->getFilterSubString(); }
diff --git a/indra/newview/llmapresponders.cpp b/indra/newview/llmapresponders.cpp
index ae0090e42..cf0769bce 100644
--- a/indra/newview/llmapresponders.cpp
+++ b/indra/newview/llmapresponders.cpp
@@ -120,6 +120,8 @@ void LLMapLayerResponder::result(const LLSD& result)
S32 x_regions = map_block["X"];
S32 y_regions = map_block["Y"];
+ S32 x_size = map_block["SizeX"];
+ S32 y_size = map_block["SizeY"];
std::string name = map_block["Name"];
S32 access = map_block["Access"];
S32 region_flags = map_block["RegionFlags"];
@@ -165,6 +167,7 @@ void LLMapLayerResponder::result(const LLSD& result)
siminfo->setRegionFlags( region_flags );
siminfo->setWaterHeight( (F32) water_height );
siminfo->setMapImageID( image_id, agent_flags );
+ siminfo->setSize((U16)x_size, (U16)y_size);
if (use_web_map_tiles)
{
siminfo->mCurrentImage = LLWorldMap::loadObjectsTile((U32)x_regions, (U32)y_regions);
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 842ab3b97..8124e841d 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -966,6 +966,42 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
};
break;
+
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_CLOSE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_PICK_FILE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_GEOMETRY_CHANGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_AUTH_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_AUTH_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_LINK_HOVERED:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_LINK_HOVERED" << LL_ENDL;
+ };
+ break;
default:
{
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 02964a038..bc147fd7d 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -240,7 +240,6 @@ void LLNetMap::draw()
}
// figure out where agent is
- S32 region_width = llround(LLWorld::getInstance()->getRegionWidthInMeters());
LLColor4 this_region_color = gColors.getColor( "NetMapThisRegion" );
LLColor4 live_region_color = gColors.getColor( "NetMapLiveRegion" );
LLColor4 dead_region_color = gColors.getColor( "NetMapDeadRegion" );
@@ -249,6 +248,7 @@ void LLNetMap::draw()
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
{
LLViewerRegion* regionp = *iter;
+ S32 region_width = llround(regionp->getWidth());
// Find x and y position relative to camera's center.
LLVector3 origin_agent = regionp->getOriginAgent();
LLVector3 rel_region_pos = origin_agent - gAgentCamera.getCameraPositionAgent();
@@ -328,8 +328,6 @@ void LLNetMap::draw()
LLVector3 map_center_agent = gAgent.getPosAgentFromGlobal(mObjectImageCenterGlobal);
map_center_agent -= gAgentCamera.getCameraPositionAgent();
- map_center_agent.mV[VX] *= mScale/region_width;
- map_center_agent.mV[VY] *= mScale/region_width;
gGL.getTexUnit(0)->bind(mObjectImagep);
F32 image_half_width = 0.5f*mObjectMapPixels;
@@ -685,7 +683,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
// [/RLVa:KB]
//msg.append( region->getName() );
-#ifndef LL_RELEASE_FOR_DOWNLOAD
+//#ifndef LL_RELEASE_FOR_DOWNLOAD
std::string buffer;
msg.append("\n");
buffer = region->getHost().getHostName();
@@ -693,7 +691,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
msg.append("\n");
buffer = region->getHost().getString();
msg.append(buffer);
-#endif
+//#endif
msg.append("\n");
msg.append(getToolTip());
diff --git a/indra/newview/lloverlaybar.cpp b/indra/newview/lloverlaybar.cpp
index 1ad90584d..8bdd7b376 100644
--- a/indra/newview/lloverlaybar.cpp
+++ b/indra/newview/lloverlaybar.cpp
@@ -464,7 +464,7 @@ void LLOverlayBar::onClickStandUp(void*)
void LLOverlayBar::onClickCancelTP(void* data)
{
LLOverlayBar* self = (LLOverlayBar*)data;
- self->setCancelTPButtonVisible(FALSE,std::string("Cancel"));
+ self->setCancelTPButtonVisible(FALSE, std::string("Cancel TP"));
gAgent.teleportCancel();
llinfos << "trying to cancel teleport" << llendl;
}
@@ -529,6 +529,7 @@ void LLOverlayBar::toggleMediaPlay(void*)
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
if (parcel)
{
+ LLViewerParcelMedia::sIsUserAction = true;
LLViewerParcelMedia::play(parcel);
}
}
@@ -554,7 +555,8 @@ void LLOverlayBar::toggleMusicPlay(void*)
// stream is stopped, it doesn't return the right thing - commenting out for now.
// if ( gAudiop->isInternetStreamPlaying() == 0 )
{
- gAudiop->startInternetStream(parcel->getMusicURL());
+ LLViewerParcelMedia::sIsUserAction = true;
+ LLViewerParcelMedia::playStreamingMusic(parcel);
}
}
}
diff --git a/indra/newview/llpaneldisplay.cpp b/indra/newview/llpaneldisplay.cpp
index 925ca40c7..f000d840b 100644
--- a/indra/newview/llpaneldisplay.cpp
+++ b/indra/newview/llpaneldisplay.cpp
@@ -260,6 +260,9 @@ BOOL LLPanelDisplay::postBuild()
// Avatar Render Mode
mCtrlAvatarCloth = getChild("AvatarCloth");
mCtrlAvatarImpostors = getChild("AvatarImpostors");
+ mCtrlAvatarImpostors->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable);
+ mCtrlAvatarImpostors->setCallbackUserData(this);
+ mCtrlNonImpostors = getChild("AvatarMaxVisible");
//----------------------------------------------------------------------------
// radio set for lighting detail
@@ -417,6 +420,7 @@ void LLPanelDisplay::refresh()
// avatar settings
mAvatarImpostors = gSavedSettings.getBOOL("RenderUseImpostors");
+ mNonImpostors = gSavedSettings.getS32("RenderAvatarMaxVisible");
mAvatarCloth = gSavedSettings.getBOOL("RenderAvatarCloth");
// Draw distance
@@ -514,6 +518,9 @@ void LLPanelDisplay::refreshEnabledState()
//GI won't do anything with shadows off, but disabling it here is less than intuitive. Ignore shadow setting for now.
mCtrlDeferredGI->setEnabled(mCtrlShadowDetail->getEnabled()/* && gSavedSettings.getS32("RenderShadowDetail") > 0*/);
+ // Disable max non-impostors slider if avatar impostors are off
+ mCtrlNonImpostors->setEnabled(gSavedSettings.getBOOL("RenderUseImpostors"));
+
// Vertex Shaders
// mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"));
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0a
@@ -612,6 +619,7 @@ void LLPanelDisplay::disableUnavailableSettings()
{
mCtrlAvatarImpostors->setEnabled(FALSE);
mCtrlAvatarImpostors->setValue(FALSE);
+ mCtrlNonImpostors->setEnabled(FALSE);
}
// disabled deferred
if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred"))
@@ -654,6 +662,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden)
llassert(mCtrlAvatarVP != NULL);
llassert(mCtrlShaderEnable != NULL);
llassert(mCtrlAvatarImpostors != NULL);
+ llassert(mCtrlNonImpostors != NULL);
llassert(mCtrlAvatarCloth != NULL);
llassert(mRadioLightingDetail2 != NULL);
@@ -702,6 +711,7 @@ void LLPanelDisplay::setHiddenGraphicsState(bool isHidden)
mCtrlAvatarVP->setVisible(!isHidden);
mCtrlShaderEnable->setVisible(!isHidden);
mCtrlAvatarImpostors->setVisible(!isHidden);
+ mCtrlNonImpostors->setVisible(!isHidden);
mCtrlAvatarCloth->setVisible(!isHidden);
mRadioLightingDetail2->setVisible(!isHidden);
@@ -752,6 +762,7 @@ void LLPanelDisplay::cancel()
gSavedSettings.setS32("RenderShadowDetail", mShadowDetail);
gSavedSettings.setBOOL("RenderUseImpostors", mAvatarImpostors);
+ gSavedSettings.setS32("RenderAvatarMaxVisible", mNonImpostors);
gSavedSettings.setBOOL("RenderAvatarCloth", mAvatarCloth);
gSavedSettings.setBOOL("RenderLocalLights", mLocalLights);
@@ -994,6 +1005,11 @@ void LLPanelDisplay::onVertexShaderEnable(LLUICtrl* self, void* data)
void LLPanelDisplay::setHardwareDefaults(void* user_data)
{
LLFeatureManager::getInstance()->applyRecommendedSettings();
+ LLControlVariable* controlp = gSavedSettings.getControl("RenderAvatarMaxVisible");
+ if (controlp)
+ {
+ controlp->resetToDefault(true);
+ }
LLFloaterPreference::refreshEnabledGraphics();
}
diff --git a/indra/newview/llpaneldisplay.h b/indra/newview/llpaneldisplay.h
index a36311390..5631a7ca9 100644
--- a/indra/newview/llpaneldisplay.h
+++ b/indra/newview/llpaneldisplay.h
@@ -106,6 +106,7 @@ protected:
LLSliderCtrl *mCtrlSkyFactor; // LOD for terrain
LLSliderCtrl *mCtrlMaxParticle; // Max Particle
LLSliderCtrl *mCtrlPostProcess; // Max Particle
+ LLSliderCtrl *mCtrlNonImpostors; // Max non-impostors
LLCheckBoxCtrl *mCtrlBumpShiny;
LLCheckBoxCtrl *mCtrlWindLight;
@@ -162,6 +163,7 @@ protected:
S32 mShadowDetail;
BOOL mAvatarImpostors;
+ S32 mNonImpostors;
BOOL mAvatarCloth;
S32 mAvatarMode;
BOOL mLocalLights;
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index f7a6d45e8..5b2c9cfae 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -47,6 +47,9 @@
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "lldbstrings.h"
+#include "llfloatersearchreplace.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
#include "llagent.h"
#include "llvoavatarself.h"
#include "llselectmgr.h"
@@ -579,6 +582,24 @@ void LLMultiPreview::tabOpen(LLFloater* opened_floater, bool from_click)
{
opened_preview->loadAsset();
}
+
+ LLFloater* search_floater = LLFloaterSearchReplace::getInstance();
+ if (search_floater && search_floater->getDependee() == this)
+ {
+ LLPreviewNotecard* notecard_preview; LLPreviewLSL* script_preview;
+ if ((notecard_preview = dynamic_cast(opened_preview)) != NULL)
+ {
+ LLFloaterSearchReplace::show(notecard_preview->getEditor());
+ }
+ else if ((script_preview = dynamic_cast(opened_preview)) != NULL)
+ {
+ LLFloaterSearchReplace::show(script_preview->getEditor());
+ }
+ else
+ {
+ search_floater->setVisible(FALSE);
+ }
+ }
}
//static
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 98ed9a409..dea4215df 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -42,6 +42,7 @@
#include "llassetuploadresponders.h"
#include "llviewerwindow.h"
#include "llbutton.h"
+#include "llfloatersearchreplace.h"
#include "llinventorymodel.h"
#include "lllineeditor.h"
#include "llnotificationsutil.h"
@@ -112,7 +113,6 @@ LLPreviewNotecard::LLPreviewNotecard(const std::string& name,
else
{
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_notecard.xml");
- childSetAction("Save",onClickSave,this);
//
childSetAction("Get Items", onClickGetItems, this);
//
@@ -126,6 +126,7 @@ LLPreviewNotecard::LLPreviewNotecard(const std::string& name,
}
}
}
+ childSetAction("Save",onClickSave,this);
// only assert shape if not hosted in a multifloater
if (!getHost())
@@ -154,6 +155,8 @@ LLPreviewNotecard::LLPreviewNotecard(const std::string& name,
editor->setHandleEditKeysDirectly(TRUE);
}
+ initMenu();
+
gAgentCamera.changeCameraToDefault();
}
@@ -223,6 +226,12 @@ BOOL LLPreviewNotecard::handleKeyHere(KEY key, MASK mask)
return TRUE;
}
+ if ('F' == key && (mask & MASK_CONTROL) && !(mask & (MASK_SHIFT | MASK_ALT)))
+ {
+ LLFloaterSearchReplace::show(getChild("Notecard Editor"));
+ return TRUE;
+ }
+
return LLPreview::handleKeyHere(key, mask);
}
@@ -776,4 +785,221 @@ LLTextEditor* LLPreviewNotecard::getEditor()
return getChild("Notecard Editor");
}
+void LLPreviewNotecard::initMenu()
+{
+ LLMenuItemCallGL* menuItem = getChild("Undo");
+ menuItem->setMenuCallback(onUndoMenu, this);
+ menuItem->setEnabledCallback(enableUndoMenu);
+
+ menuItem = getChild("Redo");
+ menuItem->setMenuCallback(onRedoMenu, this);
+ menuItem->setEnabledCallback(enableRedoMenu);
+
+ menuItem = getChild("Cut");
+ menuItem->setMenuCallback(onCutMenu, this);
+ menuItem->setEnabledCallback(enableCutMenu);
+
+ menuItem = getChild("Copy");
+ menuItem->setMenuCallback(onCopyMenu, this);
+ menuItem->setEnabledCallback(enableCopyMenu);
+
+ menuItem = getChild("Paste");
+ menuItem->setMenuCallback(onPasteMenu, this);
+ menuItem->setEnabledCallback(enablePasteMenu);
+
+ menuItem = getChild("Select All");
+ menuItem->setMenuCallback(onSelectAllMenu, this);
+ menuItem->setEnabledCallback(enableSelectAllMenu);
+
+ menuItem = getChild("Deselect");
+ menuItem->setMenuCallback(onDeselectMenu, this);
+ menuItem->setEnabledCallback(enableDeselectMenu);
+
+ menuItem = getChild("Search / Replace...");
+ menuItem->setMenuCallback(onSearchMenu, this);
+ menuItem->setEnabledCallback(NULL);
+}
+
+// static
+void LLPreviewNotecard::onSearchMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ LLFloaterSearchReplace::show(editor);
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onUndoMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->undo();
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onRedoMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->redo();
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onCutMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->cut();
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onCopyMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->copy();
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onPasteMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->paste();
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onSelectAllMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->selectAll();
+ }
+ }
+}
+
+// static
+void LLPreviewNotecard::onDeselectMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (self)
+ {
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (editor)
+ {
+ editor->deselect();
+ }
+ }
+}
+
+// static
+BOOL LLPreviewNotecard::enableUndoMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canUndo();
+}
+
+// static
+BOOL LLPreviewNotecard::enableRedoMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canRedo();
+}
+
+// static
+BOOL LLPreviewNotecard::enableCutMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canCut();
+}
+
+// static
+BOOL LLPreviewNotecard::enableCopyMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canCopy();
+}
+
+// static
+BOOL LLPreviewNotecard::enablePasteMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canPaste();
+}
+
+// static
+BOOL LLPreviewNotecard::enableSelectAllMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canSelectAll();
+}
+
+// static
+BOOL LLPreviewNotecard::enableDeselectMenu(void* userdata)
+{
+ LLPreviewNotecard* self = (LLPreviewNotecard*)userdata;
+ if (!self) return FALSE;
+ LLViewerTextEditor* editor = self->getChild("Notecard Editor");
+ if (!editor) return FALSE;
+ return editor->canDeselect();
+}
+
// EOF
diff --git a/indra/newview/llpreviewnotecard.h b/indra/newview/llpreviewnotecard.h
index 04568bf65..442673c0c 100644
--- a/indra/newview/llpreviewnotecard.h
+++ b/indra/newview/llpreviewnotecard.h
@@ -45,6 +45,8 @@
class LLTextEditor;
class LLViewerTextEditor;
+class LLTextEditor;
+class LLMenuBarGL;
class LLButton;
class AIFilePicker;
@@ -117,6 +119,25 @@ protected:
virtual const char *getTitleName() const { return "Note"; }
+ void initMenu();
+
+ static void onSearchMenu(void* userdata);
+ static void onUndoMenu(void* userdata);
+ static void onRedoMenu(void* userdata);
+ static void onCutMenu(void* userdata);
+ static void onCopyMenu(void* userdata);
+ static void onPasteMenu(void* userdata);
+ static void onSelectAllMenu(void* userdata);
+ static void onDeselectMenu(void* userdata);
+
+ static BOOL enableUndoMenu(void* userdata);
+ static BOOL enableRedoMenu(void* userdata);
+ static BOOL enableCutMenu(void* userdata);
+ static BOOL enableCopyMenu(void* userdata);
+ static BOOL enablePasteMenu(void* userdata);
+ static BOOL enableSelectAllMenu(void* userdata);
+ static BOOL enableDeselectMenu(void* userdata);
+
protected:
LLViewerTextEditor* mEditor;
LLButton* mSaveBtn;
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 320268092..446a96979 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -79,6 +79,7 @@
#include "lldir.h"
#include "llcombobox.h"
//#include "llfloaterchat.h"
+#include "llfloatersearchreplace.h"
#include "llviewerstats.h"
#include "llviewertexteditor.h"
#include "llviewerwindow.h"
@@ -136,10 +137,6 @@ const S32 SCRIPT_MIN_HEIGHT =
const S32 MAX_EXPORT_SIZE = 1000;
-const S32 SCRIPT_SEARCH_WIDTH = 300;
-const S32 SCRIPT_SEARCH_HEIGHT = 120;
-const S32 SCRIPT_SEARCH_LABEL_WIDTH = 50;
-const S32 SCRIPT_SEARCH_BUTTON_WIDTH = 80;
const S32 TEXT_EDIT_COLUMN_HEIGHT = 16;
const S32 MAX_HISTORY_COUNT = 10;
const F32 LIVE_HELP_REFRESH_TIME = 1.f;
@@ -150,148 +147,6 @@ static bool have_script_upload_cap(LLUUID& object_id)
return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty());
}
-/// ---------------------------------------------------------------------------
-/// LLFloaterScriptSearch
-/// ---------------------------------------------------------------------------
-class LLFloaterScriptSearch : public LLFloater
-{
-public:
- LLFloaterScriptSearch(std::string title, LLRect rect, LLScriptEdCore* editor_core);
- ~LLFloaterScriptSearch();
-
- static void show(LLScriptEdCore* editor_core);
- static void onBtnSearch(void* userdata);
- void handleBtnSearch();
-
- static void onBtnReplace(void* userdata);
- void handleBtnReplace();
-
- static void onBtnReplaceAll(void* userdata);
- void handleBtnReplaceAll();
-
- LLScriptEdCore* getEditorCore() { return mEditorCore; }
- static LLFloaterScriptSearch* getInstance() { return sInstance; }
-
- void open(); /*Flawfinder: ignore*/
-
-private:
-
- LLScriptEdCore* mEditorCore;
-
- static LLFloaterScriptSearch* sInstance;
-};
-
-LLFloaterScriptSearch* LLFloaterScriptSearch::sInstance = NULL;
-
-LLFloaterScriptSearch::LLFloaterScriptSearch(std::string title, LLRect rect, LLScriptEdCore* editor_core)
- : LLFloater("script search",rect,title), mEditorCore(editor_core)
-{
-
- LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml");
-
- childSetAction("search_btn", onBtnSearch,this);
- childSetAction("replace_btn", onBtnReplace,this);
- childSetAction("replace_all_btn", onBtnReplaceAll,this);
-
- setDefaultBtn("search_btn");
-
- if (!getHost())
- {
- LLRect curRect = getRect();
- translate(rect.mLeft - curRect.mLeft, rect.mTop - curRect.mTop);
- }
-
- sInstance = this;
-
- childSetFocus("search_text", TRUE);
-
- // find floater in which script panel is embedded
- LLView* viewp = (LLView*)editor_core;
- while(viewp)
- {
- LLFloater* floaterp = dynamic_cast(viewp);
- if (floaterp)
- {
- floaterp->addDependentFloater(this);
- break;
- }
- viewp = viewp->getParent();
- }
-}
-
-//static
-void LLFloaterScriptSearch::show(LLScriptEdCore* editor_core)
-{
- if (sInstance && sInstance->mEditorCore && sInstance->mEditorCore != editor_core)
- {
- sInstance->close();
- delete sInstance;
- }
-
- if (!sInstance)
- {
- S32 left = 0;
- S32 top = 0;
- gFloaterView->getNewFloaterPosition(&left,&top);
-
- // sInstance will be assigned in the constructor.
- new LLFloaterScriptSearch("Script Search",LLRect(left,top,left + SCRIPT_SEARCH_WIDTH,top - SCRIPT_SEARCH_HEIGHT),editor_core);
- }
-
- sInstance->open(); /*Flawfinder: ignore*/
-}
-
-LLFloaterScriptSearch::~LLFloaterScriptSearch()
-{
- sInstance = NULL;
-}
-
-// static
-void LLFloaterScriptSearch::onBtnSearch(void *userdata)
-{
- LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
- self->handleBtnSearch();
-}
-
-void LLFloaterScriptSearch::handleBtnSearch()
-{
- LLCheckBoxCtrl* caseChk = getChild("case_text");
- mEditorCore->mEditor->selectNext(childGetText("search_text"), caseChk->get());
-}
-
-// static
-void LLFloaterScriptSearch::onBtnReplace(void *userdata)
-{
- LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
- self->handleBtnReplace();
-}
-
-void LLFloaterScriptSearch::handleBtnReplace()
-{
- LLCheckBoxCtrl* caseChk = getChild("case_text");
- mEditorCore->mEditor->replaceText(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
-}
-
-// static
-void LLFloaterScriptSearch::onBtnReplaceAll(void *userdata)
-{
- LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
- self->handleBtnReplaceAll();
-}
-
-void LLFloaterScriptSearch::handleBtnReplaceAll()
-{
- LLCheckBoxCtrl* caseChk = getChild("case_text");
- mEditorCore->mEditor->replaceTextAll(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
-}
-
-void LLFloaterScriptSearch::open() /*Flawfinder: ignore*/
-{
- LLFloater::open(); /*Flawfinder: ignore*/
- childSetFocus("search_text", TRUE);
-}
-
-
/// ---------------------------------------------------------------------------
/// LLScriptEdCore
/// ---------------------------------------------------------------------------
@@ -435,14 +290,6 @@ LLScriptEdCore::LLScriptEdCore(
LLScriptEdCore::~LLScriptEdCore()
{
deleteBridges();
-
- // If the search window is up for this editor, close it.
- LLFloaterScriptSearch* script_search = LLFloaterScriptSearch::getInstance();
- if (script_search && script_search->getEditorCore() == this)
- {
- script_search->close();
- delete script_search;
- }
}
BOOL LLScriptEdCore::tick()
@@ -486,6 +333,10 @@ void LLScriptEdCore::initMenu()
menuItem->setMenuCallback(onSelectAllMenu, this);
menuItem->setEnabledCallback(enableSelectAllMenu);
+ menuItem = getChild("Deselect");
+ menuItem->setMenuCallback(onDeselectMenu, this);
+ menuItem->setEnabledCallback(enableDeselectMenu);
+
menuItem = getChild("Search / Replace...");
menuItem->setMenuCallback(onSearchMenu, this);
menuItem->setEnabledCallback(NULL);
@@ -933,7 +784,10 @@ void LLScriptEdCore::onBtnUndoChanges( void* userdata )
void LLScriptEdCore::onSearchMenu(void* userdata)
{
LLScriptEdCore* sec = (LLScriptEdCore*)userdata;
- LLFloaterScriptSearch::show(sec);
+ if (sec && sec->mEditor)
+ {
+ LLFloaterSearchReplace::show(sec->mEditor);
+ }
}
// static
@@ -1341,7 +1195,10 @@ void LLPreviewLSL::onSearchReplace(void* userdata)
{
LLPreviewLSL* self = (LLPreviewLSL*)userdata;
LLScriptEdCore* sec = self->mScriptEd;
- LLFloaterScriptSearch::show(sec);
+ if (sec && sec->mEditor)
+ {
+ LLFloaterSearchReplace::show(sec->mEditor);
+ }
}
// static
@@ -2195,7 +2052,10 @@ void LLLiveLSLEditor::onSearchReplace(void* userdata)
LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
LLScriptEdCore* sec = self->mScriptEd;
- LLFloaterScriptSearch::show(sec);
+ if (sec && sec->mEditor)
+ {
+ LLFloaterSearchReplace::show(sec->mEditor);
+ }
}
struct LLLiveLSLSaveData
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index f4390927d..436d68d4f 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -51,7 +51,6 @@ class LLScrollListCtrl;
class LLViewerObject;
struct LLEntryAndEdCore;
class LLMenuBarGL;
-class LLFloaterScriptSearch;
class LLKeywordToken;
class AIFilePicker;
@@ -61,7 +60,6 @@ class LLScriptEdCore : public LLPanel, public LLEventTimer
friend class LLPreviewScript;
friend class LLPreviewLSL;
friend class LLLiveLSLEditor;
- friend class LLFloaterScriptSearch;
public:
LLScriptEdCore(
@@ -204,6 +202,7 @@ protected:
static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
public:
static LLPreviewLSL* getInstance(const LLUUID& uuid);
+ LLTextEditor* getEditor() { return mScriptEd->mEditor; }
protected:
static void* createScriptEdPanel(void* userdata);
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index e0dc129ad..5e2ed8694 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -699,14 +699,14 @@ void LLSurface::decompressDCTPatch(LLBitPack &bitpack, LLGroupHeader *gopp, BOOL
}
if (b_large_patch)
- {
- i = ph.patchids >> 16; //x
- j = ph.patchids & 0xFFFF; //y
- }
- else
- {
- i = ph.patchids >> 5; //x
- j = ph.patchids & 0x1F; //y
+ {
+ i = ph.patchids >> 16; //x
+ j = ph.patchids & 0xFFFF; //y
+ }
+ else
+ {
+ i = ph.patchids >> 5; //x
+ j = ph.patchids & 0x1F; //y
}
if ((i >= mPatchesPerEdge) || (j >= mPatchesPerEdge))
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index a72d6b5e0..1f4815d53 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1380,6 +1380,12 @@ bool LLTextureFetchWorker::doWork(S32 param)
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
return false ;
}
+ else
+ {
+ // UDP is not an option, we are dead
+ resetFormattedData();
+ return true; // failed
+ }
}
else if (mGetStatus == HTTP_SERVICE_UNAVAILABLE)
{
@@ -1402,7 +1408,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mHTTPFailCount >= max_attempts)
{
- if (cur_size > 0)
+ // Make max_attempts attempt at decoding what data we have,
+ // then bail forever on this image
+ if (cur_size > 0 && (mHTTPFailCount < (max_attempts+1)) )
{
// Use available data
mLoadedDiscard = mFormattedImage->getDiscardLevel();
@@ -1411,9 +1419,21 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
- resetFormattedData();
- mState = DONE;
- return true; // failed
+ //roll back to try UDP
+ if(mCanUseNET)
+ {
+ mState = INIT ;
+ mCanUseHTTP = false ;
+ setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+ return false ;
+ }
+ else
+ {
+ // UDP is not an option, we are dead
+ resetFormattedData();
+ mState = DONE;
+ return true; // failed
+ }
}
}
else
diff --git a/indra/newview/lltool.cpp b/indra/newview/lltool.cpp
index 1a11957fb..6ebeb870a 100644
--- a/indra/newview/lltool.cpp
+++ b/indra/newview/lltool.cpp
@@ -127,6 +127,20 @@ BOOL LLTool::handleRightMouseUp(S32 x, S32 y, MASK mask)
return FALSE;
}
+BOOL LLTool::handleMiddleMouseDown(S32 x,S32 y,MASK mask)
+{
+ // by default, didn't handle it
+ // llinfos << "LLTool::handleMiddleMouseDown" << llendl;
+ return FALSE;
+}
+
+BOOL LLTool::handleMiddleMouseUp(S32 x, S32 y, MASK mask)
+{
+ // by default, didn't handle it
+ // llinfos << "LLTool::handleMiddleMouseUp" << llendl;
+ return FALSE;
+}
+
BOOL LLTool::handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen)
{
// by default, didn't handle it
diff --git a/indra/newview/lltool.h b/indra/newview/lltool.h
index 249088fd3..f954a8c24 100644
--- a/indra/newview/lltool.h
+++ b/indra/newview/lltool.h
@@ -57,6 +57,9 @@ public:
// Virtual functions inherited from LLMouseHandler
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask);
+
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index aaa4f5e77..32e7c2777 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -665,8 +665,6 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
*/
- gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
-
LLViewerObject *object = NULL;
LLViewerObject *parent = NULL;
// object = gViewerWindow->getHoverPick().getObject();
diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp
index db49bbdd7..9e59b9cc4 100644
--- a/indra/newview/lltoolplacer.cpp
+++ b/indra/newview/lltoolplacer.cpp
@@ -175,7 +175,18 @@ BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj,
return TRUE;
}
-
+S32 LLToolPlacer::getTreeGrassSpecies(std::map &table, const char *control, S32 max)
+{
+ const std::string &species = gSavedSettings.getString(control);
+ std::map::iterator it;
+ it = table.find(species);
+ if (it != table.end()) {
+ return it->second;
+ } else {
+ // if saved species not found, default to "Random"
+ return (rand() % max);
+ }
+}
BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )
{
LLVector3 ray_start_region;
@@ -220,13 +231,13 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )
case LL_PCODE_LEGACY_GRASS:
// Randomize size of grass patch
scale.setVec(10.f + ll_frand(20.f), 10.f + ll_frand(20.f), 1.f + ll_frand(2.f));
- state = rand() % LLVOGrass::sMaxGrassSpecies;
+ state = getTreeGrassSpecies(LLVOGrass::sSpeciesNames, "LastGrass", LLVOGrass::sMaxGrassSpecies);
break;
case LL_PCODE_LEGACY_TREE:
case LL_PCODE_TREE_NEW:
- state = rand() % LLVOTree::sMaxTreeSpecies;
+ state = getTreeGrassSpecies(LLVOTree::sSpeciesNames, "LastTree", LLVOTree::sMaxTreeSpecies);
break;
case LL_PCODE_SPHERE:
diff --git a/indra/newview/lltoolplacer.h b/indra/newview/lltoolplacer.h
index d478f7b1c..702fc1f50 100644
--- a/indra/newview/lltoolplacer.h
+++ b/indra/newview/lltoolplacer.h
@@ -62,6 +62,7 @@ protected:
private:
BOOL addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics );
+ S32 getTreeGrassSpecies(std::map &table, const char *control, S32 max);
BOOL raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj, S32* hit_face,
BOOL* b_hit_land, LLVector3* ray_start_region, LLVector3* ray_end_region, LLViewerRegion** region );
BOOL addDuplicate(S32 x, S32 y);
diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp
index 5bab702cf..3eee60882 100644
--- a/indra/newview/llviewerassettype.cpp
+++ b/indra/newview/llviewerassettype.cpp
@@ -86,6 +86,8 @@ LLViewerAssetDictionary::LLViewerAssetDictionary()
addEntry(LLViewerAssetType::AT_LINK, new ViewerAssetEntry(DAD_LINK));
addEntry(LLViewerAssetType::AT_LINK_FOLDER, new ViewerAssetEntry(DAD_LINK));
+ addEntry(LLViewerAssetType::AT_MESH, new ViewerAssetEntry(DAD_MESH));
+
addEntry(LLViewerAssetType::AT_NONE, new ViewerAssetEntry(DAD_NONE));
};
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index a233136b5..1493f4abb 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -561,6 +561,42 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
};
break;
+
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_CLOSE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_PICK_FILE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_GEOMETRY_CHANGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_AUTH_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_AUTH_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_LINK_HOVERED:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_LINK_HOVERED" << LL_ENDL;
+ };
+ break;
default:
{
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 7989b6686..f56802ac7 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -414,7 +414,7 @@ void LLViewerParcelOverlay::uncompressLandOverlay(S32 chunk, U8 *packed_overlay)
{
// Unpack the message data into the ownership array
S32 size = mParcelGridsPerEdge * mParcelGridsPerEdge;
- S32 mParcelOverLayChunks = mRegionSize * mRegionSize / (128 * 128);
+ S32 mParcelOverLayChunks = mRegionSize * mRegionSize / (128 * 128);
S32 chunk_size = size / mParcelOverLayChunks;
memcpy(mOwnership + chunk*chunk_size, packed_overlay, chunk_size); /*Flawfinder: ignore*/
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 51a02a053..060d5df69 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1,1748 +1,1748 @@
-/**
- * @file llviewerregion.cpp
- * @brief Implementation of the LLViewerRegion class.
- *
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-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 "llviewerregion.h"
-
-#include "indra_constants.h"
-#include "llmath.h"
-#include "llhttpclient.h"
-#include "llregionflags.h"
-#include "llregionhandle.h"
-#include "llsurface.h"
-#include "message.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v4math.h"
-
-#include "llagent.h"
-#include "llagentcamera.h"
-#include "llcallingcard.h"
-#include "llcaphttpsender.h"
-#include "lldir.h"
-#include "lleventpoll.h"
-#include "llfloatergodtools.h"
-#include "llfloaterreporter.h"
-#include "llfloaterregioninfo.h"
-#include "llhttpnode.h"
-#include "llsdutil.h"
-#include "llstartup.h"
-#include "lltrans.h"
-#include "llurldispatcher.h"
-#include "llviewerobjectlist.h"
-#include "llviewerparceloverlay.h"
-#include "llvlmanager.h"
-#include "llvlcomposition.h"
-#include "llvocache.h"
-#include "llvoclouds.h"
-#include "llworld.h"
-#include "llspatialpartition.h"
-#include "stringize.h"
-#include "llviewercontrol.h"
-#include "llsdserialize.h"
-#include "llviewerparcelmgr.h"
-
-extern BOOL gNoRender;
-
-#ifdef LL_WINDOWS
- #pragma warning(disable:4355)
-#endif
-
-const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
-const S16 MAX_MAP_DIST = 10;
-typedef std::map CapabilityMap;
-
-class LLViewerRegionImpl {
-public:
- LLViewerRegionImpl(LLViewerRegion * region, LLHost const & host)
- : mHost(host),
- mCompositionp(NULL),
- mEventPoll(NULL)//,
- // I'd prefer to set the LLCapabilityListener name to match the region
- // name -- it's disappointing that's not available at construction time.
- // We could instead store an LLCapabilityListener*, making
- // setRegionNameAndZone() replace the instance. Would that pose
- // consistency problems? Can we even request a capability before calling
- // setRegionNameAndZone()?
- // For testability -- the new Michael Feathers paradigm --
- // LLCapabilityListener binds all the globals it expects to need at
- // construction time.
- //mCapabilityListener(host.getString(), gMessageSystem, *region,
- //gAgent.getID(), gAgent.getSessionID())
- {
- }
-
- void buildCapabilityNames(LLSD& capabilityNames);
-
- // The surfaces and other layers
- LLSurface* mLandp;
-
- // Region geometry data
- LLVector3d mOriginGlobal; // Location of southwest corner of region (meters)
- LLVector3d mCenterGlobal; // Location of center in world space (meters)
- LLHost mHost;
-
- // The unique ID for this region.
- LLUUID mRegionID;
-
- // region/estate owner - usually null.
- LLUUID mOwnerID;
-
- // Network statistics for the region's circuit...
- LLTimer mLastNetUpdate;
-
- // Misc
- LLVLComposition *mCompositionp; // Composition layer for the surface
-
- LLVOCacheEntry::vocache_entry_map_t mCacheMap;
- // time?
- // LRU info?
-
- // Cache ID is unique per-region, across renames, moving locations,
- // etc.
- LLUUID mCacheID;
-
- CapabilityMap mCapabilities;
-
- LLEventPoll* mEventPoll;
-
- /// Post an event to this LLCapabilityListener to invoke a capability message on
- /// this LLViewerRegion's server
- /// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
- //LLCapabilityListener mCapabilityListener;
-
- //spatial partitions for objects in this region
- std::vector mObjectPartition;
-
- LLHTTPClient::ResponderPtr mHttpResponderPtr ;
-};
-
-class BaseCapabilitiesComplete : public LLHTTPClient::Responder
-{
- LOG_CLASS(BaseCapabilitiesComplete);
-public:
- BaseCapabilitiesComplete(LLViewerRegion* region)
- : mRegion(region)
- { }
- virtual ~BaseCapabilitiesComplete()
- {
- if(mRegion)
- {
- mRegion->setHttpResponderPtrNULL() ;
- }
- }
-
- void setRegion(LLViewerRegion* region)
- {
- mRegion = region ;
- }
-
- void error(U32 statusNum, const std::string& reason)
- {
- LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
-
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
- {
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
- }
- }
-
- void result(const LLSD& content)
- {
- if(!mRegion || LLHTTPClient::ResponderPtr(this) != mRegion->getHttpResponderPtr()) //region is removed or responder is not created.
- {
- return ;
- }
-
- LLSD::map_const_iterator iter;
- for(iter = content.beginMap(); iter != content.endMap(); ++iter)
- {
- mRegion->setCapability(iter->first, iter->second);
- LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
- << iter->first << LL_ENDL;
-
- /* HACK we're waiting for the ServerReleaseNotes */
- if (iter->first == "ServerReleaseNotes" && mRegion->getReleaseNotesRequested())
- {
- mRegion->showReleaseNotes();
- }
- }
-
- mRegion->setCapabilitiesReceived(true);
-
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
- {
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
- }
- }
-
- static boost::intrusive_ptr build(
- LLViewerRegion* region)
- {
- return boost::intrusive_ptr(
- new BaseCapabilitiesComplete(region));
- }
-
-private:
- LLViewerRegion* mRegion;
-};
-
-
-LLViewerRegion::LLViewerRegion(const U64 &handle,
- const LLHost &host,
- const U32 grids_per_region_edge,
- const U32 grids_per_patch_edge,
- const F32 region_width_meters)
-: mImpl(new LLViewerRegionImpl(this, host)),
- mHandle(handle),
- mTimeDilation(1.0f),
- mName(""),
- mZoning(""),
- mIsEstateManager(FALSE),
- mRegionFlags( REGION_FLAGS_DEFAULT ),
- mSimAccess( SIM_ACCESS_MIN ),
- mBillableFactor(1.0),
- mMaxTasks(DEFAULT_MAX_REGION_WIDE_PRIM_COUNT),
- mClassID(0),
- mCPURatio(0),
- mColoName("unknown"),
- mProductSKU("unknown"),
- mProductName("unknown"),
- mHttpUrl(""),
- mCacheLoaded(FALSE),
- mCacheDirty(FALSE),
- mReleaseNotesRequested(FALSE),
- mCapabilitiesReceived(false),
- mWidth(region_width_meters)
-{
- mImpl->mOriginGlobal = from_region_handle(handle);
- updateRenderMatrix();
-
- mImpl->mLandp = new LLSurface('l', NULL);
-
- if (!gNoRender)
- {
- // Create the composition layer for the surface
- mImpl->mCompositionp =
- new LLVLComposition(mImpl->mLandp,
- grids_per_region_edge,
- mWidth / grids_per_region_edge);
- mImpl->mCompositionp->setSurface(mImpl->mLandp);
-
- // Create the surfaces
- mImpl->mLandp->setRegion(this);
- mImpl->mLandp->create(grids_per_region_edge,
- grids_per_patch_edge,
- mImpl->mOriginGlobal,
- mWidth);
- }
-
- if (!gNoRender)
- {
- mParcelOverlay = new LLViewerParcelOverlay(this, mWidth);
- //Re-init the parcel mgr for this sim
- LLViewerParcelMgr::getInstance()->init(mWidth);
- }
- else
- {
- mParcelOverlay = NULL;
- }
-
- setOriginGlobal(from_region_handle(handle));
- calculateCenterGlobal();
-
- // Create the object lists
- initStats();
-
- //create object partitions
- //MUST MATCH declaration of eObjectPartitions
- mImpl->mObjectPartition.push_back(new LLHUDPartition()); //PARTITION_HUD
- mImpl->mObjectPartition.push_back(new LLTerrainPartition()); //PARTITION_TERRAIN
- mImpl->mObjectPartition.push_back(new LLVoidWaterPartition()); //PARTITION_VOIDWATER
- mImpl->mObjectPartition.push_back(new LLWaterPartition()); //PARTITION_WATER
- mImpl->mObjectPartition.push_back(new LLTreePartition()); //PARTITION_TREE
- mImpl->mObjectPartition.push_back(new LLParticlePartition()); //PARTITION_PARTICLE
- mImpl->mObjectPartition.push_back(new LLCloudPartition()); //PARTITION_CLOUD
- mImpl->mObjectPartition.push_back(new LLGrassPartition()); //PARTITION_GRASS
- mImpl->mObjectPartition.push_back(new LLVolumePartition()); //PARTITION_VOLUME
- mImpl->mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE
- mImpl->mObjectPartition.push_back(new LLHUDParticlePartition());//PARTITION_HUD_PARTICLE
- mImpl->mObjectPartition.push_back(NULL); //PARTITION_NONE
-}
-
-
-void LLViewerRegion::initStats()
-{
- mImpl->mLastNetUpdate.reset();
- mPacketsIn = 0;
- mBitsIn = 0;
- mLastBitsIn = 0;
- mLastPacketsIn = 0;
- mPacketsOut = 0;
- mLastPacketsOut = 0;
- mPacketsLost = 0;
- mLastPacketsLost = 0;
- mPingDelay = 0;
- mAlive = false; // can become false if circuit disconnects
-}
-
-LLViewerRegion::~LLViewerRegion()
-{
- if(mImpl->mHttpResponderPtr)
- {
- (static_cast(mImpl->mHttpResponderPtr.get()))->setRegion(NULL) ;
- }
-
- gVLManager.cleanupData(this);
- // Can't do this on destruction, because the neighbor pointers might be invalid.
- // This should be reference counted...
- disconnectAllNeighbors();
- mCloudLayer.destroy();
- LLViewerPartSim::getInstance()->cleanupRegion(this);
-
- gObjectList.killObjects(this);
-
- delete mImpl->mCompositionp;
- delete mParcelOverlay;
- delete mImpl->mLandp;
- delete mImpl->mEventPoll;
- LLHTTPSender::clearSender(mImpl->mHost);
-
- saveObjectCache();
-
- std::for_each(mImpl->mObjectPartition.begin(), mImpl->mObjectPartition.end(), DeletePointer());
-
- delete mImpl;
- mImpl = NULL;
-}
-
-/*LLEventPump& LLViewerRegion::getCapAPI() const
-{
- return mImpl->mCapabilityListener.getCapAPI();
-}*/
-
-/*virtual*/
-const LLHost& LLViewerRegion::getHost() const
-{
- return mImpl->mHost;
-}
-
-LLSurface & LLViewerRegion::getLand() const
-{
- return *mImpl->mLandp;
-}
-
-const LLUUID& LLViewerRegion::getRegionID() const
-{
- return mImpl->mRegionID;
-}
-
-void LLViewerRegion::setRegionID(const LLUUID& region_id)
-{
- mImpl->mRegionID = region_id;
-}
-
-void LLViewerRegion::loadObjectCache()
-{
- if (mCacheLoaded)
- {
- return;
- }
-
- // Presume success. If it fails, we don't want to try again.
- mCacheLoaded = TRUE;
-
- if(LLVOCache::hasInstance())
- {
- LLVOCache::getInstance()->readFromCache(mHandle, mImpl->mCacheID, mImpl->mCacheMap) ;
- }
-}
-
-
-void LLViewerRegion::saveObjectCache()
-{
- if (!mCacheLoaded)
- {
- return;
- }
-
- if (mImpl->mCacheMap.empty())
- {
- return;
- }
-
- if(LLVOCache::hasInstance())
- {
- LLVOCache::getInstance()->writeToCache(mHandle, mImpl->mCacheID, mImpl->mCacheMap, mCacheDirty) ;
- mCacheDirty = FALSE;
- }
-
- for(LLVOCacheEntry::vocache_entry_map_t::iterator iter = mImpl->mCacheMap.begin(); iter != mImpl->mCacheMap.end(); ++iter)
- {
- delete iter->second;
- }
- mImpl->mCacheMap.clear();
-}
-
-void LLViewerRegion::sendMessage()
-{
- gMessageSystem->sendMessage(mImpl->mHost);
-}
-
-void LLViewerRegion::sendReliableMessage()
-{
- gMessageSystem->sendReliable(mImpl->mHost);
-}
-
-void LLViewerRegion::setFlags(BOOL b, U32 flags)
-{
- if (b)
- {
- mRegionFlags |= flags;
- }
- else
- {
- mRegionFlags &= ~flags;
- }
-}
-
-void LLViewerRegion::setWaterHeight(F32 water_level)
-{
- mImpl->mLandp->setWaterHeight(water_level);
-}
-
-F32 LLViewerRegion::getWaterHeight() const
-{
- return mImpl->mLandp->getWaterHeight();
-}
-
-BOOL LLViewerRegion::isVoiceEnabled() const
-{
- return (getRegionFlags() & REGION_FLAGS_ALLOW_VOICE);
-}
-
-void LLViewerRegion::setRegionFlags(U32 flags)
-{
- mRegionFlags = flags;
-}
-
-
-void LLViewerRegion::setOriginGlobal(const LLVector3d &origin_global)
-{
- mImpl->mOriginGlobal = origin_global;
- updateRenderMatrix();
- mImpl->mLandp->setOriginGlobal(origin_global);
- mWind.setOriginGlobal(origin_global);
- mCloudLayer.setOriginGlobal(origin_global);
- calculateCenterGlobal();
-}
-
-void LLViewerRegion::updateRenderMatrix()
-{
- mRenderMatrix.setTranslation(getOriginAgent());
-}
-
-void LLViewerRegion::setTimeDilation(F32 time_dilation)
-{
- mTimeDilation = time_dilation;
-}
-
-const LLVector3d & LLViewerRegion::getOriginGlobal() const
-{
- return mImpl->mOriginGlobal;
-}
-
-LLVector3 LLViewerRegion::getOriginAgent() const
-{
- return gAgent.getPosAgentFromGlobal(mImpl->mOriginGlobal);
-}
-
-const LLVector3d & LLViewerRegion::getCenterGlobal() const
-{
- return mImpl->mCenterGlobal;
-}
-
-LLVector3 LLViewerRegion::getCenterAgent() const
-{
- return gAgent.getPosAgentFromGlobal(mImpl->mCenterGlobal);
-}
-
-void LLViewerRegion::setOwner(const LLUUID& owner_id)
-{
- mImpl->mOwnerID = owner_id;
-}
-
-const LLUUID& LLViewerRegion::getOwner() const
-{
- return mImpl->mOwnerID;
-}
-
-void LLViewerRegion::setRegionNameAndZone (const std::string& name_zone)
-{
- std::string::size_type pipe_pos = name_zone.find('|');
- S32 length = name_zone.size();
- if (pipe_pos != std::string::npos)
- {
- mName = name_zone.substr(0, pipe_pos);
- mZoning = name_zone.substr(pipe_pos+1, length-(pipe_pos+1));
- }
- else
- {
- mName = name_zone;
- mZoning = "";
- }
-
- LLStringUtil::stripNonprintable(mName);
- LLStringUtil::stripNonprintable(mZoning);
-}
-
-BOOL LLViewerRegion::canManageEstate() const
-{
- return gAgent.isGodlike()
- || isEstateManager()
- || gAgent.getID() == getOwner();
-}
-
-const std::string LLViewerRegion::getSimAccessString() const
-{
- return accessToString(mSimAccess);
-}
-
-
-// static
-std::string LLViewerRegion::regionFlagsToString(U32 flags)
-{
- std::string result;
- if (flags & REGION_FLAGS_SANDBOX)
- {
- if(!result.empty()) result += ", ";
- result += "Sandbox";
- }
-
- if (flags & REGION_FLAGS_ALLOW_DAMAGE)
- {
- if(!result.empty()) result += ", ";
- result += "Not Safe";
- }
- //
- //These dont seem to have value anymore.
- /*if (!(flags & REGION_FLAGS_PUBLIC_ALLOWED))
- {
- if(!result.empty()) result += ", ";
- result += "Private";
- }
-
- if (!(flags & REGION_FLAGS_ALLOW_VOICE))
- {
- if(!result.empty()) result += ", ";
- result += "Voice Disabled";
- }*/
- if (flags & REGION_FLAGS_ALLOW_LANDMARK)
- {
- if(!result.empty()) result += ", ";
- result += "Create Landmarks";
- }
-
- if (flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT)
- {
- if(!result.empty()) result += ", ";
- result += "Direct Teleport";
- }
-
- if (flags & REGION_FLAGS_DENY_ANONYMOUS)
- {
- if(!result.empty()) result += ", ";
- result += "Payment Info needed";
- }
-
- if (flags & REGION_FLAGS_DENY_AGEUNVERIFIED)
- {
- if(!result.empty()) result += ", ";
- result += "Age Verified";
- }
-
- if (flags & REGION_FLAGS_BLOCK_FLY)
- {
- if(!result.empty()) result += ", ";
- result += "No Fly";
- }
-
- //
-
- return result;
-}
-
-// static
-std::string LLViewerRegion::accessToString(U8 sim_access)
-{
- switch(sim_access)
- {
- case SIM_ACCESS_PG:
- return LLTrans::getString("SIM_ACCESS_PG");
-
- case SIM_ACCESS_MATURE:
- return LLTrans::getString("SIM_ACCESS_MATURE");
-
- case SIM_ACCESS_ADULT:
- return LLTrans::getString("SIM_ACCESS_ADULT");
-
- case SIM_ACCESS_DOWN:
- return LLTrans::getString("SIM_ACCESS_DOWN");
-
- case SIM_ACCESS_MIN:
- default:
- return LLTrans::getString("SIM_ACCESS_MIN");
- }
-}
-
-// static
-std::string LLViewerRegion::accessToShortString(U8 sim_access)
-{
- switch(sim_access) /* Flawfinder: ignore */
- {
- case SIM_ACCESS_PG:
- return "PG";
-
- case SIM_ACCESS_MATURE:
- return "M";
-
- case SIM_ACCESS_ADULT:
- return "A";
-
- case SIM_ACCESS_MIN:
- default:
- return "U";
- }
-}
-
-// static
-void LLViewerRegion::processRegionInfo(LLMessageSystem* msg, void**)
-{
- // send it to 'observers'
- LLFloaterGodTools::processRegionInfo(msg);
- LLFloaterRegionInfo::processRegionInfo(msg);
- LLFloaterReporter::processRegionInfo(msg);
-}
-
-void LLViewerRegion::setCacheID(const LLUUID& id)
-{
- mImpl->mCacheID = id;
-}
-
-S32 LLViewerRegion::renderPropertyLines()
-{
- if (mParcelOverlay)
- {
- return mParcelOverlay->renderPropertyLines();
- }
- else
- {
- return 0;
- }
-}
-
-// This gets called when the height field changes.
-void LLViewerRegion::dirtyHeights()
-{
- // Property lines need to be reconstructed when the land changes.
- if (mParcelOverlay)
- {
- mParcelOverlay->setDirty();
- }
-}
-
-BOOL LLViewerRegion::idleUpdate(F32 max_update_time)
-{
- // did_update returns TRUE if we did at least one significant update
- BOOL did_update = mImpl->mLandp->idleUpdate(max_update_time);
-
- if (mParcelOverlay)
- {
- // Hopefully not a significant time sink...
- mParcelOverlay->idleUpdate();
- }
-
- return did_update;
-}
-
-
-// As above, but forcibly do the update.
-void LLViewerRegion::forceUpdate()
-{
- mImpl->mLandp->idleUpdate(0.f);
-
- if (mParcelOverlay)
- {
- mParcelOverlay->idleUpdate(true);
- }
-}
-
-void LLViewerRegion::connectNeighbor(LLViewerRegion *neighborp, U32 direction)
-{
- mImpl->mLandp->connectNeighbor(neighborp->mImpl->mLandp, direction);
- mCloudLayer.connectNeighbor(&(neighborp->mCloudLayer), direction);
-}
-
-
-void LLViewerRegion::disconnectAllNeighbors()
-{
- mImpl->mLandp->disconnectAllNeighbors();
- mCloudLayer.disconnectAllNeighbors();
-}
-
-LLVLComposition * LLViewerRegion::getComposition() const
-{
- return mImpl->mCompositionp;
-}
-
-F32 LLViewerRegion::getCompositionXY(const S32 x, const S32 y) const
-{
- if (x >= 256)
- {
- if (y >= 256)
- {
- LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 256.f, 0.f);
- LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
- if (regionp)
- {
- // OK, we need to do some hackery here - different simulators no longer use
- // the same composition values, necessarily.
- // If we're attempting to blend, then we want to make the fractional part of
- // this region match the fractional of the adjacent. For now, just minimize
- // the delta.
- F32 our_comp = getComposition()->getValueScaled(255, 255);
- F32 adj_comp = regionp->getComposition()->getValueScaled(x - 256.f, y - 256.f);
- while (llabs(our_comp - adj_comp) >= 1.f)
- {
- if (our_comp > adj_comp)
- {
- adj_comp += 1.f;
- }
- else
- {
- adj_comp -= 1.f;
- }
- }
- return adj_comp;
- }
- }
- else
- {
- LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 0, 0.f);
- LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
- if (regionp)
- {
- // OK, we need to do some hackery here - different simulators no longer use
- // the same composition values, necessarily.
- // If we're attempting to blend, then we want to make the fractional part of
- // this region match the fractional of the adjacent. For now, just minimize
- // the delta.
- F32 our_comp = getComposition()->getValueScaled(255.f, (F32)y);
- F32 adj_comp = regionp->getComposition()->getValueScaled(x - 256.f, (F32)y);
- while (llabs(our_comp - adj_comp) >= 1.f)
- {
- if (our_comp > adj_comp)
- {
- adj_comp += 1.f;
- }
- else
- {
- adj_comp -= 1.f;
- }
- }
- return adj_comp;
- }
- }
- }
- else if (y >= 256)
- {
- LLVector3d center = getCenterGlobal() + LLVector3d(0.f, 256.f, 0.f);
- LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
- if (regionp)
- {
- // OK, we need to do some hackery here - different simulators no longer use
- // the same composition values, necessarily.
- // If we're attempting to blend, then we want to make the fractional part of
- // this region match the fractional of the adjacent. For now, just minimize
- // the delta.
- F32 our_comp = getComposition()->getValueScaled((F32)x, 255.f);
- F32 adj_comp = regionp->getComposition()->getValueScaled((F32)x, y - 256.f);
- while (llabs(our_comp - adj_comp) >= 1.f)
- {
- if (our_comp > adj_comp)
- {
- adj_comp += 1.f;
- }
- else
- {
- adj_comp -= 1.f;
- }
- }
- return adj_comp;
- }
- }
-
- return getComposition()->getValueScaled((F32)x, (F32)y);
-}
-
-void LLViewerRegion::calculateCenterGlobal()
-{
- mImpl->mCenterGlobal = mImpl->mOriginGlobal;
- mImpl->mCenterGlobal.mdV[VX] += 0.5 * mWidth;
- mImpl->mCenterGlobal.mdV[VY] += 0.5 * mWidth;
- mImpl->mCenterGlobal.mdV[VZ] = 0.5 * mImpl->mLandp->getMinZ() + mImpl->mLandp->getMaxZ();
-}
-
-void LLViewerRegion::calculateCameraDistance()
-{
- mCameraDistanceSquared = (F32)(gAgentCamera.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
-}
-
-U32 LLViewerRegion::getNetDetailsForLCD()
-{
- return mPingDelay;
-}
-
-std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion)
-{
- s << "{ ";
- s << region.mImpl->mHost;
- s << " mOriginGlobal = " << region.getOriginGlobal()<< "\n";
- std::string name(region.getName()), zone(region.getZoning());
- if (! name.empty())
- {
- s << " mName = " << name << '\n';
- }
- if (! zone.empty())
- {
- s << " mZoning = " << zone << '\n';
- }
- s << "}";
- return s;
-}
-
-
-// ---------------- Protected Member Functions ----------------
-
-void LLViewerRegion::updateNetStats()
-{
- F32 dt = mImpl->mLastNetUpdate.getElapsedTimeAndResetF32();
-
- LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(mImpl->mHost);
- if (!cdp)
- {
- mAlive = false;
- return;
- }
-
- mAlive = true;
- mDeltaTime = dt;
-
- mLastPacketsIn = mPacketsIn;
- mLastBitsIn = mBitsIn;
- mLastPacketsOut = mPacketsOut;
- mLastPacketsLost = mPacketsLost;
-
- mPacketsIn = cdp->getPacketsIn();
- mBitsIn = 8 * cdp->getBytesIn();
- mPacketsOut = cdp->getPacketsOut();
- mPacketsLost = cdp->getPacketsLost();
- mPingDelay = cdp->getPingDelay();
-
- mBitStat.addValue(mBitsIn - mLastBitsIn);
- mPacketsStat.addValue(mPacketsIn - mLastPacketsIn);
- mPacketsLostStat.addValue(mPacketsLost);
-}
-
-
-U32 LLViewerRegion::getPacketsLost() const
-{
- LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(mImpl->mHost);
- if (!cdp)
- {
- llinfos << "LLViewerRegion::getPacketsLost couldn't find circuit for " << mImpl->mHost << llendl;
- return 0;
- }
- else
- {
- return cdp->getPacketsLost();
- }
-}
-
-void LLViewerRegion::setHttpResponderPtrNULL()
-{
- mImpl->mHttpResponderPtr = NULL;
-}
-
-const LLHTTPClient::ResponderPtr LLViewerRegion::getHttpResponderPtr() const
-{
- return mImpl->mHttpResponderPtr;
-}
-
-BOOL LLViewerRegion::pointInRegionGlobal(const LLVector3d &point_global) const
-{
- LLVector3 pos_region = getPosRegionFromGlobal(point_global);
-
- if (pos_region.mV[VX] < 0)
- {
- return FALSE;
- }
- if (pos_region.mV[VX] >= mWidth)
- {
- return FALSE;
- }
- if (pos_region.mV[VY] < 0)
- {
- return FALSE;
- }
- if (pos_region.mV[VY] >= mWidth)
- {
- return FALSE;
- }
- return TRUE;
-}
-
-LLVector3 LLViewerRegion::getPosRegionFromGlobal(const LLVector3d &point_global) const
-{
- LLVector3 pos_region;
- pos_region.setVec(point_global - mImpl->mOriginGlobal);
- return pos_region;
-}
-
-LLVector3d LLViewerRegion::getPosGlobalFromRegion(const LLVector3 &pos_region) const
-{
- LLVector3d pos_region_d;
- pos_region_d.setVec(pos_region);
- return pos_region_d + mImpl->mOriginGlobal;
-}
-
-LLVector3 LLViewerRegion::getPosAgentFromRegion(const LLVector3 &pos_region) const
-{
- LLVector3d pos_global = getPosGlobalFromRegion(pos_region);
-
- return gAgent.getPosAgentFromGlobal(pos_global);
-}
-
-LLVector3 LLViewerRegion::getPosRegionFromAgent(const LLVector3 &pos_agent) const
-{
- return pos_agent - getOriginAgent();
-}
-
-F32 LLViewerRegion::getLandHeightRegion(const LLVector3& region_pos)
-{
- return mImpl->mLandp->resolveHeightRegion( region_pos );
-}
-
-bool LLViewerRegion::isAlive()
-{
- return mAlive;
-}
-
-BOOL LLViewerRegion::isOwnedSelf(const LLVector3& pos)
-{
- if (mParcelOverlay)
- {
- return mParcelOverlay->isOwnedSelf(pos);
- } else {
- return FALSE;
- }
-}
-
-// Owned by a group you belong to? (officer or member)
-BOOL LLViewerRegion::isOwnedGroup(const LLVector3& pos)
-{
- if (mParcelOverlay)
- {
- return mParcelOverlay->isOwnedGroup(pos);
- } else {
- return FALSE;
- }
-}
-
-// the new TCP coarse location handler node
-class CoarseLocationUpdate : public LLHTTPNode
-{
-public:
- virtual void post(
- ResponsePtr responder,
- const LLSD& context,
- const LLSD& input) const
- {
- LLHost host(input["sender"].asString());
- LLViewerRegion* region = LLWorld::getInstance()->getRegion(host);
- if( !region )
- {
- return;
- }
-
- S32 target_index = input["body"]["Index"][0]["Prey"].asInteger();
- S32 you_index = input["body"]["Index"][0]["You" ].asInteger();
-
- LLDynamicArray* avatar_locs = ®ion->mMapAvatars;
- LLDynamicArray* avatar_ids = ®ion->mMapAvatarIDs;
- avatar_locs->reset();
- avatar_ids->reset();
-
- //llinfos << "coarse locations agent[0] " << input["body"]["AgentData"][0]["AgentID"].asUUID() << llendl;
- //llinfos << "my agent id = " << gAgent.getID() << llendl;
- //llinfos << ll_pretty_print_sd(input) << llendl;
-
- LLSD
- locs = input["body"]["Location"],
- agents = input["body"]["AgentData"];
- LLSD::array_iterator
- locs_it = locs.beginArray(),
- agents_it = agents.beginArray();
- BOOL has_agent_data = input["body"].has("AgentData");
-
- for(int i=0;
- locs_it != locs.endArray();
- i++, locs_it++)
- {
- U8
- x = locs_it->get("X").asInteger(),
- y = locs_it->get("Y").asInteger(),
- z = locs_it->get("Z").asInteger();
- // treat the target specially for the map, and don't add you or the target
- if(i == target_index)
- {
- LLVector3d global_pos(region->getOriginGlobal());
- global_pos.mdV[VX] += (F64)x;
- global_pos.mdV[VY] += (F64)y;
- global_pos.mdV[VZ] += (F64)z * 4.0;
- LLAvatarTracker::instance().setTrackedCoarseLocation(global_pos);
- }
- else if( i != you_index)
- {
- U32 loc = x << 16 | y << 8 | z; loc = loc;
- U32 pos = 0x0;
- pos |= x;
- pos <<= 8;
- pos |= y;
- pos <<= 8;
- pos |= z;
- avatar_locs->put(pos);
- //llinfos << "next pos: " << x << "," << y << "," << z << ": " << pos << llendl;
- if(has_agent_data) // for backwards compatibility with old message format
- {
- LLUUID agent_id(agents_it->get("AgentID").asUUID());
- //llinfos << "next agent: " << agent_id.asString() << llendl;
- avatar_ids->put(agent_id);
- }
- }
- if (has_agent_data)
- {
- agents_it++;
- }
- }
- }
-};
-
-// build the coarse location HTTP node under the "/message" URL
-LLHTTPRegistration
- gHTTPRegistrationCoarseLocationUpdate(
- "/message/CoarseLocationUpdate");
-
-
-// the deprecated coarse location handler
-void LLViewerRegion::updateCoarseLocations(LLMessageSystem* msg)
-{
- //llinfos << "CoarseLocationUpdate" << llendl;
- mMapAvatars.reset();
- mMapAvatarIDs.reset(); // only matters in a rare case but it's good to be safe.
-
- U8 x_pos = 0;
- U8 y_pos = 0;
- U8 z_pos = 0;
-
- U32 pos = 0x0;
-
- S16 agent_index;
- S16 target_index;
- msg->getS16Fast(_PREHASH_Index, _PREHASH_You, agent_index);
- msg->getS16Fast(_PREHASH_Index, _PREHASH_Prey, target_index);
-
- BOOL has_agent_data = msg->has(_PREHASH_AgentData);
- S32 count = msg->getNumberOfBlocksFast(_PREHASH_Location);
- for(S32 i = 0; i < count; i++)
- {
- msg->getU8Fast(_PREHASH_Location, _PREHASH_X, x_pos, i);
- msg->getU8Fast(_PREHASH_Location, _PREHASH_Y, y_pos, i);
- msg->getU8Fast(_PREHASH_Location, _PREHASH_Z, z_pos, i);
- LLUUID agent_id = LLUUID::null;
- if(has_agent_data)
- {
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id, i);
- }
-
- //llinfos << " object X: " << (S32)x_pos << " Y: " << (S32)y_pos
- // << " Z: " << (S32)(z_pos * 4)
- // << llendl;
-
- // treat the target specially for the map
- if(i == target_index)
- {
- LLVector3d global_pos(mImpl->mOriginGlobal);
- global_pos.mdV[VX] += (F64)(x_pos);
- global_pos.mdV[VY] += (F64)(y_pos);
- global_pos.mdV[VZ] += (F64)(z_pos) * 4.0;
- LLAvatarTracker::instance().setTrackedCoarseLocation(global_pos);
- }
-
- //don't add you
- if( i != agent_index)
- {
- pos = 0x0;
- pos |= x_pos;
- pos <<= 8;
- pos |= y_pos;
- pos <<= 8;
- pos |= z_pos;
- mMapAvatars.put(pos);
- if(has_agent_data)
- {
- mMapAvatarIDs.put(agent_id);
- }
- }
- }
-}
-
-void LLViewerRegion::getInfo(LLSD& info)
-{
- info["Region"]["Host"] = getHost().getIPandPort();
- info["Region"]["Name"] = getName();
- U32 x, y;
- from_region_handle(getHandle(), &x, &y);
- info["Region"]["Handle"]["x"] = (LLSD::Integer)x;
- info["Region"]["Handle"]["y"] = (LLSD::Integer)y;
-}
-
-void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features)
-{
- sim_features = mSimulatorFeatures;
-}
-
-void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features)
-{
- std::stringstream str;
-
- LLSDSerialize::toPrettyXML(sim_features, str);
- llinfos << str.str() << llendl;
- mSimulatorFeatures = sim_features;
-}
-
-LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinaryBuffer &dp)
-{
- U32 local_id = objectp->getLocalID();
- U32 crc = objectp->getCRC();
-
- LLVOCacheEntry* entry = get_if_there(mImpl->mCacheMap, local_id, (LLVOCacheEntry*)NULL);
-
- if (entry)
- {
- // we've seen this object before
- if (entry->getCRC() == crc)
- {
- // Record a hit
- entry->recordDupe();
- return CACHE_UPDATE_DUPE;
- }
-
- // Update the cache entry
- mImpl->mCacheMap.erase(local_id);
- delete entry;
- entry = new LLVOCacheEntry(local_id, crc, dp);
- mImpl->mCacheMap[local_id] = entry;
- return CACHE_UPDATE_CHANGED;
- }
-
- // we haven't seen this object before
-
- // Create new entry and add to map
- eCacheUpdateResult result = CACHE_UPDATE_ADDED;
- if (mImpl->mCacheMap.size() > MAX_OBJECT_CACHE_ENTRIES)
- {
- mImpl->mCacheMap.erase(mImpl->mCacheMap.begin());
- result = CACHE_UPDATE_REPLACED;
-
- }
- entry = new LLVOCacheEntry(local_id, crc, dp);
-
- mImpl->mCacheMap[local_id] = entry;
- return result;
-}
-
-// Get data packer for this object, if we have cached data
-// AND the CRC matches. JC
-LLDataPacker *LLViewerRegion::getDP(U32 local_id, U32 crc, U8 &cache_miss_type)
-{
- //llassert(mCacheLoaded); This assert failes often, changing to early-out -- davep, 2010/10/18
-
- LLVOCacheEntry* entry = get_if_there(mImpl->mCacheMap, local_id, (LLVOCacheEntry*)NULL);
-
- if (entry)
- {
- // we've seen this object before
- if (entry->getCRC() == crc)
- {
- // Record a hit
- entry->recordHit();
- cache_miss_type = CACHE_MISS_TYPE_NONE;
- return entry->getDP(crc);
- }
- else
- {
- // llinfos << "CRC miss for " << local_id << llendl;
- cache_miss_type = CACHE_MISS_TYPE_CRC;
- mCacheMissCRC.put(local_id);
- }
- }
- else
- {
- // llinfos << "Cache miss for " << local_id << llendl;
- cache_miss_type = CACHE_MISS_TYPE_FULL;
- mCacheMissFull.put(local_id);
- }
-
- return NULL;
-}
-
-void LLViewerRegion::addCacheMissFull(const U32 local_id)
-{
- mCacheMissFull.put(local_id);
-}
-
-void LLViewerRegion::requestCacheMisses()
-{
- S32 full_count = mCacheMissFull.count();
- S32 crc_count = mCacheMissCRC.count();
- if (full_count == 0 && crc_count == 0) return;
-
- LLMessageSystem* msg = gMessageSystem;
- BOOL start_new_message = TRUE;
- S32 blocks = 0;
- S32 i;
-
- // Send full cache miss updates. For these, we KNOW we don't
- // have a viewer object.
- for (i = 0; i < full_count; i++)
- {
- if (start_new_message)
- {
- msg->newMessageFast(_PREHASH_RequestMultipleObjects);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- start_new_message = FALSE;
- }
-
- msg->nextBlockFast(_PREHASH_ObjectData);
- msg->addU8Fast(_PREHASH_CacheMissType, CACHE_MISS_TYPE_FULL);
- msg->addU32Fast(_PREHASH_ID, mCacheMissFull[i]);
- blocks++;
-
- if (blocks >= 255)
- {
- sendReliableMessage();
- start_new_message = TRUE;
- blocks = 0;
- }
- }
-
- // Send CRC miss updates. For these, we _might_ have a viewer object,
- // but probably not.
- for (i = 0; i < crc_count; i++)
- {
- if (start_new_message)
- {
- msg->newMessageFast(_PREHASH_RequestMultipleObjects);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- start_new_message = FALSE;
- }
-
- msg->nextBlockFast(_PREHASH_ObjectData);
- msg->addU8Fast(_PREHASH_CacheMissType, CACHE_MISS_TYPE_CRC);
- msg->addU32Fast(_PREHASH_ID, mCacheMissCRC[i]);
- blocks++;
-
- if (blocks >= 255)
- {
- sendReliableMessage();
- start_new_message = TRUE;
- blocks = 0;
- }
- }
-
- // finish any pending message
- if (!start_new_message)
- {
- sendReliableMessage();
- }
- mCacheMissFull.reset();
- mCacheMissCRC.reset();
-
- mCacheDirty = TRUE ;
- // llinfos << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << llendl;
- #if LL_RECORD_VIEWER_STATS
- LLViewerStatsRecorder::instance()->beginObjectUpdateEvents(this);
- LLViewerStatsRecorder::instance()->recordRequestCacheMissesEvent(full_count + crc_count);
- LLViewerStatsRecorder::instance()->endObjectUpdateEvents();
- #endif
-}
-
-void LLViewerRegion::dumpCache()
-{
- const S32 BINS = 4;
- S32 hit_bin[BINS];
- S32 change_bin[BINS];
-
- S32 i;
- for (i = 0; i < BINS; ++i)
- {
- hit_bin[i] = 0;
- change_bin[i] = 0;
- }
-
- LLVOCacheEntry *entry;
- for(LLVOCacheEntry::vocache_entry_map_t::iterator iter = mImpl->mCacheMap.begin(); iter != mImpl->mCacheMap.end(); ++iter)
- {
- entry = iter->second ;
-
- S32 hits = entry->getHitCount();
- S32 changes = entry->getCRCChangeCount();
-
- hits = llclamp(hits, 0, BINS-1);
- changes = llclamp(changes, 0, BINS-1);
-
- hit_bin[hits]++;
- change_bin[changes]++;
- }
-
- llinfos << "Count " << mImpl->mCacheMap.size() << llendl;
- for (i = 0; i < BINS; i++)
- {
- llinfos << "Hits " << i << " " << hit_bin[i] << llendl;
- }
- for (i = 0; i < BINS; i++)
- {
- llinfos << "Changes " << i << " " << change_bin[i] << llendl;
- }
-}
-
-void LLViewerRegion::unpackRegionHandshake()
-{
- LLMessageSystem *msg = gMessageSystem;
-
- U32 region_flags;
- U8 sim_access;
- std::string sim_name;
- LLUUID sim_owner;
- BOOL is_estate_manager;
- F32 water_height;
- F32 billable_factor;
- LLUUID cache_id;
-
- msg->getU32 ("RegionInfo", "RegionFlags", region_flags);
- msg->getU8 ("RegionInfo", "SimAccess", sim_access);
- msg->getString ("RegionInfo", "SimName", sim_name);
- msg->getUUID ("RegionInfo", "SimOwner", sim_owner);
- msg->getBOOL ("RegionInfo", "IsEstateManager", is_estate_manager);
- msg->getF32 ("RegionInfo", "WaterHeight", water_height);
- msg->getF32 ("RegionInfo", "BillableFactor", billable_factor);
- msg->getUUID ("RegionInfo", "CacheID", cache_id );
-
- setRegionFlags(region_flags);
- setSimAccess(sim_access);
- setRegionNameAndZone(sim_name);
- setOwner(sim_owner);
- setIsEstateManager(is_estate_manager);
- setWaterHeight(water_height);
- setBillableFactor(billable_factor);
- setCacheID(cache_id);
-
- LLUUID region_id;
- msg->getUUID("RegionInfo2", "RegionID", region_id);
- setRegionID(region_id);
-
- // Retrieve the CR-53 (Homestead/Land SKU) information
- S32 classID = 0;
- S32 cpuRatio = 0;
- std::string coloName;
- std::string productSKU;
- std::string productName;
-
- // the only reasonable way to decide if we actually have any data is to
- // check to see if any of these fields have positive sizes
- if (msg->getSize("RegionInfo3", "ColoName") > 0 ||
- msg->getSize("RegionInfo3", "ProductSKU") > 0 ||
- msg->getSize("RegionInfo3", "ProductName") > 0)
- {
- msg->getS32 ("RegionInfo3", "CPUClassID", classID);
- msg->getS32 ("RegionInfo3", "CPURatio", cpuRatio);
- msg->getString ("RegionInfo3", "ColoName", coloName);
- msg->getString ("RegionInfo3", "ProductSKU", productSKU);
- msg->getString ("RegionInfo3", "ProductName", productName);
-
- mClassID = classID;
- mCPURatio = cpuRatio;
- mColoName = coloName;
- mProductSKU = productSKU;
- mProductName = productName;
- }
-
- LLVLComposition *compp = getComposition();
- if (compp)
- {
- LLUUID tmp_id;
-
- msg->getUUID("RegionInfo", "TerrainDetail0", tmp_id);
- compp->setDetailTextureID(0, tmp_id);
- msg->getUUID("RegionInfo", "TerrainDetail1", tmp_id);
- compp->setDetailTextureID(1, tmp_id);
- msg->getUUID("RegionInfo", "TerrainDetail2", tmp_id);
- compp->setDetailTextureID(2, tmp_id);
- msg->getUUID("RegionInfo", "TerrainDetail3", tmp_id);
- compp->setDetailTextureID(3, tmp_id);
-
- F32 tmp_f32;
- msg->getF32("RegionInfo", "TerrainStartHeight00", tmp_f32);
- compp->setStartHeight(0, tmp_f32);
- msg->getF32("RegionInfo", "TerrainStartHeight01", tmp_f32);
- compp->setStartHeight(1, tmp_f32);
- msg->getF32("RegionInfo", "TerrainStartHeight10", tmp_f32);
- compp->setStartHeight(2, tmp_f32);
- msg->getF32("RegionInfo", "TerrainStartHeight11", tmp_f32);
- compp->setStartHeight(3, tmp_f32);
-
- msg->getF32("RegionInfo", "TerrainHeightRange00", tmp_f32);
- compp->setHeightRange(0, tmp_f32);
- msg->getF32("RegionInfo", "TerrainHeightRange01", tmp_f32);
- compp->setHeightRange(1, tmp_f32);
- msg->getF32("RegionInfo", "TerrainHeightRange10", tmp_f32);
- compp->setHeightRange(2, tmp_f32);
- msg->getF32("RegionInfo", "TerrainHeightRange11", tmp_f32);
- compp->setHeightRange(3, tmp_f32);
-
- // If this is an UPDATE (params already ready, we need to regenerate
- // all of our terrain stuff, by
- if (compp->getParamsReady())
- {
- getLand().dirtyAllPatches();
- }
- else
- {
- compp->setParamsReady();
- }
- }
-
-
- // Now that we have the name, we can load the cache file
- // off disk.
- loadObjectCache();
-
- // After loading cache, signal that simulator can start
- // sending data.
- // TODO: Send all upstream viewer->sim handshake info here.
- LLHost host = msg->getSender();
- msg->newMessage("RegionHandshakeReply");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("RegionInfo");
- msg->addU32("Flags", 0x0 );
- msg->sendReliable(host);
-}
-
-
-void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
-{
- //capabilityNames.append("AttachmentResources"); //Script limits (llfloaterscriptlimits.cpp)
- //capabilityNames.append("AvatarPickerSearch"); //Display name/SLID lookup (llfloateravatarpicker.cpp)
- capabilityNames.append("ChatSessionRequest");
- capabilityNames.append("CopyInventoryFromNotecard");
- capabilityNames.append("DispatchRegionInfo");
- capabilityNames.append("EstateChangeInfo");
- capabilityNames.append("EventQueueGet");
- /*capabilityNames.append("EnvironmentSettings");
- capabilityNames.append("ObjectMedia");
- capabilityNames.append("ObjectMediaNavigate");*/
-
- if (false)//gSavedSettings.getBOOL("UseHTTPInventory")) //Caps suffixed with 2 by LL. Don't update until rest of fetch system is updated first.
- {
- capabilityNames.append("FetchLib");
- capabilityNames.append("FetchLibDescendents");
- capabilityNames.append("FetchInventory");
- capabilityNames.append("FetchInventoryDescendents");
- }
-
- capabilityNames.append("GetDisplayNames");
- capabilityNames.append("GetTexture");
-#if MESH_ENABLED
- capabilityNames.append("GetMesh");
- capabilityNames.append("GetObjectCost");
- capabilityNames.append("GetObjectPhysicsData");
-#endif //MESH_ENABLED
- capabilityNames.append("GroupProposalBallot");
-
- capabilityNames.append("HomeLocation");
- //capabilityNames.append("LandResources"); //Script limits (llfloaterscriptlimits.cpp)
- capabilityNames.append("MapLayer");
- capabilityNames.append("MapLayerGod");
-#if MESH_IMPORT
- capabilityNames.append("MeshUploadFlag");
-#endif //MESH_IMPORT
- capabilityNames.append("NewFileAgentInventory");
- capabilityNames.append("ParcelPropertiesUpdate");
- capabilityNames.append("ParcelMediaURLFilterList");
- capabilityNames.append("ParcelNavigateMedia");
- capabilityNames.append("ParcelVoiceInfoRequest");
- capabilityNames.append("ProductInfoRequest");
- capabilityNames.append("ProvisionVoiceAccountRequest");
- capabilityNames.append("RemoteParcelRequest");
- capabilityNames.append("RequestTextureDownload");
- capabilityNames.append("ResourceCostSelected"); //Unreferenced?
- capabilityNames.append("SearchStatRequest");
- capabilityNames.append("SearchStatTracking");
- capabilityNames.append("SendPostcard");
- capabilityNames.append("SendUserReport");
- capabilityNames.append("SendUserReportWithScreenshot");
- capabilityNames.append("ServerReleaseNotes");
- //capabilityNames.append("SimConsole");
- capabilityNames.append("SimulatorFeatures");
- capabilityNames.append("SetDisplayName");
- //capabilityNames.append("SimConsoleAsync");
- capabilityNames.append("StartGroupProposal");
- capabilityNames.append("TextureStats");
- capabilityNames.append("UntrustedSimulatorMessage");
- capabilityNames.append("UpdateAgentInformation");
- capabilityNames.append("UpdateAgentLanguage");
- capabilityNames.append("UpdateGestureAgentInventory");
- capabilityNames.append("UpdateNotecardAgentInventory");
- capabilityNames.append("UpdateScriptAgent");
- capabilityNames.append("UpdateGestureTaskInventory");
- capabilityNames.append("UpdateNotecardTaskInventory");
- capabilityNames.append("UpdateScriptTask");
- capabilityNames.append("UploadBakedTexture");
- //capabilityNames.append("ViewerMetrics");
- capabilityNames.append("ViewerStartAuction");
- capabilityNames.append("ViewerStats");
- // Please add new capabilities alphabetically to reduce
- // merge conflicts.
-}
-void LLViewerRegion::setSeedCapability(const std::string& url)
-{
- if (getCapability("Seed") == url)
- {
- // llwarns << "Ignoring duplicate seed capability" << llendl;
- return;
- }
-
- delete mImpl->mEventPoll;
- mImpl->mEventPoll = NULL;
-
- mImpl->mCapabilities.clear();
- setCapability("Seed", url);
-
- LLSD capabilityNames = LLSD::emptyArray();
-
- mImpl->buildCapabilityNames(capabilityNames);
-
-
- llinfos << "posting to seed " << url << llendl;
-
- mImpl->mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
- LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr);
-}
-
-class SimulatorFeaturesReceived : public LLHTTPClient::Responder
-{
- LOG_CLASS(SimulatorFeaturesReceived);
-public:
- SimulatorFeaturesReceived(LLViewerRegion* region)
- : mRegion(region)
- { }
-
-
- void error(U32 statusNum, const std::string& reason)
- {
- LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL;
- }
-
- void result(const LLSD& content)
- {
- if(!mRegion) //region is removed or responder is not created.
- {
- return ;
- }
-
- mRegion->setSimulatorFeatures(content);
- }
-
- static boost::intrusive_ptr build(
- LLViewerRegion* region)
- {
- return boost::intrusive_ptr(
- new SimulatorFeaturesReceived(region));
- }
-
-private:
- LLViewerRegion* mRegion;
-};
-
-
-void LLViewerRegion::setCapability(const std::string& name, const std::string& url)
-{
- if(name == "EventQueueGet")
- {
- delete mImpl->mEventPoll;
- mImpl->mEventPoll = NULL;
- mImpl->mEventPoll = new LLEventPoll(url, getHost());
- }
- else if(name == "UntrustedSimulatorMessage")
- {
- LLHTTPSender::setSender(mImpl->mHost, new LLCapHTTPSender(url));
- }
- else if (name == "SimulatorFeatures")
- {
- // kick off a request for simulator features
- LLHTTPClient::get(url, new SimulatorFeaturesReceived(this));
- }
- else
- {
- mImpl->mCapabilities[name] = url;
- if(name == "GetTexture")
- {
- mHttpUrl = url ;
- }
- }
-}
-
-bool LLViewerRegion::isSpecialCapabilityName(const std::string &name)
-{
- return name == "EventQueueGet" || name == "UntrustedSimulatorMessage";
-}
-
-std::string LLViewerRegion::getCapability(const std::string& name) const
-{
- CapabilityMap::const_iterator iter = mImpl->mCapabilities.find(name);
- if(iter == mImpl->mCapabilities.end())
- {
- return "";
- }
- return iter->second;
-}
-
-bool LLViewerRegion::capabilitiesReceived() const
-{
- return mCapabilitiesReceived;
-}
-
-void LLViewerRegion::setCapabilitiesReceived(bool received)
-{
- mCapabilitiesReceived = received;
-
- // Tell interested parties that we've received capabilities,
- // so that they can safely use getCapability().
- if (received)
- {
- mCapabilitiesReceivedSignal(getRegionID());
-
- // This is a single-shot signal. Forget callbacks to save resources.
- mCapabilitiesReceivedSignal.disconnect_all_slots();
- }
-}
-
-boost::signals2::connection LLViewerRegion::setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb)
-{
- return mCapabilitiesReceivedSignal.connect(cb);
-}
-
-void LLViewerRegion::logActiveCapabilities() const
-{
- int count = 0;
- CapabilityMap::const_iterator iter;
- for (iter = mImpl->mCapabilities.begin(); iter != mImpl->mCapabilities.end(); ++iter, ++count)
- {
- if (!iter->second.empty())
- {
- llinfos << iter->first << " URL is " << iter->second << llendl;
- }
- }
- llinfos << "Dumped " << count << " entries." << llendl;
-}
-
-LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type)
-{
- if (type < mImpl->mObjectPartition.size())
- {
- return mImpl->mObjectPartition[type];
- }
- return NULL;
-}
-
-void LLViewerRegion::showReleaseNotes()
-{
- std::string url = this->getCapability("ServerReleaseNotes");
-
- if (url.empty()) {
- // HACK haven't received the capability yet, we'll wait until
- // it arives.
- mReleaseNotesRequested = TRUE;
- return;
- }
-
- LLWeb::loadURL(url);
- mReleaseNotesRequested = FALSE;
-}
-
-std::string LLViewerRegion::getDescription() const
-{
- return stringize(*this);
-}
-
-#if MESH_ENABLED
-bool LLViewerRegion::meshUploadEnabled() const
-{
- return (mSimulatorFeatures.has("MeshUploadEnabled") &&
- mSimulatorFeatures["MeshUploadEnabled"].asBoolean());
-}
-
-bool LLViewerRegion::meshRezEnabled() const
-{
- return (mSimulatorFeatures.has("MeshRezEnabled") &&
- mSimulatorFeatures["MeshRezEnabled"].asBoolean());
-}
-#endif //MESH_ENABLED
-
+/**
+ * @file llviewerregion.cpp
+ * @brief Implementation of the LLViewerRegion class.
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-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 "llviewerregion.h"
+
+#include "indra_constants.h"
+#include "llmath.h"
+#include "llhttpclient.h"
+#include "llregionflags.h"
+#include "llregionhandle.h"
+#include "llsurface.h"
+#include "message.h"
+//#include "vmath.h"
+#include "v3math.h"
+#include "v4math.h"
+
+#include "llagent.h"
+#include "llagentcamera.h"
+#include "llcallingcard.h"
+#include "llcaphttpsender.h"
+#include "lldir.h"
+#include "lleventpoll.h"
+#include "llfloatergodtools.h"
+#include "llfloaterreporter.h"
+#include "llfloaterregioninfo.h"
+#include "llhttpnode.h"
+#include "llsdutil.h"
+#include "llstartup.h"
+#include "lltrans.h"
+#include "llurldispatcher.h"
+#include "llviewerobjectlist.h"
+#include "llviewerparceloverlay.h"
+#include "llvlmanager.h"
+#include "llvlcomposition.h"
+#include "llvocache.h"
+#include "llvoclouds.h"
+#include "llworld.h"
+#include "llspatialpartition.h"
+#include "stringize.h"
+#include "llviewercontrol.h"
+#include "llsdserialize.h"
+#include "llviewerparcelmgr.h"
+
+extern BOOL gNoRender;
+
+#ifdef LL_WINDOWS
+ #pragma warning(disable:4355)
+#endif
+
+const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
+const S16 MAX_MAP_DIST = 10;
+typedef std::map CapabilityMap;
+
+class LLViewerRegionImpl {
+public:
+ LLViewerRegionImpl(LLViewerRegion * region, LLHost const & host)
+ : mHost(host),
+ mCompositionp(NULL),
+ mEventPoll(NULL)//,
+ // I'd prefer to set the LLCapabilityListener name to match the region
+ // name -- it's disappointing that's not available at construction time.
+ // We could instead store an LLCapabilityListener*, making
+ // setRegionNameAndZone() replace the instance. Would that pose
+ // consistency problems? Can we even request a capability before calling
+ // setRegionNameAndZone()?
+ // For testability -- the new Michael Feathers paradigm --
+ // LLCapabilityListener binds all the globals it expects to need at
+ // construction time.
+ //mCapabilityListener(host.getString(), gMessageSystem, *region,
+ //gAgent.getID(), gAgent.getSessionID())
+ {
+ }
+
+ void buildCapabilityNames(LLSD& capabilityNames);
+
+ // The surfaces and other layers
+ LLSurface* mLandp;
+
+ // Region geometry data
+ LLVector3d mOriginGlobal; // Location of southwest corner of region (meters)
+ LLVector3d mCenterGlobal; // Location of center in world space (meters)
+ LLHost mHost;
+
+ // The unique ID for this region.
+ LLUUID mRegionID;
+
+ // region/estate owner - usually null.
+ LLUUID mOwnerID;
+
+ // Network statistics for the region's circuit...
+ LLTimer mLastNetUpdate;
+
+ // Misc
+ LLVLComposition *mCompositionp; // Composition layer for the surface
+
+ LLVOCacheEntry::vocache_entry_map_t mCacheMap;
+ // time?
+ // LRU info?
+
+ // Cache ID is unique per-region, across renames, moving locations,
+ // etc.
+ LLUUID mCacheID;
+
+ CapabilityMap mCapabilities;
+
+ LLEventPoll* mEventPoll;
+
+ /// Post an event to this LLCapabilityListener to invoke a capability message on
+ /// this LLViewerRegion's server
+ /// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
+ //LLCapabilityListener mCapabilityListener;
+
+ //spatial partitions for objects in this region
+ std::vector mObjectPartition;
+
+ LLHTTPClient::ResponderPtr mHttpResponderPtr ;
+};
+
+class BaseCapabilitiesComplete : public LLHTTPClient::Responder
+{
+ LOG_CLASS(BaseCapabilitiesComplete);
+public:
+ BaseCapabilitiesComplete(LLViewerRegion* region)
+ : mRegion(region)
+ { }
+ virtual ~BaseCapabilitiesComplete()
+ {
+ if(mRegion)
+ {
+ mRegion->setHttpResponderPtrNULL() ;
+ }
+ }
+
+ void setRegion(LLViewerRegion* region)
+ {
+ mRegion = region ;
+ }
+
+ void error(U32 statusNum, const std::string& reason)
+ {
+ LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
+
+ if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+ }
+
+ void result(const LLSD& content)
+ {
+ if(!mRegion || LLHTTPClient::ResponderPtr(this) != mRegion->getHttpResponderPtr()) //region is removed or responder is not created.
+ {
+ return ;
+ }
+
+ LLSD::map_const_iterator iter;
+ for(iter = content.beginMap(); iter != content.endMap(); ++iter)
+ {
+ mRegion->setCapability(iter->first, iter->second);
+ LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
+ << iter->first << LL_ENDL;
+
+ /* HACK we're waiting for the ServerReleaseNotes */
+ if (iter->first == "ServerReleaseNotes" && mRegion->getReleaseNotesRequested())
+ {
+ mRegion->showReleaseNotes();
+ }
+ }
+
+ mRegion->setCapabilitiesReceived(true);
+
+ if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+ }
+
+ static boost::intrusive_ptr build(
+ LLViewerRegion* region)
+ {
+ return boost::intrusive_ptr(
+ new BaseCapabilitiesComplete(region));
+ }
+
+private:
+ LLViewerRegion* mRegion;
+};
+
+
+LLViewerRegion::LLViewerRegion(const U64 &handle,
+ const LLHost &host,
+ const U32 grids_per_region_edge,
+ const U32 grids_per_patch_edge,
+ const F32 region_width_meters)
+: mImpl(new LLViewerRegionImpl(this, host)),
+ mHandle(handle),
+ mTimeDilation(1.0f),
+ mName(""),
+ mZoning(""),
+ mIsEstateManager(FALSE),
+ mRegionFlags( REGION_FLAGS_DEFAULT ),
+ mSimAccess( SIM_ACCESS_MIN ),
+ mBillableFactor(1.0),
+ mMaxTasks(DEFAULT_MAX_REGION_WIDE_PRIM_COUNT),
+ mClassID(0),
+ mCPURatio(0),
+ mColoName("unknown"),
+ mProductSKU("unknown"),
+ mProductName("unknown"),
+ mHttpUrl(""),
+ mCacheLoaded(FALSE),
+ mCacheDirty(FALSE),
+ mReleaseNotesRequested(FALSE),
+ mCapabilitiesReceived(false),
+ mWidth(region_width_meters)
+{
+ mImpl->mOriginGlobal = from_region_handle(handle);
+ updateRenderMatrix();
+
+ mImpl->mLandp = new LLSurface('l', NULL);
+
+ if (!gNoRender)
+ {
+ // Create the composition layer for the surface
+ mImpl->mCompositionp =
+ new LLVLComposition(mImpl->mLandp,
+ grids_per_region_edge,
+ mWidth / grids_per_region_edge);
+ mImpl->mCompositionp->setSurface(mImpl->mLandp);
+
+ // Create the surfaces
+ mImpl->mLandp->setRegion(this);
+ mImpl->mLandp->create(grids_per_region_edge,
+ grids_per_patch_edge,
+ mImpl->mOriginGlobal,
+ mWidth);
+ }
+
+ if (!gNoRender)
+ {
+ mParcelOverlay = new LLViewerParcelOverlay(this, mWidth);
+ //Re-init the parcel mgr for this sim
+ LLViewerParcelMgr::getInstance()->init(mWidth);
+ }
+ else
+ {
+ mParcelOverlay = NULL;
+ }
+
+ setOriginGlobal(from_region_handle(handle));
+ calculateCenterGlobal();
+
+ // Create the object lists
+ initStats();
+
+ //create object partitions
+ //MUST MATCH declaration of eObjectPartitions
+ mImpl->mObjectPartition.push_back(new LLHUDPartition()); //PARTITION_HUD
+ mImpl->mObjectPartition.push_back(new LLTerrainPartition()); //PARTITION_TERRAIN
+ mImpl->mObjectPartition.push_back(new LLVoidWaterPartition()); //PARTITION_VOIDWATER
+ mImpl->mObjectPartition.push_back(new LLWaterPartition()); //PARTITION_WATER
+ mImpl->mObjectPartition.push_back(new LLTreePartition()); //PARTITION_TREE
+ mImpl->mObjectPartition.push_back(new LLParticlePartition()); //PARTITION_PARTICLE
+ mImpl->mObjectPartition.push_back(new LLCloudPartition()); //PARTITION_CLOUD
+ mImpl->mObjectPartition.push_back(new LLGrassPartition()); //PARTITION_GRASS
+ mImpl->mObjectPartition.push_back(new LLVolumePartition()); //PARTITION_VOLUME
+ mImpl->mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE
+ mImpl->mObjectPartition.push_back(new LLHUDParticlePartition());//PARTITION_HUD_PARTICLE
+ mImpl->mObjectPartition.push_back(NULL); //PARTITION_NONE
+}
+
+
+void LLViewerRegion::initStats()
+{
+ mImpl->mLastNetUpdate.reset();
+ mPacketsIn = 0;
+ mBitsIn = 0;
+ mLastBitsIn = 0;
+ mLastPacketsIn = 0;
+ mPacketsOut = 0;
+ mLastPacketsOut = 0;
+ mPacketsLost = 0;
+ mLastPacketsLost = 0;
+ mPingDelay = 0;
+ mAlive = false; // can become false if circuit disconnects
+}
+
+LLViewerRegion::~LLViewerRegion()
+{
+ if(mImpl->mHttpResponderPtr)
+ {
+ (static_cast(mImpl->mHttpResponderPtr.get()))->setRegion(NULL) ;
+ }
+
+ gVLManager.cleanupData(this);
+ // Can't do this on destruction, because the neighbor pointers might be invalid.
+ // This should be reference counted...
+ disconnectAllNeighbors();
+ mCloudLayer.destroy();
+ LLViewerPartSim::getInstance()->cleanupRegion(this);
+
+ gObjectList.killObjects(this);
+
+ delete mImpl->mCompositionp;
+ delete mParcelOverlay;
+ delete mImpl->mLandp;
+ delete mImpl->mEventPoll;
+ LLHTTPSender::clearSender(mImpl->mHost);
+
+ saveObjectCache();
+
+ std::for_each(mImpl->mObjectPartition.begin(), mImpl->mObjectPartition.end(), DeletePointer());
+
+ delete mImpl;
+ mImpl = NULL;
+}
+
+/*LLEventPump& LLViewerRegion::getCapAPI() const
+{
+ return mImpl->mCapabilityListener.getCapAPI();
+}*/
+
+/*virtual*/
+const LLHost& LLViewerRegion::getHost() const
+{
+ return mImpl->mHost;
+}
+
+LLSurface & LLViewerRegion::getLand() const
+{
+ return *mImpl->mLandp;
+}
+
+const LLUUID& LLViewerRegion::getRegionID() const
+{
+ return mImpl->mRegionID;
+}
+
+void LLViewerRegion::setRegionID(const LLUUID& region_id)
+{
+ mImpl->mRegionID = region_id;
+}
+
+void LLViewerRegion::loadObjectCache()
+{
+ if (mCacheLoaded)
+ {
+ return;
+ }
+
+ // Presume success. If it fails, we don't want to try again.
+ mCacheLoaded = TRUE;
+
+ if(LLVOCache::hasInstance())
+ {
+ LLVOCache::getInstance()->readFromCache(mHandle, mImpl->mCacheID, mImpl->mCacheMap) ;
+ }
+}
+
+
+void LLViewerRegion::saveObjectCache()
+{
+ if (!mCacheLoaded)
+ {
+ return;
+ }
+
+ if (mImpl->mCacheMap.empty())
+ {
+ return;
+ }
+
+ if(LLVOCache::hasInstance())
+ {
+ LLVOCache::getInstance()->writeToCache(mHandle, mImpl->mCacheID, mImpl->mCacheMap, mCacheDirty) ;
+ mCacheDirty = FALSE;
+ }
+
+ for(LLVOCacheEntry::vocache_entry_map_t::iterator iter = mImpl->mCacheMap.begin(); iter != mImpl->mCacheMap.end(); ++iter)
+ {
+ delete iter->second;
+ }
+ mImpl->mCacheMap.clear();
+}
+
+void LLViewerRegion::sendMessage()
+{
+ gMessageSystem->sendMessage(mImpl->mHost);
+}
+
+void LLViewerRegion::sendReliableMessage()
+{
+ gMessageSystem->sendReliable(mImpl->mHost);
+}
+
+void LLViewerRegion::setFlags(BOOL b, U32 flags)
+{
+ if (b)
+ {
+ mRegionFlags |= flags;
+ }
+ else
+ {
+ mRegionFlags &= ~flags;
+ }
+}
+
+void LLViewerRegion::setWaterHeight(F32 water_level)
+{
+ mImpl->mLandp->setWaterHeight(water_level);
+}
+
+F32 LLViewerRegion::getWaterHeight() const
+{
+ return mImpl->mLandp->getWaterHeight();
+}
+
+BOOL LLViewerRegion::isVoiceEnabled() const
+{
+ return (getRegionFlags() & REGION_FLAGS_ALLOW_VOICE);
+}
+
+void LLViewerRegion::setRegionFlags(U32 flags)
+{
+ mRegionFlags = flags;
+}
+
+
+void LLViewerRegion::setOriginGlobal(const LLVector3d &origin_global)
+{
+ mImpl->mOriginGlobal = origin_global;
+ updateRenderMatrix();
+ mImpl->mLandp->setOriginGlobal(origin_global);
+ mWind.setOriginGlobal(origin_global);
+ mCloudLayer.setOriginGlobal(origin_global);
+ calculateCenterGlobal();
+}
+
+void LLViewerRegion::updateRenderMatrix()
+{
+ mRenderMatrix.setTranslation(getOriginAgent());
+}
+
+void LLViewerRegion::setTimeDilation(F32 time_dilation)
+{
+ mTimeDilation = time_dilation;
+}
+
+const LLVector3d & LLViewerRegion::getOriginGlobal() const
+{
+ return mImpl->mOriginGlobal;
+}
+
+LLVector3 LLViewerRegion::getOriginAgent() const
+{
+ return gAgent.getPosAgentFromGlobal(mImpl->mOriginGlobal);
+}
+
+const LLVector3d & LLViewerRegion::getCenterGlobal() const
+{
+ return mImpl->mCenterGlobal;
+}
+
+LLVector3 LLViewerRegion::getCenterAgent() const
+{
+ return gAgent.getPosAgentFromGlobal(mImpl->mCenterGlobal);
+}
+
+void LLViewerRegion::setOwner(const LLUUID& owner_id)
+{
+ mImpl->mOwnerID = owner_id;
+}
+
+const LLUUID& LLViewerRegion::getOwner() const
+{
+ return mImpl->mOwnerID;
+}
+
+void LLViewerRegion::setRegionNameAndZone (const std::string& name_zone)
+{
+ std::string::size_type pipe_pos = name_zone.find('|');
+ S32 length = name_zone.size();
+ if (pipe_pos != std::string::npos)
+ {
+ mName = name_zone.substr(0, pipe_pos);
+ mZoning = name_zone.substr(pipe_pos+1, length-(pipe_pos+1));
+ }
+ else
+ {
+ mName = name_zone;
+ mZoning = "";
+ }
+
+ LLStringUtil::stripNonprintable(mName);
+ LLStringUtil::stripNonprintable(mZoning);
+}
+
+BOOL LLViewerRegion::canManageEstate() const
+{
+ return gAgent.isGodlike()
+ || isEstateManager()
+ || gAgent.getID() == getOwner();
+}
+
+const std::string LLViewerRegion::getSimAccessString() const
+{
+ return accessToString(mSimAccess);
+}
+
+
+// static
+std::string LLViewerRegion::regionFlagsToString(U32 flags)
+{
+ std::string result;
+ if (flags & REGION_FLAGS_SANDBOX)
+ {
+ if(!result.empty()) result += ", ";
+ result += "Sandbox";
+ }
+
+ if (flags & REGION_FLAGS_ALLOW_DAMAGE)
+ {
+ if(!result.empty()) result += ", ";
+ result += "Not Safe";
+ }
+ //
+ //These dont seem to have value anymore.
+ /*if (!(flags & REGION_FLAGS_PUBLIC_ALLOWED))
+ {
+ if(!result.empty()) result += ", ";
+ result += "Private";
+ }
+
+ if (!(flags & REGION_FLAGS_ALLOW_VOICE))
+ {
+ if(!result.empty()) result += ", ";
+ result += "Voice Disabled";
+ }*/
+ if (flags & REGION_FLAGS_ALLOW_LANDMARK)
+ {
+ if(!result.empty()) result += ", ";
+ result += "Create Landmarks";
+ }
+
+ if (flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT)
+ {
+ if(!result.empty()) result += ", ";
+ result += "Direct Teleport";
+ }
+
+ if (flags & REGION_FLAGS_DENY_ANONYMOUS)
+ {
+ if(!result.empty()) result += ", ";
+ result += "Payment Info needed";
+ }
+
+ if (flags & REGION_FLAGS_DENY_AGEUNVERIFIED)
+ {
+ if(!result.empty()) result += ", ";
+ result += "Age Verified";
+ }
+
+ if (flags & REGION_FLAGS_BLOCK_FLY)
+ {
+ if(!result.empty()) result += ", ";
+ result += "No Fly";
+ }
+
+ //
+
+ return result;
+}
+
+// static
+std::string LLViewerRegion::accessToString(U8 sim_access)
+{
+ switch(sim_access)
+ {
+ case SIM_ACCESS_PG:
+ return LLTrans::getString("SIM_ACCESS_PG");
+
+ case SIM_ACCESS_MATURE:
+ return LLTrans::getString("SIM_ACCESS_MATURE");
+
+ case SIM_ACCESS_ADULT:
+ return LLTrans::getString("SIM_ACCESS_ADULT");
+
+ case SIM_ACCESS_DOWN:
+ return LLTrans::getString("SIM_ACCESS_DOWN");
+
+ case SIM_ACCESS_MIN:
+ default:
+ return LLTrans::getString("SIM_ACCESS_MIN");
+ }
+}
+
+// static
+std::string LLViewerRegion::accessToShortString(U8 sim_access)
+{
+ switch(sim_access) /* Flawfinder: ignore */
+ {
+ case SIM_ACCESS_PG:
+ return "PG";
+
+ case SIM_ACCESS_MATURE:
+ return "M";
+
+ case SIM_ACCESS_ADULT:
+ return "A";
+
+ case SIM_ACCESS_MIN:
+ default:
+ return "U";
+ }
+}
+
+// static
+void LLViewerRegion::processRegionInfo(LLMessageSystem* msg, void**)
+{
+ // send it to 'observers'
+ LLFloaterGodTools::processRegionInfo(msg);
+ LLFloaterRegionInfo::processRegionInfo(msg);
+ LLFloaterReporter::processRegionInfo(msg);
+}
+
+void LLViewerRegion::setCacheID(const LLUUID& id)
+{
+ mImpl->mCacheID = id;
+}
+
+S32 LLViewerRegion::renderPropertyLines()
+{
+ if (mParcelOverlay)
+ {
+ return mParcelOverlay->renderPropertyLines();
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+// This gets called when the height field changes.
+void LLViewerRegion::dirtyHeights()
+{
+ // Property lines need to be reconstructed when the land changes.
+ if (mParcelOverlay)
+ {
+ mParcelOverlay->setDirty();
+ }
+}
+
+BOOL LLViewerRegion::idleUpdate(F32 max_update_time)
+{
+ // did_update returns TRUE if we did at least one significant update
+ BOOL did_update = mImpl->mLandp->idleUpdate(max_update_time);
+
+ if (mParcelOverlay)
+ {
+ // Hopefully not a significant time sink...
+ mParcelOverlay->idleUpdate();
+ }
+
+ return did_update;
+}
+
+
+// As above, but forcibly do the update.
+void LLViewerRegion::forceUpdate()
+{
+ mImpl->mLandp->idleUpdate(0.f);
+
+ if (mParcelOverlay)
+ {
+ mParcelOverlay->idleUpdate(true);
+ }
+}
+
+void LLViewerRegion::connectNeighbor(LLViewerRegion *neighborp, U32 direction)
+{
+ mImpl->mLandp->connectNeighbor(neighborp->mImpl->mLandp, direction);
+ mCloudLayer.connectNeighbor(&(neighborp->mCloudLayer), direction);
+}
+
+
+void LLViewerRegion::disconnectAllNeighbors()
+{
+ mImpl->mLandp->disconnectAllNeighbors();
+ mCloudLayer.disconnectAllNeighbors();
+}
+
+LLVLComposition * LLViewerRegion::getComposition() const
+{
+ return mImpl->mCompositionp;
+}
+
+F32 LLViewerRegion::getCompositionXY(const S32 x, const S32 y) const
+{
+ if (x >= 256)
+ {
+ if (y >= 256)
+ {
+ LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 256.f, 0.f);
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
+ if (regionp)
+ {
+ // OK, we need to do some hackery here - different simulators no longer use
+ // the same composition values, necessarily.
+ // If we're attempting to blend, then we want to make the fractional part of
+ // this region match the fractional of the adjacent. For now, just minimize
+ // the delta.
+ F32 our_comp = getComposition()->getValueScaled(255, 255);
+ F32 adj_comp = regionp->getComposition()->getValueScaled(x - 256.f, y - 256.f);
+ while (llabs(our_comp - adj_comp) >= 1.f)
+ {
+ if (our_comp > adj_comp)
+ {
+ adj_comp += 1.f;
+ }
+ else
+ {
+ adj_comp -= 1.f;
+ }
+ }
+ return adj_comp;
+ }
+ }
+ else
+ {
+ LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 0, 0.f);
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
+ if (regionp)
+ {
+ // OK, we need to do some hackery here - different simulators no longer use
+ // the same composition values, necessarily.
+ // If we're attempting to blend, then we want to make the fractional part of
+ // this region match the fractional of the adjacent. For now, just minimize
+ // the delta.
+ F32 our_comp = getComposition()->getValueScaled(255.f, (F32)y);
+ F32 adj_comp = regionp->getComposition()->getValueScaled(x - 256.f, (F32)y);
+ while (llabs(our_comp - adj_comp) >= 1.f)
+ {
+ if (our_comp > adj_comp)
+ {
+ adj_comp += 1.f;
+ }
+ else
+ {
+ adj_comp -= 1.f;
+ }
+ }
+ return adj_comp;
+ }
+ }
+ }
+ else if (y >= 256)
+ {
+ LLVector3d center = getCenterGlobal() + LLVector3d(0.f, 256.f, 0.f);
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
+ if (regionp)
+ {
+ // OK, we need to do some hackery here - different simulators no longer use
+ // the same composition values, necessarily.
+ // If we're attempting to blend, then we want to make the fractional part of
+ // this region match the fractional of the adjacent. For now, just minimize
+ // the delta.
+ F32 our_comp = getComposition()->getValueScaled((F32)x, 255.f);
+ F32 adj_comp = regionp->getComposition()->getValueScaled((F32)x, y - 256.f);
+ while (llabs(our_comp - adj_comp) >= 1.f)
+ {
+ if (our_comp > adj_comp)
+ {
+ adj_comp += 1.f;
+ }
+ else
+ {
+ adj_comp -= 1.f;
+ }
+ }
+ return adj_comp;
+ }
+ }
+
+ return getComposition()->getValueScaled((F32)x, (F32)y);
+}
+
+void LLViewerRegion::calculateCenterGlobal()
+{
+ mImpl->mCenterGlobal = mImpl->mOriginGlobal;
+ mImpl->mCenterGlobal.mdV[VX] += 0.5 * mWidth;
+ mImpl->mCenterGlobal.mdV[VY] += 0.5 * mWidth;
+ mImpl->mCenterGlobal.mdV[VZ] = 0.5 * mImpl->mLandp->getMinZ() + mImpl->mLandp->getMaxZ();
+}
+
+void LLViewerRegion::calculateCameraDistance()
+{
+ mCameraDistanceSquared = (F32)(gAgentCamera.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
+}
+
+U32 LLViewerRegion::getNetDetailsForLCD()
+{
+ return mPingDelay;
+}
+
+std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion)
+{
+ s << "{ ";
+ s << region.mImpl->mHost;
+ s << " mOriginGlobal = " << region.getOriginGlobal()<< "\n";
+ std::string name(region.getName()), zone(region.getZoning());
+ if (! name.empty())
+ {
+ s << " mName = " << name << '\n';
+ }
+ if (! zone.empty())
+ {
+ s << " mZoning = " << zone << '\n';
+ }
+ s << "}";
+ return s;
+}
+
+
+// ---------------- Protected Member Functions ----------------
+
+void LLViewerRegion::updateNetStats()
+{
+ F32 dt = mImpl->mLastNetUpdate.getElapsedTimeAndResetF32();
+
+ LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(mImpl->mHost);
+ if (!cdp)
+ {
+ mAlive = false;
+ return;
+ }
+
+ mAlive = true;
+ mDeltaTime = dt;
+
+ mLastPacketsIn = mPacketsIn;
+ mLastBitsIn = mBitsIn;
+ mLastPacketsOut = mPacketsOut;
+ mLastPacketsLost = mPacketsLost;
+
+ mPacketsIn = cdp->getPacketsIn();
+ mBitsIn = 8 * cdp->getBytesIn();
+ mPacketsOut = cdp->getPacketsOut();
+ mPacketsLost = cdp->getPacketsLost();
+ mPingDelay = cdp->getPingDelay();
+
+ mBitStat.addValue(mBitsIn - mLastBitsIn);
+ mPacketsStat.addValue(mPacketsIn - mLastPacketsIn);
+ mPacketsLostStat.addValue(mPacketsLost);
+}
+
+
+U32 LLViewerRegion::getPacketsLost() const
+{
+ LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(mImpl->mHost);
+ if (!cdp)
+ {
+ llinfos << "LLViewerRegion::getPacketsLost couldn't find circuit for " << mImpl->mHost << llendl;
+ return 0;
+ }
+ else
+ {
+ return cdp->getPacketsLost();
+ }
+}
+
+void LLViewerRegion::setHttpResponderPtrNULL()
+{
+ mImpl->mHttpResponderPtr = NULL;
+}
+
+const LLHTTPClient::ResponderPtr LLViewerRegion::getHttpResponderPtr() const
+{
+ return mImpl->mHttpResponderPtr;
+}
+
+BOOL LLViewerRegion::pointInRegionGlobal(const LLVector3d &point_global) const
+{
+ LLVector3 pos_region = getPosRegionFromGlobal(point_global);
+
+ if (pos_region.mV[VX] < 0)
+ {
+ return FALSE;
+ }
+ if (pos_region.mV[VX] >= mWidth)
+ {
+ return FALSE;
+ }
+ if (pos_region.mV[VY] < 0)
+ {
+ return FALSE;
+ }
+ if (pos_region.mV[VY] >= mWidth)
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+LLVector3 LLViewerRegion::getPosRegionFromGlobal(const LLVector3d &point_global) const
+{
+ LLVector3 pos_region;
+ pos_region.setVec(point_global - mImpl->mOriginGlobal);
+ return pos_region;
+}
+
+LLVector3d LLViewerRegion::getPosGlobalFromRegion(const LLVector3 &pos_region) const
+{
+ LLVector3d pos_region_d;
+ pos_region_d.setVec(pos_region);
+ return pos_region_d + mImpl->mOriginGlobal;
+}
+
+LLVector3 LLViewerRegion::getPosAgentFromRegion(const LLVector3 &pos_region) const
+{
+ LLVector3d pos_global = getPosGlobalFromRegion(pos_region);
+
+ return gAgent.getPosAgentFromGlobal(pos_global);
+}
+
+LLVector3 LLViewerRegion::getPosRegionFromAgent(const LLVector3 &pos_agent) const
+{
+ return pos_agent - getOriginAgent();
+}
+
+F32 LLViewerRegion::getLandHeightRegion(const LLVector3& region_pos)
+{
+ return mImpl->mLandp->resolveHeightRegion( region_pos );
+}
+
+bool LLViewerRegion::isAlive()
+{
+ return mAlive;
+}
+
+BOOL LLViewerRegion::isOwnedSelf(const LLVector3& pos)
+{
+ if (mParcelOverlay)
+ {
+ return mParcelOverlay->isOwnedSelf(pos);
+ } else {
+ return FALSE;
+ }
+}
+
+// Owned by a group you belong to? (officer or member)
+BOOL LLViewerRegion::isOwnedGroup(const LLVector3& pos)
+{
+ if (mParcelOverlay)
+ {
+ return mParcelOverlay->isOwnedGroup(pos);
+ } else {
+ return FALSE;
+ }
+}
+
+// the new TCP coarse location handler node
+class CoarseLocationUpdate : public LLHTTPNode
+{
+public:
+ virtual void post(
+ ResponsePtr responder,
+ const LLSD& context,
+ const LLSD& input) const
+ {
+ LLHost host(input["sender"].asString());
+ LLViewerRegion* region = LLWorld::getInstance()->getRegion(host);
+ if( !region )
+ {
+ return;
+ }
+
+ S32 target_index = input["body"]["Index"][0]["Prey"].asInteger();
+ S32 you_index = input["body"]["Index"][0]["You" ].asInteger();
+
+ LLDynamicArray* avatar_locs = ®ion->mMapAvatars;
+ LLDynamicArray* avatar_ids = ®ion->mMapAvatarIDs;
+ avatar_locs->reset();
+ avatar_ids->reset();
+
+ //llinfos << "coarse locations agent[0] " << input["body"]["AgentData"][0]["AgentID"].asUUID() << llendl;
+ //llinfos << "my agent id = " << gAgent.getID() << llendl;
+ //llinfos << ll_pretty_print_sd(input) << llendl;
+
+ LLSD
+ locs = input["body"]["Location"],
+ agents = input["body"]["AgentData"];
+ LLSD::array_iterator
+ locs_it = locs.beginArray(),
+ agents_it = agents.beginArray();
+ BOOL has_agent_data = input["body"].has("AgentData");
+
+ for(int i=0;
+ locs_it != locs.endArray();
+ i++, locs_it++)
+ {
+ U8
+ x = locs_it->get("X").asInteger(),
+ y = locs_it->get("Y").asInteger(),
+ z = locs_it->get("Z").asInteger();
+ // treat the target specially for the map, and don't add you or the target
+ if(i == target_index)
+ {
+ LLVector3d global_pos(region->getOriginGlobal());
+ global_pos.mdV[VX] += (F64)x;
+ global_pos.mdV[VY] += (F64)y;
+ global_pos.mdV[VZ] += (F64)z * 4.0;
+ LLAvatarTracker::instance().setTrackedCoarseLocation(global_pos);
+ }
+ else if( i != you_index)
+ {
+ U32 loc = x << 16 | y << 8 | z; loc = loc;
+ U32 pos = 0x0;
+ pos |= x;
+ pos <<= 8;
+ pos |= y;
+ pos <<= 8;
+ pos |= z;
+ avatar_locs->put(pos);
+ //llinfos << "next pos: " << x << "," << y << "," << z << ": " << pos << llendl;
+ if(has_agent_data) // for backwards compatibility with old message format
+ {
+ LLUUID agent_id(agents_it->get("AgentID").asUUID());
+ //llinfos << "next agent: " << agent_id.asString() << llendl;
+ avatar_ids->put(agent_id);
+ }
+ }
+ if (has_agent_data)
+ {
+ agents_it++;
+ }
+ }
+ }
+};
+
+// build the coarse location HTTP node under the "/message" URL
+LLHTTPRegistration
+ gHTTPRegistrationCoarseLocationUpdate(
+ "/message/CoarseLocationUpdate");
+
+
+// the deprecated coarse location handler
+void LLViewerRegion::updateCoarseLocations(LLMessageSystem* msg)
+{
+ //llinfos << "CoarseLocationUpdate" << llendl;
+ mMapAvatars.reset();
+ mMapAvatarIDs.reset(); // only matters in a rare case but it's good to be safe.
+
+ U8 x_pos = 0;
+ U8 y_pos = 0;
+ U8 z_pos = 0;
+
+ U32 pos = 0x0;
+
+ S16 agent_index;
+ S16 target_index;
+ msg->getS16Fast(_PREHASH_Index, _PREHASH_You, agent_index);
+ msg->getS16Fast(_PREHASH_Index, _PREHASH_Prey, target_index);
+
+ BOOL has_agent_data = msg->has(_PREHASH_AgentData);
+ S32 count = msg->getNumberOfBlocksFast(_PREHASH_Location);
+ for(S32 i = 0; i < count; i++)
+ {
+ msg->getU8Fast(_PREHASH_Location, _PREHASH_X, x_pos, i);
+ msg->getU8Fast(_PREHASH_Location, _PREHASH_Y, y_pos, i);
+ msg->getU8Fast(_PREHASH_Location, _PREHASH_Z, z_pos, i);
+ LLUUID agent_id = LLUUID::null;
+ if(has_agent_data)
+ {
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id, i);
+ }
+
+ //llinfos << " object X: " << (S32)x_pos << " Y: " << (S32)y_pos
+ // << " Z: " << (S32)(z_pos * 4)
+ // << llendl;
+
+ // treat the target specially for the map
+ if(i == target_index)
+ {
+ LLVector3d global_pos(mImpl->mOriginGlobal);
+ global_pos.mdV[VX] += (F64)(x_pos);
+ global_pos.mdV[VY] += (F64)(y_pos);
+ global_pos.mdV[VZ] += (F64)(z_pos) * 4.0;
+ LLAvatarTracker::instance().setTrackedCoarseLocation(global_pos);
+ }
+
+ //don't add you
+ if( i != agent_index)
+ {
+ pos = 0x0;
+ pos |= x_pos;
+ pos <<= 8;
+ pos |= y_pos;
+ pos <<= 8;
+ pos |= z_pos;
+ mMapAvatars.put(pos);
+ if(has_agent_data)
+ {
+ mMapAvatarIDs.put(agent_id);
+ }
+ }
+ }
+}
+
+void LLViewerRegion::getInfo(LLSD& info)
+{
+ info["Region"]["Host"] = getHost().getIPandPort();
+ info["Region"]["Name"] = getName();
+ U32 x, y;
+ from_region_handle(getHandle(), &x, &y);
+ info["Region"]["Handle"]["x"] = (LLSD::Integer)x;
+ info["Region"]["Handle"]["y"] = (LLSD::Integer)y;
+}
+
+void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features)
+{
+ sim_features = mSimulatorFeatures;
+}
+
+void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features)
+{
+ std::stringstream str;
+
+ LLSDSerialize::toPrettyXML(sim_features, str);
+ llinfos << str.str() << llendl;
+ mSimulatorFeatures = sim_features;
+}
+
+LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinaryBuffer &dp)
+{
+ U32 local_id = objectp->getLocalID();
+ U32 crc = objectp->getCRC();
+
+ LLVOCacheEntry* entry = get_if_there(mImpl->mCacheMap, local_id, (LLVOCacheEntry*)NULL);
+
+ if (entry)
+ {
+ // we've seen this object before
+ if (entry->getCRC() == crc)
+ {
+ // Record a hit
+ entry->recordDupe();
+ return CACHE_UPDATE_DUPE;
+ }
+
+ // Update the cache entry
+ mImpl->mCacheMap.erase(local_id);
+ delete entry;
+ entry = new LLVOCacheEntry(local_id, crc, dp);
+ mImpl->mCacheMap[local_id] = entry;
+ return CACHE_UPDATE_CHANGED;
+ }
+
+ // we haven't seen this object before
+
+ // Create new entry and add to map
+ eCacheUpdateResult result = CACHE_UPDATE_ADDED;
+ if (mImpl->mCacheMap.size() > MAX_OBJECT_CACHE_ENTRIES)
+ {
+ mImpl->mCacheMap.erase(mImpl->mCacheMap.begin());
+ result = CACHE_UPDATE_REPLACED;
+
+ }
+ entry = new LLVOCacheEntry(local_id, crc, dp);
+
+ mImpl->mCacheMap[local_id] = entry;
+ return result;
+}
+
+// Get data packer for this object, if we have cached data
+// AND the CRC matches. JC
+LLDataPacker *LLViewerRegion::getDP(U32 local_id, U32 crc, U8 &cache_miss_type)
+{
+ //llassert(mCacheLoaded); This assert failes often, changing to early-out -- davep, 2010/10/18
+
+ LLVOCacheEntry* entry = get_if_there(mImpl->mCacheMap, local_id, (LLVOCacheEntry*)NULL);
+
+ if (entry)
+ {
+ // we've seen this object before
+ if (entry->getCRC() == crc)
+ {
+ // Record a hit
+ entry->recordHit();
+ cache_miss_type = CACHE_MISS_TYPE_NONE;
+ return entry->getDP(crc);
+ }
+ else
+ {
+ // llinfos << "CRC miss for " << local_id << llendl;
+ cache_miss_type = CACHE_MISS_TYPE_CRC;
+ mCacheMissCRC.put(local_id);
+ }
+ }
+ else
+ {
+ // llinfos << "Cache miss for " << local_id << llendl;
+ cache_miss_type = CACHE_MISS_TYPE_FULL;
+ mCacheMissFull.put(local_id);
+ }
+
+ return NULL;
+}
+
+void LLViewerRegion::addCacheMissFull(const U32 local_id)
+{
+ mCacheMissFull.put(local_id);
+}
+
+void LLViewerRegion::requestCacheMisses()
+{
+ S32 full_count = mCacheMissFull.count();
+ S32 crc_count = mCacheMissCRC.count();
+ if (full_count == 0 && crc_count == 0) return;
+
+ LLMessageSystem* msg = gMessageSystem;
+ BOOL start_new_message = TRUE;
+ S32 blocks = 0;
+ S32 i;
+
+ // Send full cache miss updates. For these, we KNOW we don't
+ // have a viewer object.
+ for (i = 0; i < full_count; i++)
+ {
+ if (start_new_message)
+ {
+ msg->newMessageFast(_PREHASH_RequestMultipleObjects);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ start_new_message = FALSE;
+ }
+
+ msg->nextBlockFast(_PREHASH_ObjectData);
+ msg->addU8Fast(_PREHASH_CacheMissType, CACHE_MISS_TYPE_FULL);
+ msg->addU32Fast(_PREHASH_ID, mCacheMissFull[i]);
+ blocks++;
+
+ if (blocks >= 255)
+ {
+ sendReliableMessage();
+ start_new_message = TRUE;
+ blocks = 0;
+ }
+ }
+
+ // Send CRC miss updates. For these, we _might_ have a viewer object,
+ // but probably not.
+ for (i = 0; i < crc_count; i++)
+ {
+ if (start_new_message)
+ {
+ msg->newMessageFast(_PREHASH_RequestMultipleObjects);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ start_new_message = FALSE;
+ }
+
+ msg->nextBlockFast(_PREHASH_ObjectData);
+ msg->addU8Fast(_PREHASH_CacheMissType, CACHE_MISS_TYPE_CRC);
+ msg->addU32Fast(_PREHASH_ID, mCacheMissCRC[i]);
+ blocks++;
+
+ if (blocks >= 255)
+ {
+ sendReliableMessage();
+ start_new_message = TRUE;
+ blocks = 0;
+ }
+ }
+
+ // finish any pending message
+ if (!start_new_message)
+ {
+ sendReliableMessage();
+ }
+ mCacheMissFull.reset();
+ mCacheMissCRC.reset();
+
+ mCacheDirty = TRUE ;
+ // llinfos << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << llendl;
+ #if LL_RECORD_VIEWER_STATS
+ LLViewerStatsRecorder::instance()->beginObjectUpdateEvents(this);
+ LLViewerStatsRecorder::instance()->recordRequestCacheMissesEvent(full_count + crc_count);
+ LLViewerStatsRecorder::instance()->endObjectUpdateEvents();
+ #endif
+}
+
+void LLViewerRegion::dumpCache()
+{
+ const S32 BINS = 4;
+ S32 hit_bin[BINS];
+ S32 change_bin[BINS];
+
+ S32 i;
+ for (i = 0; i < BINS; ++i)
+ {
+ hit_bin[i] = 0;
+ change_bin[i] = 0;
+ }
+
+ LLVOCacheEntry *entry;
+ for(LLVOCacheEntry::vocache_entry_map_t::iterator iter = mImpl->mCacheMap.begin(); iter != mImpl->mCacheMap.end(); ++iter)
+ {
+ entry = iter->second ;
+
+ S32 hits = entry->getHitCount();
+ S32 changes = entry->getCRCChangeCount();
+
+ hits = llclamp(hits, 0, BINS-1);
+ changes = llclamp(changes, 0, BINS-1);
+
+ hit_bin[hits]++;
+ change_bin[changes]++;
+ }
+
+ llinfos << "Count " << mImpl->mCacheMap.size() << llendl;
+ for (i = 0; i < BINS; i++)
+ {
+ llinfos << "Hits " << i << " " << hit_bin[i] << llendl;
+ }
+ for (i = 0; i < BINS; i++)
+ {
+ llinfos << "Changes " << i << " " << change_bin[i] << llendl;
+ }
+}
+
+void LLViewerRegion::unpackRegionHandshake()
+{
+ LLMessageSystem *msg = gMessageSystem;
+
+ U32 region_flags;
+ U8 sim_access;
+ std::string sim_name;
+ LLUUID sim_owner;
+ BOOL is_estate_manager;
+ F32 water_height;
+ F32 billable_factor;
+ LLUUID cache_id;
+
+ msg->getU32 ("RegionInfo", "RegionFlags", region_flags);
+ msg->getU8 ("RegionInfo", "SimAccess", sim_access);
+ msg->getString ("RegionInfo", "SimName", sim_name);
+ msg->getUUID ("RegionInfo", "SimOwner", sim_owner);
+ msg->getBOOL ("RegionInfo", "IsEstateManager", is_estate_manager);
+ msg->getF32 ("RegionInfo", "WaterHeight", water_height);
+ msg->getF32 ("RegionInfo", "BillableFactor", billable_factor);
+ msg->getUUID ("RegionInfo", "CacheID", cache_id );
+
+ setRegionFlags(region_flags);
+ setSimAccess(sim_access);
+ setRegionNameAndZone(sim_name);
+ setOwner(sim_owner);
+ setIsEstateManager(is_estate_manager);
+ setWaterHeight(water_height);
+ setBillableFactor(billable_factor);
+ setCacheID(cache_id);
+
+ LLUUID region_id;
+ msg->getUUID("RegionInfo2", "RegionID", region_id);
+ setRegionID(region_id);
+
+ // Retrieve the CR-53 (Homestead/Land SKU) information
+ S32 classID = 0;
+ S32 cpuRatio = 0;
+ std::string coloName;
+ std::string productSKU;
+ std::string productName;
+
+ // the only reasonable way to decide if we actually have any data is to
+ // check to see if any of these fields have positive sizes
+ if (msg->getSize("RegionInfo3", "ColoName") > 0 ||
+ msg->getSize("RegionInfo3", "ProductSKU") > 0 ||
+ msg->getSize("RegionInfo3", "ProductName") > 0)
+ {
+ msg->getS32 ("RegionInfo3", "CPUClassID", classID);
+ msg->getS32 ("RegionInfo3", "CPURatio", cpuRatio);
+ msg->getString ("RegionInfo3", "ColoName", coloName);
+ msg->getString ("RegionInfo3", "ProductSKU", productSKU);
+ msg->getString ("RegionInfo3", "ProductName", productName);
+
+ mClassID = classID;
+ mCPURatio = cpuRatio;
+ mColoName = coloName;
+ mProductSKU = productSKU;
+ mProductName = productName;
+ }
+
+ LLVLComposition *compp = getComposition();
+ if (compp)
+ {
+ LLUUID tmp_id;
+
+ msg->getUUID("RegionInfo", "TerrainDetail0", tmp_id);
+ compp->setDetailTextureID(0, tmp_id);
+ msg->getUUID("RegionInfo", "TerrainDetail1", tmp_id);
+ compp->setDetailTextureID(1, tmp_id);
+ msg->getUUID("RegionInfo", "TerrainDetail2", tmp_id);
+ compp->setDetailTextureID(2, tmp_id);
+ msg->getUUID("RegionInfo", "TerrainDetail3", tmp_id);
+ compp->setDetailTextureID(3, tmp_id);
+
+ F32 tmp_f32;
+ msg->getF32("RegionInfo", "TerrainStartHeight00", tmp_f32);
+ compp->setStartHeight(0, tmp_f32);
+ msg->getF32("RegionInfo", "TerrainStartHeight01", tmp_f32);
+ compp->setStartHeight(1, tmp_f32);
+ msg->getF32("RegionInfo", "TerrainStartHeight10", tmp_f32);
+ compp->setStartHeight(2, tmp_f32);
+ msg->getF32("RegionInfo", "TerrainStartHeight11", tmp_f32);
+ compp->setStartHeight(3, tmp_f32);
+
+ msg->getF32("RegionInfo", "TerrainHeightRange00", tmp_f32);
+ compp->setHeightRange(0, tmp_f32);
+ msg->getF32("RegionInfo", "TerrainHeightRange01", tmp_f32);
+ compp->setHeightRange(1, tmp_f32);
+ msg->getF32("RegionInfo", "TerrainHeightRange10", tmp_f32);
+ compp->setHeightRange(2, tmp_f32);
+ msg->getF32("RegionInfo", "TerrainHeightRange11", tmp_f32);
+ compp->setHeightRange(3, tmp_f32);
+
+ // If this is an UPDATE (params already ready, we need to regenerate
+ // all of our terrain stuff, by
+ if (compp->getParamsReady())
+ {
+ getLand().dirtyAllPatches();
+ }
+ else
+ {
+ compp->setParamsReady();
+ }
+ }
+
+
+ // Now that we have the name, we can load the cache file
+ // off disk.
+ loadObjectCache();
+
+ // After loading cache, signal that simulator can start
+ // sending data.
+ // TODO: Send all upstream viewer->sim handshake info here.
+ LLHost host = msg->getSender();
+ msg->newMessage("RegionHandshakeReply");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("RegionInfo");
+ msg->addU32("Flags", 0x0 );
+ msg->sendReliable(host);
+}
+
+
+void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
+{
+ //capabilityNames.append("AttachmentResources"); //Script limits (llfloaterscriptlimits.cpp)
+ //capabilityNames.append("AvatarPickerSearch"); //Display name/SLID lookup (llfloateravatarpicker.cpp)
+ capabilityNames.append("ChatSessionRequest");
+ capabilityNames.append("CopyInventoryFromNotecard");
+ capabilityNames.append("DispatchRegionInfo");
+ capabilityNames.append("EstateChangeInfo");
+ capabilityNames.append("EventQueueGet");
+ /*capabilityNames.append("EnvironmentSettings");
+ capabilityNames.append("ObjectMedia");
+ capabilityNames.append("ObjectMediaNavigate");*/
+
+ if (false)//gSavedSettings.getBOOL("UseHTTPInventory")) //Caps suffixed with 2 by LL. Don't update until rest of fetch system is updated first.
+ {
+ capabilityNames.append("FetchLib");
+ capabilityNames.append("FetchLibDescendents");
+ capabilityNames.append("FetchInventory");
+ capabilityNames.append("FetchInventoryDescendents");
+ }
+
+ capabilityNames.append("GetDisplayNames");
+ capabilityNames.append("GetTexture");
+#if MESH_ENABLED
+ capabilityNames.append("GetMesh");
+ capabilityNames.append("GetObjectCost");
+ capabilityNames.append("GetObjectPhysicsData");
+#endif //MESH_ENABLED
+ capabilityNames.append("GroupProposalBallot");
+
+ capabilityNames.append("HomeLocation");
+ //capabilityNames.append("LandResources"); //Script limits (llfloaterscriptlimits.cpp)
+ capabilityNames.append("MapLayer");
+ capabilityNames.append("MapLayerGod");
+#if MESH_IMPORT
+ capabilityNames.append("MeshUploadFlag");
+#endif //MESH_IMPORT
+ capabilityNames.append("NewFileAgentInventory");
+ capabilityNames.append("ParcelPropertiesUpdate");
+ capabilityNames.append("ParcelMediaURLFilterList");
+ capabilityNames.append("ParcelNavigateMedia");
+ capabilityNames.append("ParcelVoiceInfoRequest");
+ capabilityNames.append("ProductInfoRequest");
+ capabilityNames.append("ProvisionVoiceAccountRequest");
+ capabilityNames.append("RemoteParcelRequest");
+ capabilityNames.append("RequestTextureDownload");
+ capabilityNames.append("ResourceCostSelected"); //Unreferenced?
+ capabilityNames.append("SearchStatRequest");
+ capabilityNames.append("SearchStatTracking");
+ capabilityNames.append("SendPostcard");
+ capabilityNames.append("SendUserReport");
+ capabilityNames.append("SendUserReportWithScreenshot");
+ capabilityNames.append("ServerReleaseNotes");
+ //capabilityNames.append("SimConsole");
+ capabilityNames.append("SimulatorFeatures");
+ capabilityNames.append("SetDisplayName");
+ //capabilityNames.append("SimConsoleAsync");
+ capabilityNames.append("StartGroupProposal");
+ capabilityNames.append("TextureStats");
+ capabilityNames.append("UntrustedSimulatorMessage");
+ capabilityNames.append("UpdateAgentInformation");
+ capabilityNames.append("UpdateAgentLanguage");
+ capabilityNames.append("UpdateGestureAgentInventory");
+ capabilityNames.append("UpdateNotecardAgentInventory");
+ capabilityNames.append("UpdateScriptAgent");
+ capabilityNames.append("UpdateGestureTaskInventory");
+ capabilityNames.append("UpdateNotecardTaskInventory");
+ capabilityNames.append("UpdateScriptTask");
+ capabilityNames.append("UploadBakedTexture");
+ //capabilityNames.append("ViewerMetrics");
+ capabilityNames.append("ViewerStartAuction");
+ capabilityNames.append("ViewerStats");
+ // Please add new capabilities alphabetically to reduce
+ // merge conflicts.
+}
+void LLViewerRegion::setSeedCapability(const std::string& url)
+{
+ if (getCapability("Seed") == url)
+ {
+ // llwarns << "Ignoring duplicate seed capability" << llendl;
+ return;
+ }
+
+ delete mImpl->mEventPoll;
+ mImpl->mEventPoll = NULL;
+
+ mImpl->mCapabilities.clear();
+ setCapability("Seed", url);
+
+ LLSD capabilityNames = LLSD::emptyArray();
+
+ mImpl->buildCapabilityNames(capabilityNames);
+
+
+ llinfos << "posting to seed " << url << llendl;
+
+ mImpl->mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
+ LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr);
+}
+
+class SimulatorFeaturesReceived : public LLHTTPClient::Responder
+{
+ LOG_CLASS(SimulatorFeaturesReceived);
+public:
+ SimulatorFeaturesReceived(LLViewerRegion* region)
+ : mRegion(region)
+ { }
+
+
+ void error(U32 statusNum, const std::string& reason)
+ {
+ LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL;
+ }
+
+ void result(const LLSD& content)
+ {
+ if(!mRegion) //region is removed or responder is not created.
+ {
+ return ;
+ }
+
+ mRegion->setSimulatorFeatures(content);
+ }
+
+ static boost::intrusive_ptr build(
+ LLViewerRegion* region)
+ {
+ return boost::intrusive_ptr(
+ new SimulatorFeaturesReceived(region));
+ }
+
+private:
+ LLViewerRegion* mRegion;
+};
+
+
+void LLViewerRegion::setCapability(const std::string& name, const std::string& url)
+{
+ if(name == "EventQueueGet")
+ {
+ delete mImpl->mEventPoll;
+ mImpl->mEventPoll = NULL;
+ mImpl->mEventPoll = new LLEventPoll(url, getHost());
+ }
+ else if(name == "UntrustedSimulatorMessage")
+ {
+ LLHTTPSender::setSender(mImpl->mHost, new LLCapHTTPSender(url));
+ }
+ else if (name == "SimulatorFeatures")
+ {
+ // kick off a request for simulator features
+ LLHTTPClient::get(url, new SimulatorFeaturesReceived(this));
+ }
+ else
+ {
+ mImpl->mCapabilities[name] = url;
+ if(name == "GetTexture")
+ {
+ mHttpUrl = url ;
+ }
+ }
+}
+
+bool LLViewerRegion::isSpecialCapabilityName(const std::string &name)
+{
+ return name == "EventQueueGet" || name == "UntrustedSimulatorMessage";
+}
+
+std::string LLViewerRegion::getCapability(const std::string& name) const
+{
+ CapabilityMap::const_iterator iter = mImpl->mCapabilities.find(name);
+ if(iter == mImpl->mCapabilities.end())
+ {
+ return "";
+ }
+ return iter->second;
+}
+
+bool LLViewerRegion::capabilitiesReceived() const
+{
+ return mCapabilitiesReceived;
+}
+
+void LLViewerRegion::setCapabilitiesReceived(bool received)
+{
+ mCapabilitiesReceived = received;
+
+ // Tell interested parties that we've received capabilities,
+ // so that they can safely use getCapability().
+ if (received)
+ {
+ mCapabilitiesReceivedSignal(getRegionID());
+
+ // This is a single-shot signal. Forget callbacks to save resources.
+ mCapabilitiesReceivedSignal.disconnect_all_slots();
+ }
+}
+
+boost::signals2::connection LLViewerRegion::setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb)
+{
+ return mCapabilitiesReceivedSignal.connect(cb);
+}
+
+void LLViewerRegion::logActiveCapabilities() const
+{
+ int count = 0;
+ CapabilityMap::const_iterator iter;
+ for (iter = mImpl->mCapabilities.begin(); iter != mImpl->mCapabilities.end(); ++iter, ++count)
+ {
+ if (!iter->second.empty())
+ {
+ llinfos << iter->first << " URL is " << iter->second << llendl;
+ }
+ }
+ llinfos << "Dumped " << count << " entries." << llendl;
+}
+
+LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type)
+{
+ if (type < mImpl->mObjectPartition.size())
+ {
+ return mImpl->mObjectPartition[type];
+ }
+ return NULL;
+}
+
+void LLViewerRegion::showReleaseNotes()
+{
+ std::string url = this->getCapability("ServerReleaseNotes");
+
+ if (url.empty()) {
+ // HACK haven't received the capability yet, we'll wait until
+ // it arives.
+ mReleaseNotesRequested = TRUE;
+ return;
+ }
+
+ LLWeb::loadURL(url);
+ mReleaseNotesRequested = FALSE;
+}
+
+std::string LLViewerRegion::getDescription() const
+{
+ return stringize(*this);
+}
+
+#if MESH_ENABLED
+bool LLViewerRegion::meshUploadEnabled() const
+{
+ return (mSimulatorFeatures.has("MeshUploadEnabled") &&
+ mSimulatorFeatures["MeshUploadEnabled"].asBoolean());
+}
+
+bool LLViewerRegion::meshRezEnabled() const
+{
+ return (mSimulatorFeatures.has("MeshRezEnabled") &&
+ mSimulatorFeatures["MeshRezEnabled"].asBoolean());
+}
+#endif //MESH_ENABLED
+
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b32fafaf8..2426c75a5 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -770,47 +770,84 @@ bool LLViewerWindow::shouldShowToolTipFor(LLMouseHandler *mh)
return false;
}
-BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask)
+BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down)
{
+ std::string buttonname;
+ std::string buttonstatestr;
+ BOOL handled = FALSE;
S32 x = pos.mX;
S32 y = pos.mY;
x = llround((F32)x / mDisplayScale.mV[VX]);
y = llround((F32)y / mDisplayScale.mV[VY]);
- LLView::sMouseHandlerMessage.clear();
+ if (down)
+ buttonstatestr = "down";
+ else
+ buttonstatestr = "up";
- if (gDebugClicks)
+ switch (clicktype)
{
- llinfos << "ViewerWindow left mouse down at " << x << "," << y << llendl;
+ case LLMouseHandler::CLICK_LEFT:
+ mLeftMouseDown = down;
+ buttonname = "Left";
+ break;
+ case LLMouseHandler::CLICK_RIGHT:
+ mRightMouseDown = down;
+ buttonname = "Right";
+ break;
+ case LLMouseHandler::CLICK_MIDDLE:
+ mMiddleMouseDown = down;
+ buttonname = "Middle";
+ break;
+ case LLMouseHandler::CLICK_DOUBLELEFT:
+ mLeftMouseDown = down;
+ buttonname = "Left Double Click";
+ break;
}
+ LLView::sMouseHandlerMessage.clear();
+
if (gMenuBarView)
{
// stop ALT-key access to menu
gMenuBarView->resetMenuTrigger();
}
- mLeftMouseDown = TRUE;
+ if (gDebugClicks)
+ {
+ llinfos << "ViewerWindow " << buttonname << " mouse " << buttonstatestr << " at " << x << "," << y << llendl;
+ }
// Make sure we get a coresponding mouseup event, even if the mouse leaves the window
- mWindow->captureMouse();
+ if (down)
+ {
+ mWindow->captureMouse();
+ }
+ else
+ {
+ mWindow->releaseMouse();
+ }
// Indicate mouse was active
gMouseIdleTimer.reset();
// Hide tooltips on mousedown
- mToolTipBlocked = TRUE;
+ if (down)
+ {
+ mToolTipBlocked = TRUE;
+ mToolTip->setVisible(FALSE);
+ }
- // Also hide hover info on mousedown
+ // Also hide hover info on mousedown/mouseup
if (gHoverView)
{
gHoverView->cancelHover();
}
// Don't let the user move the mouse out of the window until mouse up.
- if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
+ if (LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown())
{
- mWindow->setMouseClipping(TRUE);
+ mWindow->setMouseClipping(down);
}
LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
@@ -821,10 +858,9 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
if (LLView::sDebugMouseHandling)
{
- llinfos << "Left Mouse Down handled by captor " << mouse_captor->getName() << llendl;
+ llinfos << buttonname << " Mouse " << buttonstatestr << " handled by captor " << mouse_captor->getName() << llendl;
}
-
- return mouse_captor->handleMouseDown(local_x, local_y, mask);
+ return mouse_captor->handleAnyMouseClick(local_x, local_y, mask, clicktype, down);
}
// Topmost view gets a chance before the hierarchy
@@ -833,216 +869,94 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
{
S32 local_x, local_y;
top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
- if (top_ctrl->pointInView(local_x, local_y))
+
+ if (down)
{
- return top_ctrl->handleMouseDown(local_x, local_y, mask);
- }
+ if (top_ctrl->pointInView(local_x, local_y))
+ {
+ return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ;
+ }
+ else
+ {
+ gFocusMgr.setTopCtrl(NULL);
+ }
+ }
else
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask);
}
// Give the UI views a chance to process the click
- if( mRootView->handleMouseDown(x, y, mask) )
+ if( mRootView->handleAnyMouseClick(x, y, mask, clicktype, down) )
{
if (LLView::sDebugMouseHandling)
{
- llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl;
+ llinfos << buttonname << " Mouse " << buttonstatestr << " " << LLView::sMouseHandlerMessage << llendl;
}
return TRUE;
}
else if (LLView::sDebugMouseHandling)
{
- llinfos << "Left Mouse Down not handled by view" << llendl;
+ llinfos << buttonname << " Mouse " << buttonstatestr << " not handled by view" << llendl;
}
- // Do not allow tool manager to handle mouseclicks if we have disconnected
- if (gDisconnected)
+ if (down)
{
- return FALSE;
- }
+ // Do not allow tool manager to handle mouseclicks if we have disconnected
+ if (gDisconnected)
+ {
+ return FALSE;
+ }
- if(LLToolMgr::getInstance()->getCurrentTool()->handleMouseDown( x, y, mask ) )
+ if(LLToolMgr::getInstance()->getCurrentTool()->handleAnyMouseClick( x, y, mask, clicktype, down ) )
+ {
+ // This is necessary to force clicks in the world to cause edit
+ // boxes that might have keyboard focus to relinquish it, and hence
+ // cause a commit to update their value. JC
+ gFocusMgr.setKeyboardFocus(NULL);
+ return TRUE;
+ }
+ }
+ else
{
- // This is necessary to force clicks in the world to cause edit
- // boxes that might have keyboard focus to relinquish it, and hence
- // cause a commit to update their value. JC
- gFocusMgr.setKeyboardFocus(NULL);
- return TRUE;
+ mWindow->releaseMouse();
+
+ LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
+ if( !handled )
+ {
+ handled = mRootView->handleAnyMouseClick(x, y, mask, clicktype, down);
+ }
+
+ if( !handled )
+ {
+ if (tool)
+ {
+ handled = tool->handleAnyMouseClick(x, y, mask, clicktype, down);
+ }
+ }
}
- return FALSE;
+ return (!down);
+}
+
+BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask)
+{
+ BOOL down = TRUE;
+ return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);
}
BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK mask)
{
- S32 x = pos.mX;
- S32 y = pos.mY;
- x = llround((F32)x / mDisplayScale.mV[VX]);
- y = llround((F32)y / mDisplayScale.mV[VY]);
-
- LLView::sMouseHandlerMessage.clear();
-
- if (gDebugClicks)
- {
- llinfos << "ViewerWindow left mouse double-click at " << x << "," << y << llendl;
- }
-
- mLeftMouseDown = TRUE;
-
- // Hide tooltips
- if( mToolTip )
- {
- mToolTip->setVisible( FALSE );
- }
-
- LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
- if( mouse_captor )
- {
- S32 local_x;
- S32 local_y;
- mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
- if (LLView::sDebugMouseHandling)
- {
- llinfos << "Left Mouse Down handled by captor " << mouse_captor->getName() << llendl;
- }
-
- return mouse_captor->handleDoubleClick(local_x, local_y, mask);
- }
-
- // Check for hit on UI.
- LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
- if (top_ctrl)
- {
- S32 local_x, local_y;
- top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
- if (top_ctrl->pointInView(local_x, local_y))
- {
- return top_ctrl->handleDoubleClick(local_x, local_y, mask);
- }
- else
- {
- gFocusMgr.setTopCtrl(NULL);
- }
- }
-
- if (mRootView->handleDoubleClick(x, y, mask))
- {
- if (LLView::sDebugMouseHandling)
- {
- llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl;
- }
- return TRUE;
- }
- else if (LLView::sDebugMouseHandling)
- {
- llinfos << "Left Mouse Down not handled by view" << llendl;
- }
-
- // Why is this here? JC 9/3/2002
- if (gNoRender)
- {
- return TRUE;
- }
-
- if(LLToolMgr::getInstance()->getCurrentTool()->handleDoubleClick( x, y, mask ) )
- {
- return TRUE;
- }
-
- // if we got this far and nothing handled a double click, pass a normal mouse down
- return handleMouseDown(window, pos, mask);
+ // try handling as a double-click first, then a single-click if that
+ // wasn't handled.
+ BOOL down = TRUE;
+ return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_DOUBLELEFT,down) ||
+ handleMouseDown(window, pos, mask);
}
BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
{
- S32 x = pos.mX;
- S32 y = pos.mY;
- x = llround((F32)x / mDisplayScale.mV[VX]);
- y = llround((F32)y / mDisplayScale.mV[VY]);
-
- LLView::sMouseHandlerMessage.clear();
-
- if (gDebugClicks)
- {
- llinfos << "ViewerWindow left mouse up" << llendl;
- }
-
- mLeftMouseDown = FALSE;
-
- // Indicate mouse was active
- gMouseIdleTimer.reset();
-
- // Hide tooltips on mouseup
- if( mToolTip )
- {
- mToolTip->setVisible( FALSE );
- }
-
- // Also hide hover info on mouseup
- if (gHoverView) gHoverView->cancelHover();
-
- BOOL handled = FALSE;
-
- mWindow->releaseMouse();
-
- LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
-
- if( tool->clipMouseWhenDown() )
- {
- mWindow->setMouseClipping(FALSE);
- }
-
- LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
- if( mouse_captor )
- {
- S32 local_x;
- S32 local_y;
- mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
- if (LLView::sDebugMouseHandling)
- {
- llinfos << "Left Mouse Up handled by captor " << mouse_captor->getName() << llendl;
- }
-
- return mouse_captor->handleMouseUp(local_x, local_y, mask);
- }
-
- LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
- if (top_ctrl)
- {
- S32 local_x, local_y;
- top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
- handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask);
- }
-
- if( !handled )
- {
- handled = mRootView->handleMouseUp(x, y, mask);
- }
-
- if (LLView::sDebugMouseHandling)
- {
- if (handled)
- {
- llinfos << "Left Mouse Up" << LLView::sMouseHandlerMessage << llendl;
- }
- else
- {
- llinfos << "Left Mouse Up not handled by view" << llendl;
- }
- }
-
- if( !handled )
- {
- if (tool)
- {
- handled = tool->handleMouseUp(x, y, mask);
- }
- }
-
- // Always handled as far as the OS is concerned.
- return TRUE;
+ BOOL down = FALSE;
+ return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);
}
@@ -1055,89 +969,11 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
LLView::sMouseHandlerMessage.clear();
- if (gDebugClicks)
- {
- llinfos << "ViewerWindow right mouse down at " << x << "," << y << llendl;
- }
+ BOOL down = TRUE;
+ BOOL handle = handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down);
+ if (handle)
+ return handle;
- if (gMenuBarView)
- {
- // stop ALT-key access to menu
- gMenuBarView->resetMenuTrigger();
- }
-
- mRightMouseDown = TRUE;
-
- // Make sure we get a coresponding mouseup event, even if the mouse leaves the window
- mWindow->captureMouse();
-
- // Hide tooltips
- if( mToolTip )
- {
- mToolTip->setVisible( FALSE );
- }
-
- // Also hide hover info on mousedown
- if (gHoverView)
- {
- gHoverView->cancelHover();
- }
-
- // Don't let the user move the mouse out of the window until mouse up.
- if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
- {
- mWindow->setMouseClipping(TRUE);
- }
-
- LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
- if( mouse_captor )
- {
- S32 local_x;
- S32 local_y;
- mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
- if (LLView::sDebugMouseHandling)
- {
- llinfos << "Right Mouse Down handled by captor " << mouse_captor->getName() << llendl;
- }
- return mouse_captor->handleRightMouseDown(local_x, local_y, mask);
- }
-
- LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
- if (top_ctrl)
- {
- S32 local_x, local_y;
- top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
- if (top_ctrl->pointInView(local_x, local_y))
- {
- return top_ctrl->handleRightMouseDown(local_x, local_y, mask);
- }
- else
- {
- gFocusMgr.setTopCtrl(NULL);
- }
- }
-
- if( mRootView->handleRightMouseDown(x, y, mask) )
- {
- if (LLView::sDebugMouseHandling)
- {
- llinfos << "Right Mouse Down" << LLView::sMouseHandlerMessage << llendl;
- }
- return TRUE;
- }
- else if (LLView::sDebugMouseHandling)
- {
- llinfos << "Right Mouse Down not handled by view" << llendl;
- }
-
- if(LLToolMgr::getInstance()->getCurrentTool()->handleRightMouseDown( x, y, mask ) )
- {
- // This is necessary to force clicks in the world to cause edit
- // boxes that might have keyboard focus to relinquish it, and hence
- // cause a commit to update their value. JC
- gFocusMgr.setKeyboardFocus(NULL);
- return TRUE;
- }
// *HACK: this should be rolled into the composite tool logic, not
// hardcoded at the top level.
@@ -1155,97 +991,15 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
{
- S32 x = pos.mX;
- S32 y = pos.mY;
- x = llround((F32)x / mDisplayScale.mV[VX]);
- y = llround((F32)y / mDisplayScale.mV[VY]);
-
- LLView::sMouseHandlerMessage.clear();
-
- // Don't care about caps lock for mouse events.
- if (gDebugClicks)
- {
- llinfos << "ViewerWindow right mouse up" << llendl;
- }
-
- mRightMouseDown = FALSE;
-
- // Indicate mouse was active
- gMouseIdleTimer.reset();
-
- // Hide tooltips on mouseup
- if( mToolTip )
- {
- mToolTip->setVisible( FALSE );
- }
-
- // Also hide hover info on mouseup
- if (gHoverView) gHoverView->cancelHover();
-
- BOOL handled = FALSE;
-
- mWindow->releaseMouse();
-
- LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
-
- if( tool->clipMouseWhenDown() )
- {
- mWindow->setMouseClipping(FALSE);
- }
-
- LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
- if( mouse_captor )
- {
- S32 local_x;
- S32 local_y;
- mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
- if (LLView::sDebugMouseHandling)
- {
- llinfos << "Right Mouse Up handled by captor " << mouse_captor->getName() << llendl;
- }
- return mouse_captor->handleRightMouseUp(local_x, local_y, mask);
- }
-
- LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
- if (top_ctrl)
- {
- S32 local_x, local_y;
- top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
- handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleRightMouseUp(local_x, local_y, mask);
- }
-
- if( !handled )
- {
- handled = mRootView->handleRightMouseUp(x, y, mask);
- }
-
- if (LLView::sDebugMouseHandling)
- {
- if (handled)
- {
- llinfos << "Right Mouse Up" << LLView::sMouseHandlerMessage << llendl;
- }
- else
- {
- llinfos << "Right Mouse Up not handled by view" << llendl;
- }
- }
-
- if( !handled )
- {
- if (tool)
- {
- handled = tool->handleRightMouseUp(x, y, mask);
- }
- }
-
- // Always handled as far as the OS is concerned.
- return TRUE;
+ BOOL down = FALSE;
+ return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down);
}
BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask)
{
+ BOOL down = TRUE;
gVoiceClient->middleMouseState(true);
+ handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down);
// Always handled as far as the OS is concerned.
return TRUE;
@@ -1253,7 +1007,9 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MAS
BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
{
+ BOOL down = FALSE;
gVoiceClient->middleMouseState(false);
+ handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down);
// Always handled as far as the OS is concerned.
return TRUE;
@@ -1638,6 +1394,7 @@ LLViewerWindow::LLViewerWindow(
mWindowRectRaw(0, height, width, 0),
mWindowRectScaled(0, height, width, 0),
mLeftMouseDown(FALSE),
+ mMiddleMouseDown(FALSE),
mRightMouseDown(FALSE),
mToolTip(NULL),
mToolTipBlocked(FALSE),
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index c5ae97049..0b03fcf01 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -50,6 +50,7 @@
#include "llstat.h"
#include "llmousehandler.h"
#include "llalertdialog.h"
+#include "llmousehandler.h"
#include "llnotifications.h"
class LLView;
@@ -152,6 +153,7 @@ public:
/*virtual*/ BOOL handleTranslatedKeyUp(KEY key, MASK mask);
/*virtual*/ void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level);
/*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, MASK mask); // NOT going to handle extended
+ /*virtual*/ BOOL handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down);
/*virtual*/ BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ BOOL handleCloseRequest(LLWindow *window);
@@ -229,6 +231,7 @@ public:
LLCoordGL getCurrentMouseDelta() const { return mCurrentMouseDelta; }
LLStat * getMouseVelocityStat() { return &mMouseVelocityStat; }
BOOL getLeftMouseDown() const { return mLeftMouseDown; }
+ BOOL getMiddleMouseDown() const { return mMiddleMouseDown; }
BOOL getRightMouseDown() const { return mRightMouseDown; }
const LLPickInfo& getLastPick() const { return mLastPick; }
@@ -405,6 +408,7 @@ protected:
LLCoordGL mCurrentMouseDelta; //amount mouse moved this frame
LLStat mMouseVelocityStat;
BOOL mLeftMouseDown;
+ BOOL mMiddleMouseDown;
BOOL mRightMouseDown;
LLProgressView *mProgressView;
diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp
index ad906d27f..c0ec8fc61 100644
--- a/indra/newview/llvoavatardefines.cpp
+++ b/indra/newview/llvoavatardefines.cpp
@@ -42,6 +42,7 @@ using namespace LLVOAvatarDefines;
/*********************************************************************************
* Edit this function to add/remove/change textures and mesh definitions for avatars.
+ * If these are changed, they MUST be changed in floater_avatar_textures.xml as well!
*/
LLVOAvatarDictionary::Textures::Textures()
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index 1d350d635..25337f0ef 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -74,6 +74,8 @@ F32 w_mod[GRASS_MAX_BLADES]; // Factor to modulate wind movement by to rand
LLVOGrass::SpeciesMap LLVOGrass::sSpeciesTable;
S32 LLVOGrass::sMaxGrassSpecies = 0;
+LLVOGrass::SpeciesNames LLVOGrass::sSpeciesNames;
+
LLVOGrass::LLVOGrass(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
: LLAlphaObject(id, pcode, regionp)
@@ -198,6 +200,11 @@ void LLVOGrass::initClass()
if (species >= sMaxGrassSpecies) sMaxGrassSpecies = species + 1;
+ std::string name;
+ static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
+ success &= grass_def->getFastAttributeString(name_string, name);
+ sSpeciesNames[name] = species;
+
if (!success)
{
std::string name;
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 6a6fcc31c..8519d02cd 100644
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -117,6 +117,9 @@ public:
F32 mBladeWindAngle;
F32 mBWAOverlap;
+ typedef std::map SpeciesNames;
+ static SpeciesNames sSpeciesNames;
+
protected:
~LLVOGrass();
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 65110b074..7a96fe309 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -29,8 +29,12 @@
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
-
#include "llviewerprecompiledheaders.h"
+
+#if LL_LINUX && defined(LL_STANDALONE)
+#include
+#endif
+
#include "llvoiceclient.h"
#include
@@ -1637,10 +1641,23 @@ void LLVoiceClient::stateMachine()
{
// Launch the voice daemon
- // *FIX:Mani - Using the executable dir instead
- // of mAppRODataDir, the working directory from which the app
- // is launched.
- //std::string exe_path = gDirUtilp->getAppRODataDir();
+#if LL_LINUX && defined(LL_STANDALONE)
+ // Look for the vivox daemon in the executable path list
+ // using glib first.
+ char *voice_path = g_find_program_in_path ("SLVoice");
+ std::string exe_path;
+ if (voice_path) {
+ exe_path = llformat("%s", voice_path);
+ free(voice_path);
+ } else {
+ exe_path = gDirUtilp->getExecutableDir() +
+ gDirUtilp->getDirDelimiter() + "SLVoice";
+ }
+#else
+ // *FIX:Mani - Using the executable dir instead
+ // of mAppRODataDir, the working directory from which the
+ // app is launched.
+ //std::string exe_path = gDirUtilp->getAppRODataDir();
std::string exe_path = gDirUtilp->getExecutableDir();
exe_path += gDirUtilp->getDirDelimiter();
#if LL_WINDOWS
@@ -1649,6 +1666,7 @@ void LLVoiceClient::stateMachine()
exe_path += "../Resources/SLVoice";
#else
exe_path += "SLVoice";
+#endif
#endif
// See if the vivox executable exists
llstat s;
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 08dbc4df5..8ab942851 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -83,6 +83,8 @@ F32 LLVOTree::sTreeFactor = 1.f;
LLVOTree::SpeciesMap LLVOTree::sSpeciesTable;
S32 LLVOTree::sMaxTreeSpecies = 0;
+LLVOTree::SpeciesNames LLVOTree::sSpeciesNames;
+
// Tree variables and functions
LLVOTree::LLVOTree(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp):
@@ -242,6 +244,11 @@ void LLVOTree::initClass()
sSpeciesTable[species] = newTree;
if (species >= sMaxTreeSpecies) sMaxTreeSpecies = species + 1;
+
+ std::string name;
+ static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
+ success &= tree_def->getFastAttributeString(name_string, name);
+ sSpeciesNames[name] = species;
if (!success)
{
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
index 7e961471f..befe3665c 100644
--- a/indra/newview/llvotree.h
+++ b/indra/newview/llvotree.h
@@ -153,6 +153,10 @@ public:
};
static F32 sTreeFactor; // Tree level of detail factor
+
+ typedef std::map SpeciesNames;
+ static SpeciesNames sSpeciesNames;
+
static const S32 sMAX_NUM_TREE_LOD_LEVELS ;
friend class LLDrawPoolTree;
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 38317f5e0..da2644d10 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -172,7 +172,7 @@ LLViewerRegion* LLWorld::addRegion(const U64 ®ion_handle, const LLHost &host,
U32 iindex = 0;
U32 jindex = 0;
- mWidth = region_size_x;
+ mWidth = region_size_x;
mWidthInMeters = mWidth * mScale;
from_region_handle(region_handle, &iindex, &jindex);
S32 x = (S32)(iindex/256);
@@ -1256,16 +1256,16 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data)
// which simulator should we modify?
LLHost sim(ip_u32, port);
- U32 region_size_x = 256;
- msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeX, region_size_x);
-
- U32 region_size_y = 256;
- msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeY, region_size_y);
-
- if (region_size_y == 0 || region_size_x == 0)
- {
- region_size_x = 256;
- region_size_y = 256;
+ U32 region_size_x = 256;
+ msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeX, region_size_x);
+
+ U32 region_size_y = 256;
+ msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeY, region_size_y);
+
+ if (region_size_y == 0 || region_size_x == 0)
+ {
+ region_size_x = 256;
+ region_size_y = 256;
}
// Viewer trusts the simulator.
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index c6ec2047a..0a8996f5d 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -293,12 +293,27 @@ LLSimInfo* LLWorldMap::simInfoFromPosGlobal(const LLVector3d& pos_global)
return simInfoFromHandle(handle);
}
-LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle)
+LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 findhandle)
{
- sim_info_map_t::iterator it = mSimInfoMap.find(handle);
- if (it != mSimInfoMap.end())
- {
- return it->second;
+ std::map::const_iterator it;
+ for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+ {
+ const U64 handle = (*it).first;
+ LLSimInfo* info = (*it).second;
+ if(handle == findhandle)
+ {
+ return info;
+ }
+ U32 x = 0, y = 0;
+ from_region_handle(findhandle, &x, &y);
+ U32 checkRegionX, checkRegionY;
+ from_region_handle(handle, &checkRegionX, &checkRegionY);
+
+ if(x >= checkRegionX && x < (checkRegionX + info->getSizeX()) &&
+ y >= checkRegionY && y < (checkRegionY + info->getSizeY()))
+ {
+ return info;
+ }
}
return NULL;
}
@@ -659,6 +674,8 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
{
U16 x_regions;
U16 y_regions;
+ U16 x_size = 256;
+ U16 y_size = 256;
std::string name;
U8 accesscode;
U32 region_flags;
@@ -673,9 +690,19 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
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);
+ if(msg->getNumberOfBlocksFast(_PREHASH_Size) > 0)
+ {
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeX, x_size, block);
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeY, y_size, block);
+ }
+ if(x_size == 0 || (x_size % 16) != 0|| (y_size % 16) != 0)
+ {
+ x_size = 256;
+ y_size = 256;
+ }
U32 x_meters = x_regions * REGION_WIDTH_UNITS;
- U32 y_meters = y_regions * REGION_WIDTH_UNITS;
+ U32 y_meters = y_regions * REGION_WIDTH_UNITS;
U64 handle = to_region_handle(x_meters, y_meters);
@@ -714,6 +741,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
siminfo->setRegionFlags( region_flags );
siminfo->setWaterHeight((F32) water_height);
siminfo->setMapImageID( image_id, agent_flags );
+ siminfo->setSize( x_size, y_size );
#ifdef IMMEDIATE_IMAGE_LOAD
if (use_web_map_tiles)
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index c87b514ad..c41bf28c3 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -100,6 +100,7 @@ public:
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 setSize(U16 sizeX, U16 sizeY) { mSizeX = sizeX; mSizeY = sizeY; }
void setAccess (U8 accesscode) { mAccess = accesscode; }
void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; }
void setWaterHeight (F32 water_height) { mWaterHeight = water_height; }
@@ -117,6 +118,8 @@ public:
const F32 getWaterHeight() const { return mWaterHeight; }
const F32 getAlpha() const { return mAlpha; }
const U64 getHandle() const { return mHandle; }
+ const U16 getSizeX() const { return mSizeX; }
+ const U16 getSizeY() const { return mSizeY; }
bool isName(const std::string& name) const;
bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
@@ -130,7 +133,9 @@ private:
U8 mAccess;
U32 mRegionFlags;
F32 mWaterHeight;
-
+ U16 mSizeX;
+ U16 mSizeY;
+
F32 mAlpha;
public:
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 575e8120b..0edb7765d 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -644,7 +644,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
{
continue; // better to draw nothing than the missing asset image
}
-
+
LLVector3d origin_global((F64)layer->LayerExtents.mLeft * REGION_WIDTH_METERS, (F64)layer->LayerExtents.mBottom * REGION_WIDTH_METERS, 0.f);
// Find x and y position relative to camera's center.
@@ -674,7 +674,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
}
current_image->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE);
- current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
+ current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]),
+ llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
if (!current_image->hasGLTexture())
{
@@ -762,8 +763,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
// 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 ;
+ F32 top = bottom + sMapScale * ((F32)info->getSizeY() / 256.f);
+ F32 right = left + sMapScale * ((F32)info->getSizeX() / 256.f);
// Switch to world map texture (if available for this region) if either:
// 1. Tiles are zoomed out small enough, or
@@ -815,7 +816,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
(textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
{
textures_requested_this_tick++;
- if (use_web_map_tiles)
+ if (use_web_map_tiles && info->getSizeX() == REGION_WIDTH_UNITS &&
+ info->getSizeY() == REGION_WIDTH_UNITS)
{
LLVector3d region_pos = info->getGlobalOrigin();
info->mCurrentImage = LLWorldMap::loadObjectsTile((U32)(region_pos.mdV[VX] / REGION_WIDTH_UNITS), (U32)(region_pos.mdV[VY] / REGION_WIDTH_UNITS));
@@ -852,13 +854,15 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
if (simimage != NULL)
{
simimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
- simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
+ simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX] * ((F32)info->getSizeX() / REGION_WIDTH_UNITS)),
+ llround(draw_size * LLUI::sGLScaleFactor.mV[VY] * ((F32)info->getSizeY() / REGION_WIDTH_UNITS)));
}
if (overlayimage != NULL)
{
overlayimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
- overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
+ overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX] * ((F32)info->getSizeX() / REGION_WIDTH_UNITS)),
+ llround(draw_size * LLUI::sGLScaleFactor.mV[VY] * ((F32)info->getSizeY() / REGION_WIDTH_UNITS)));
}
// LLTextureView::addDebugImage(simimage);
@@ -1255,8 +1259,17 @@ bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load
F32 left = pos_screen[VX];
F32 bottom = pos_screen[VY];
// Compute the NE corner coordinates of the tile now
- pos_global[VX] += tile_width;
- pos_global[VY] += tile_width;
+ LLSimInfo* simInfo = LLWorldMap::instance().simInfoFromHandle(to_region_handle(grid_x, grid_y));
+ if(simInfo != NULL)
+ {
+ pos_global[VX] += ((F32)tile_width * ((F32)simInfo->getSizeX() / REGION_WIDTH_METERS));
+ pos_global[VY] += ((F32)tile_width * ((F32)simInfo->getSizeY() / REGION_WIDTH_METERS));
+ }
+ else
+ {
+ pos_global[VX] += tile_width;
+ pos_global[VY] += tile_width;
+ }
pos_screen = globalPosToView (pos_global);
F32 right = pos_screen[VX];
F32 top = pos_screen[VY];
@@ -1283,11 +1296,6 @@ bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load
drawTileOutline(level, top, left, bottom, right);
#endif // DEBUG_DRAW_TILE
}
- //else
- //{
- // Waiting for a tile -> the level is not complete
- // LL_INFOS("World Map") << "Unfetched tile. level = " << level << LL_ENDL;
- //}
}
else
{
diff --git a/indra/newview/skins/default/xui/en-us/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en-us/floater_avatar_textures.xml
index e83fb1904..d860a185e 100644
--- a/indra/newview/skins/default/xui/en-us/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_avatar_textures.xml
@@ -12,34 +12,34 @@
>
-
+
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en-us/floater_hardware_settings.xml
index 21ba6b168..62569e0c9 100644
--- a/indra/newview/skins/default/xui/en-us/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_hardware_settings.xml
@@ -1,7 +1,7 @@
+
+
+ Note: the Gamma and Fog Distance Ratio settings are unavailable (since useless) when the
+ Atmospheric Shaders are enabled.
+
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/indra/newview/skins/default/xui/en-us/floater_inventory.xml
index d42d855d6..457ae4b3f 100644
--- a/indra/newview/skins/default/xui/en-us/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_inventory.xml
@@ -5,8 +5,11 @@
title="Inventory" width="467">
- Quick Filter:
+
+ Quick Filter:
All Types
Animations
@@ -21,7 +24,7 @@
Textures
Snapshots
Custom...
-
+
All Types
Animations
diff --git a/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml
index b7064e8fd..5307864c6 100644
--- a/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml
@@ -1,13 +1,10 @@
-
-
-
+
+
+
Loading...
+
Unable to find object containing this note.
diff --git a/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml b/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml
index 47af3cf22..96fd2633d 100644
--- a/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml
@@ -1,35 +1,71 @@
-
-
- Loading...
-
+
+
Description:
-
-
-
- Unable to find object containing this note.:
- You are not allowed to view this note.
+
+
+
+
+ Loading...
+
+
+
+
+
+ Unable to find object containing this note.
+
+
+ You are not allowed to view this note.
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_search_replace.xml b/indra/newview/skins/default/xui/en-us/floater_search_replace.xml
new file mode 100644
index 000000000..930cf37b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en-us/floater_search_replace.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+ Search
+
+
+ Replace
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/menu_pie_self.xml b/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
index ee6c1bd8a..9ae376800 100644
--- a/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
@@ -54,6 +54,11 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index 4a49daede..04a5fd94f 100644
--- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -196,11 +196,25 @@
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/panel_group_general.xml b/indra/newview/skins/default/xui/en-us/panel_group_general.xml
index 84494930c..4aecb72b1 100644
--- a/indra/newview/skins/default/xui/en-us/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_group_general.xml
@@ -147,7 +147,6 @@ Hover your mouse over the options for more help.
-
Retrieving member data
diff --git a/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml b/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml
index 678e48f6e..090a164d8 100644
--- a/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_overlaybar.xml
@@ -38,7 +38,10 @@
-
+
+
+ name="windowed mode" radio_style="false" width="120" />
-
+
-
+
Lighting Detail:
@@ -430,7 +435,7 @@
Terrain Detail:
diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml
index c1040da37..6d5f5ffbe 100644
--- a/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml
@@ -29,7 +29,7 @@
+
+integer llSetMemoryLimit( integer limit )
+Request ''limit'' bytes to be reserved for this script.
+
+
+integer llSetLinkMedia( integer link, integer face, list params )
+Set the media params for a particular face on the linked prim(s) without a delay.
+
+
+list llGetLinkMedia( integer link, integer face, list params )
+Returns a list with the media params for a particular face on a linked prim, given the desired list of named params.
+
+
+integer llClearLinkMedia( integer link, integer face )
+Clears the media and all params from the given face on the linked prim(s).
+
+
+llSetLinkCamera( integer link, vector eye, vector at )
+Sets the camera eye offset, and the offset that the camera is looking at, for avatars that sit on the linked prim.
+
+
+llSetContentType( key request_id, integer content_type )
+Set the Internet media type of an LSL HTTP server response.
+
+
+llLinkSitTarget( integer link, vector offset, rotation rot );
+Set the sit location for the linked prim(s). The sit location is relative to the prim's position and rotation.
+
+
+key llAvatarOnLinkSitTarget( integer link )
+Returns a key that is the UUID of the user seated on the prim.
+
+
+
+
@@ -2244,4 +2284,62 @@ list lsGetWindlightScene(list rules)
Get the current WindLight settings.
(Reguires LightShare)
+
+
+
+key osNpcSaveAppearance(key npc, string notecardName)
+Saves the NPC's appearance to a notecard.
+(OpenSim only.)
+
+
+osNpcLoadAppearance(key npc, string notecardName)
+Loads the NPC's appearance from a notecard with appearance data.
+Notecards can also be loaded by UUID.
+(OpenSim only.)
+
+
+osNpcMoveToTarget(key npc, vector position, integer options)
+Moves the NPC to a target at a given vector, using options to walk or to fly there.
+(OpenSim only.)
+
+
+key osOwnerSaveAppearance(string notecardName)
+Saves the owner's appearance to a notecard inside the prim that holds the script.
+(OpenSim only.)
+
+
+rotation osNpcGetRot(key npc)
+Retrieves the rotation of an NPC
+(OpenSim only.)
+
+
+osNpcSetRot(key npc, rotation rot)
+Sets an NPC's rotation.
+(OpenSim only.)
+
+
+key osOwnerSaveAppearance(key avatarId, string notecardName)
+Saves an avatar's appearance to a notecard inside the prim that holds the script.
+(OpenSim only.)
+
+
+vector osNpcGetPos(key npc)
+Retrieves the vector of an NPC's position within a region.
+(OpenSim only.)
+
+
+osNpcStopMoveToTarget(key npc)
+Makes an NPC stop moving to a target.
+(OpenSim only.)
+
+
+float osGetWindParam(string plugin, string param)
+Gets the value of param property for plugin module.
+(OpenSim only.)
+
+
+osSetWindParam(string plugin, string param, float value)
+Sets value of param property for plugin module.
+(OpenSim only.)
+
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f49799b1c..7d811fb93 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -510,9 +510,14 @@ class DarwinManifest(ViewerManifest):
"libexpat.0.5.0.dylib"):
self.path(os.path.join(libdir, libfile), libfile)
- #libfmodwrapper.dylib
- self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
-
+ # For using FMOD for sound...but, fmod is proprietary so some might not use it...
+ try:
+ self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
+ pass
+ except:
+ print "Skipping libfmodwrapper.dylib - not found"
+ pass
+
# our apps
try:
self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app")
diff --git a/indra/plugins/webkit/linux_volume_catcher.cpp b/indra/plugins/webkit/linux_volume_catcher.cpp
index db109ade3..de5ce8dd5 100644
--- a/indra/plugins/webkit/linux_volume_catcher.cpp
+++ b/indra/plugins/webkit/linux_volume_catcher.cpp
@@ -52,6 +52,10 @@ extern "C" {
#include "llaprpool.h"
#include "apr_dso.h"
+#ifdef LL_STANDALONE
+#include
+#include
+#endif
}
////////////////////////////////////////////////////
@@ -87,9 +91,16 @@ bool grab_pa_syms(std::string pulse_dso_name)
//attempt to load the shared library
sSymPADSOMemoryPool.create();
+#ifdef LL_STANDALONE
+ void *dso_handle = dlopen(pulse_dso_name.c_str(), RTLD_NOW | RTLD_GLOBAL);
+ rv = (!dso_handle)?APR_EDSOOPEN:apr_os_dso_handle_put(&sSymPADSOHandle,
+ dso_handle, sSymPADSOMemoryPool());
+ if ( APR_SUCCESS == rv )
+#else
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymPADSOHandle,
pulse_dso_name.c_str(),
sSymPADSOMemoryPool()) ))
+#endif
{
INFOMSG("Found DSO: %s", pulse_dso_name.c_str());
diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp
index 201e174f9..102e8a10e 100644
--- a/indra/test/lltut.cpp
+++ b/indra/test/lltut.cpp
@@ -94,7 +94,7 @@ namespace tut
return;
case LLSD::TypeReal:
- ensure_equals(msg + " real", actual.asReal(), expected.asReal());
+ tut::ensure_equals(msg + " real", actual.asReal(), expected.asReal());
return;
case LLSD::TypeString:
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
index d3acb611e..3e748330d 100644
--- a/scripts/messages/message_template.msg
+++ b/scripts/messages/message_template.msg
@@ -2061,7 +2061,7 @@ version 2.0
{ IsPhantom BOOL }
{ CastsShadows BOOL }
}
- {
+ {
ExtraPhysics Variable
{ PhysicsShapeType U8 }
{ Density F32 }
@@ -8654,6 +8654,11 @@ version 2.0
{ Agents U8 }
{ MapImageID LLUUID }
}
+ {
+ Size Variable
+ { SizeX U16 }
+ { SizeY U16 }
+ }
}
// viewer -> sim