From 26c40255aaf0a09b0f8fc2606621efacab2596d8 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Sun, 1 May 2011 22:16:05 +0200 Subject: [PATCH] Remove CR from configuration, source and xml files. --- indra/cmake/00-Common.cmake | 592 +- indra/cmake/Boost.cmake | 118 +- indra/cmake/CopyWinLibs.cmake | 978 +- indra/cmake/GooglePerfTools.cmake | 100 +- indra/cmake/Python.cmake | 114 +- indra/llcommon/CMakeLists.txt | 428 +- indra/llcommon/llpreprocessor.h | 370 +- indra/llcommon/llversionviewer.h | 94 +- indra/llmessage/llavatarnamecache.cpp | 16 +- indra/llmessage/llnetcanary.cpp | 296 +- indra/llmessage/llnetcanary.h | 50 +- indra/llplugin/slplugin/CMakeLists.txt | 190 +- indra/llprimitive/llmaterialtable.cpp | 1488 +- indra/newview/CMakeLists.txt | 3324 +- indra/newview/app_settings/mime_types.xml | 890 +- indra/newview/app_settings/settings.xml | 28252 ++++++++-------- .../newview/app_settings/settings_ascent.xml | 1538 +- .../app_settings/settings_ascent_coa.xml | 360 +- .../app_settings/settings_crash_behavior.xml | 30 +- indra/newview/app_settings/settings_rlv.xml | 366 +- indra/newview/app_settings/settings_sh.xml | 344 +- .../windlight/postprocesseffects.xml | 380 +- .../app_settings/windlight/skies/A%2D12AM.xml | 282 +- .../app_settings/windlight/skies/A%2D12PM.xml | 282 +- .../app_settings/windlight/skies/A%2D3AM.xml | 282 +- .../app_settings/windlight/skies/A%2D3PM.xml | 282 +- .../app_settings/windlight/skies/A%2D6AM.xml | 282 +- .../app_settings/windlight/skies/A%2D6PM.xml | 284 +- .../app_settings/windlight/skies/A%2D9AM.xml | 282 +- .../app_settings/windlight/skies/A%2D9PM.xml | 282 +- .../windlight/skies/Barcelona.xml | 282 +- .../app_settings/windlight/skies/Blizzard.xml | 282 +- .../windlight/skies/Blue%20Midday.xml | 282 +- .../windlight/skies/Coastal%20Afternoon.xml | 282 +- .../windlight/skies/Coastal%20Sunset.xml | 282 +- .../app_settings/windlight/skies/Default.xml | 282 +- .../windlight/skies/Desert%20Sunset.xml | 282 +- .../windlight/skies/Fine%20Day.xml | 282 +- .../windlight/skies/Fluffy%20Big%20Clouds.xml | 282 +- .../app_settings/windlight/skies/Foggy.xml | 282 +- .../windlight/skies/Funky%20Funky%20Funky.xml | 282 +- .../windlight/skies/Funky%20Funky.xml | 282 +- .../app_settings/windlight/skies/Gelatto.xml | 282 +- .../app_settings/windlight/skies/Ghost.xml | 282 +- .../windlight/skies/Incongruent%20Truths.xml | 282 +- .../windlight/skies/Midday%201.xml | 282 +- .../windlight/skies/Midday%202.xml | 282 +- .../windlight/skies/Midday%203.xml | 282 +- .../windlight/skies/Midday%204.xml | 282 +- .../app_settings/windlight/skies/Night.xml | 282 +- .../app_settings/windlight/skies/Pirate.xml | 282 +- .../app_settings/windlight/skies/Purple.xml | 282 +- .../windlight/skies/Sailor%27s%20Delight.xml | 282 +- .../windlight/skies/Sheer%20Surreality.xml | 282 +- .../app_settings/windlight/water/Default.xml | 86 +- .../app_settings/windlight/water/Glassy.xml | 86 +- .../app_settings/windlight/water/Murky.xml | 86 +- .../app_settings/windlight/water/Pond.xml | 86 +- .../windlight/water/SNAKE%21%21%21.xml | 86 +- .../windlight/water/Second%20Plague.xml | 86 +- .../app_settings/windlight/water/Valdez.xml | 86 +- indra/newview/llaudiosourcevo.cpp | 6 +- indra/newview/llfloateravatartextures.cpp | 30 +- indra/newview/llfloaterproperties.h | 32 +- indra/newview/llfloatervfsexplorer.h | 82 +- indra/newview/llpreviewanim.h | 36 +- indra/newview/llpreviewscript.h | 12 +- indra/newview/llpreviewsound.cpp | 484 +- indra/newview/llpreviewsound.h | 38 +- indra/newview/llselectmgr.cpp | 13164 +++---- indra/newview/llviewertexteditor.h | 4 +- indra/newview/skins/Pony-Aquablue/colors.xml | 6 +- .../skins/Pony-Aquablue/colors_base.xml | 10 +- indra/newview/skins/dark/colors_base.xml | 412 +- .../default/xui/en-us/floater_clothing.xml | 32 +- .../floater_inventory_backup_settings.xml | 32 +- .../floater_preview_embedded_texture.xml | 28 +- .../floater_preview_texture_keep_discard.xml | 58 +- .../skins/default/xui/en-us/notifications.xml | 13888 ++++---- .../default/xui/en-us/panel_land_covenant.xml | 120 +- 80 files changed, 39210 insertions(+), 39210 deletions(-) mode change 100755 => 100644 indra/llplugin/slplugin/CMakeLists.txt diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 9aad06080..1e423bd29 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -1,296 +1,296 @@ -# -*- cmake -*- -# -# Compilation options shared by all Second Life components. - -include(Variables) - - -# Portable compilation flags. - -set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1") -set(CMAKE_CXX_FLAGS_RELEASE - "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG") -set(CMAKE_C_FLAGS_RELEASE - "${CMAKE_CXX_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_RELEASESSE2 - "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG") -#llimage now requires this (?) -set(CMAKE_C_FLAGS_RELEASESSE2 - "${CMAKE_CXX_FLAGS_RELEASESSE2}") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1") - -# Don't bother with a MinSizeRel build. - -set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;ReleaseSSE2;Debug" CACHE STRING - "Supported build types." FORCE) - -# Platform-specific compilation flags. - -if (WINDOWS) - # Don't build DLLs. - set(BUILD_SHARED_LIBS OFF) - - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd" - CACHE STRING "C++ compiler debug options" FORCE) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP" - CACHE STRING "C++ compiler release-with-debug options" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE - "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast" - CACHE STRING "C++ compiler release options" FORCE) - set(CMAKE_C_FLAGS_RELEASE - "${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast" - CACHE STRING "C compiler release options" FORCE) - set(CMAKE_CXX_FLAGS_RELEASESSE2 - "${CMAKE_CXX_FLAGS_RELEASESSE2} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast" - CACHE STRING "C++ compiler release-SSE2 options" FORCE) - set(CMAKE_C_FLAGS_RELEASESSE2 - "${CMAKE_C_FLAGS_RELEASESSE2} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast" - CACHE STRING "C compiler release-SSE2 options" FORCE) - - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LARGEADDRESSAWARE") - - set(CMAKE_CXX_STANDARD_LIBRARIES "") - set(CMAKE_C_STANDARD_LIBRARIES "") - - add_definitions( - /DLL_WINDOWS=1 - /DUNICODE - /D_UNICODE - /GS - /TP - /W3 - /c - /Zc:forScope - /nologo - /Oy- - ) - - if(MSVC80 OR MSVC90 OR MSVC10) - set(CMAKE_CXX_FLAGS_RELEASE - "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" - CACHE STRING "C++ compiler release options" FORCE) - set(CMAKE_CXX_FLAGS_RELEASESSE2 - "${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" - CACHE STRING "C++ compiler release-SSE2 options" FORCE) - set(CMAKE_C_FLAGS_RELEASESSE2 - "${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" - CACHE STRING "C compiler release-SSE2 options" FORCE) - add_definitions( - /Zc:wchar_t- - ) - endif (MSVC80 OR MSVC90 OR MSVC10) - - # Are we using the crummy Visual Studio KDU build workaround? - if (NOT VS_DISABLE_FATAL_WARNINGS) - add_definitions(/WX) - endif (NOT VS_DISABLE_FATAL_WARNINGS) - - # Various libs are compiler specific, generate some variables here we can just use - # when we require them instead of reimplementing the test each time. - - if (MSVC71) - set(MSVC_DIR 7.1) - set(MSVC_SUFFIX 71) - elseif (MSVC80) - set(MSVC_DIR 8.0) - set(MSVC_SUFFIX 80) - elseif (MSVC90) - set(MSVC_DIR 9.0) - set(MSVC_SUFFIX 90) - elseif (MSVC10) - set(MSVC_DIR 10.0) - set(MSVC_SUFFIX 100) - endif (MSVC71) - -endif (WINDOWS) - -set (GCC_EXTRA_OPTIMIZATION "-ffast-math -frounding-math") - -if (LINUX) - set(CMAKE_SKIP_RPATH TRUE) - - # Here's a giant hack for Fedora 8, where we can't use - # _FORTIFY_SOURCE if we're using a compiler older than gcc 4.1. - - find_program(GXX g++) - mark_as_advanced(GXX) - - if (GXX) - execute_process( - COMMAND ${GXX} --version - COMMAND sed "s/^[gc+ ]*//" - COMMAND head -1 - OUTPUT_VARIABLE GXX_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - else (GXX) - set(GXX_VERSION x) - endif (GXX) - - # The quoting hack here is necessary in case we're using distcc or - # ccache as our compiler. CMake doesn't pass the command line - # through the shell by default, so we end up trying to run "distcc" - # " g++" - notice the leading space. Ugh. - - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version" - COMMAND sed "s/^[gc+ ]*//" - COMMAND head -1 - OUTPUT_VARIABLE CXX_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if (${GXX_VERSION} STREQUAL ${CXX_VERSION}) - add_definitions(-D_FORTIFY_SOURCE=2) - else (${GXX_VERSION} STREQUAL ${CXX_VERSION}) - if (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat") - add_definitions(-D_FORTIFY_SOURCE=2) - endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat") - endif (${GXX_VERSION} STREQUAL ${CXX_VERSION}) - - #Lets actualy get a numerical version of gxx's version - STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION ${CXX_VERSION}) - - #gcc 4.3 and above don't like the LL boost - if(${CXX_VERSION} GREATER 429) - add_definitions(-Wno-parentheses) - endif (${CXX_VERSION} GREATER 429) - - # End of hacks. - - add_definitions( - -DLL_LINUX=1 - -D_REENTRANT - -fexceptions - -fno-math-errno - -fno-strict-aliasing - -fsigned-char - -g - -pthread - ) - - if (SERVER) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-60") - if (EXISTS /etc/debian_version) - FILE(READ /etc/debian_version DEBIAN_VERSION) - else (EXISTS /etc/debian_version) - set(DEBIAN_VERSION "") - endif (EXISTS /etc/debian_version) - - if (NOT DEBIAN_VERSION STREQUAL "3.1") - add_definitions(-DCTYPE_WORKAROUND) - endif (NOT DEBIAN_VERSION STREQUAL "3.1") - - if (EXISTS /usr/lib/mysql4/mysql) - link_directories(/usr/lib/mysql4/mysql) - endif (EXISTS /usr/lib/mysql4/mysql) - - add_definitions( - -msse2 - -mfpmath=sse - ) - endif (SERVER) - - if (VIEWER) - add_definitions(-DAPPID=secondlife) - add_definitions(-fvisibility=hidden) - # don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh! The viewer doesn't need to catch SIGCHLD anyway. - add_definitions(-DLL_IGNORE_SIGCHLD) - if (NOT STANDALONE) - # this stops us requiring a really recent glibc at runtime - add_definitions(-fno-stack-protector) - endif (NOT STANDALONE) - set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) - endif (VIEWER) - - set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") - set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}") - set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}") - set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O3 ${CMAKE_CXX_FLAGS_RELEASESSE2}") - set(CMAKE_C_FLAGS_RELEASESSE2 "-O3 ${CMAKE_C_FLAGS_RELEASESSE2}") -endif (LINUX) - - -if (DARWIN) - add_definitions(-DLL_DARWIN=1) - set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch") - # NOTE: it's critical that the optimization flag is put in front. - # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -03 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -03 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") -endif (DARWIN) - - -if (LINUX OR DARWIN) - set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-non-virtual-dtor -Woverloaded-virtual") - - if (NOT GCC_DISABLE_FATAL_WARNINGS) - set(GCC_WARNINGS "${GCC_WARNINGS} -Werror") - endif (NOT GCC_DISABLE_FATAL_WARNINGS) - - set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder") - - set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}") - - if (WORD_SIZE EQUAL 32) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") - elseif (WORD_SIZE EQUAL 64) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") - endif (WORD_SIZE EQUAL 32) -endif (LINUX OR DARWIN) - - -if (STANDALONE) - add_definitions(-DLL_STANDALONE=1) - - if (LINUX AND ${ARCH} STREQUAL "i686") - add_definitions(-march=pentiumpro) - endif (LINUX AND ${ARCH} STREQUAL "i686") - -else (STANDALONE) - set(${ARCH}_linux_INCLUDES - ELFIO - atk-1.0 - glib-2.0 - gstreamer-0.10 - gtk-2.0 - llfreetype2 - pango-1.0 - ) -endif (STANDALONE) - -if(1 EQUAL 1) - add_definitions(-DOPENSIM_RULES=1) -endif(1 EQUAL 1) - -if(SERVER) - include_directories(${LIBS_PREBUILT_DIR}/include/havok) -endif(SERVER) - -SET( CMAKE_EXE_LINKER_FLAGS_RELEASESSE2 - "${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING - "Flags used for linking binaries under SSE2 build." - FORCE ) -SET( CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 - "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING - "Flags used by the shared libraries linker under SSE2 build." - FORCE ) -MARK_AS_ADVANCED( - CMAKE_CXX_FLAGS_RELEASESSE2 - CMAKE_C_FLAGS_RELEASESSE2 - CMAKE_EXE_LINKER_FLAGS_RELEASESSE2 - CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 ) +# -*- cmake -*- +# +# Compilation options shared by all Second Life components. + +include(Variables) + + +# Portable compilation flags. + +set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1") +set(CMAKE_CXX_FLAGS_RELEASE + "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG") +set(CMAKE_C_FLAGS_RELEASE + "${CMAKE_CXX_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_RELEASESSE2 + "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG") +#llimage now requires this (?) +set(CMAKE_C_FLAGS_RELEASESSE2 + "${CMAKE_CXX_FLAGS_RELEASESSE2}") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO + "-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1") + +# Don't bother with a MinSizeRel build. + +set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;ReleaseSSE2;Debug" CACHE STRING + "Supported build types." FORCE) + +# Platform-specific compilation flags. + +if (WINDOWS) + # Don't build DLLs. + set(BUILD_SHARED_LIBS OFF) + + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd" + CACHE STRING "C++ compiler debug options" FORCE) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP" + CACHE STRING "C++ compiler release-with-debug options" FORCE) + set(CMAKE_CXX_FLAGS_RELEASE + "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast" + CACHE STRING "C++ compiler release options" FORCE) + set(CMAKE_C_FLAGS_RELEASE + "${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast" + CACHE STRING "C compiler release options" FORCE) + set(CMAKE_CXX_FLAGS_RELEASESSE2 + "${CMAKE_CXX_FLAGS_RELEASESSE2} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast" + CACHE STRING "C++ compiler release-SSE2 options" FORCE) + set(CMAKE_C_FLAGS_RELEASESSE2 + "${CMAKE_C_FLAGS_RELEASESSE2} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast" + CACHE STRING "C compiler release-SSE2 options" FORCE) + + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LARGEADDRESSAWARE") + + set(CMAKE_CXX_STANDARD_LIBRARIES "") + set(CMAKE_C_STANDARD_LIBRARIES "") + + add_definitions( + /DLL_WINDOWS=1 + /DUNICODE + /D_UNICODE + /GS + /TP + /W3 + /c + /Zc:forScope + /nologo + /Oy- + ) + + if(MSVC80 OR MSVC90 OR MSVC10) + set(CMAKE_CXX_FLAGS_RELEASE + "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" + CACHE STRING "C++ compiler release options" FORCE) + set(CMAKE_CXX_FLAGS_RELEASESSE2 + "${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" + CACHE STRING "C++ compiler release-SSE2 options" FORCE) + set(CMAKE_C_FLAGS_RELEASESSE2 + "${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" + CACHE STRING "C compiler release-SSE2 options" FORCE) + add_definitions( + /Zc:wchar_t- + ) + endif (MSVC80 OR MSVC90 OR MSVC10) + + # Are we using the crummy Visual Studio KDU build workaround? + if (NOT VS_DISABLE_FATAL_WARNINGS) + add_definitions(/WX) + endif (NOT VS_DISABLE_FATAL_WARNINGS) + + # Various libs are compiler specific, generate some variables here we can just use + # when we require them instead of reimplementing the test each time. + + if (MSVC71) + set(MSVC_DIR 7.1) + set(MSVC_SUFFIX 71) + elseif (MSVC80) + set(MSVC_DIR 8.0) + set(MSVC_SUFFIX 80) + elseif (MSVC90) + set(MSVC_DIR 9.0) + set(MSVC_SUFFIX 90) + elseif (MSVC10) + set(MSVC_DIR 10.0) + set(MSVC_SUFFIX 100) + endif (MSVC71) + +endif (WINDOWS) + +set (GCC_EXTRA_OPTIMIZATION "-ffast-math -frounding-math") + +if (LINUX) + set(CMAKE_SKIP_RPATH TRUE) + + # Here's a giant hack for Fedora 8, where we can't use + # _FORTIFY_SOURCE if we're using a compiler older than gcc 4.1. + + find_program(GXX g++) + mark_as_advanced(GXX) + + if (GXX) + execute_process( + COMMAND ${GXX} --version + COMMAND sed "s/^[gc+ ]*//" + COMMAND head -1 + OUTPUT_VARIABLE GXX_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + else (GXX) + set(GXX_VERSION x) + endif (GXX) + + # The quoting hack here is necessary in case we're using distcc or + # ccache as our compiler. CMake doesn't pass the command line + # through the shell by default, so we end up trying to run "distcc" + # " g++" - notice the leading space. Ugh. + + execute_process( + COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version" + COMMAND sed "s/^[gc+ ]*//" + COMMAND head -1 + OUTPUT_VARIABLE CXX_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if (${GXX_VERSION} STREQUAL ${CXX_VERSION}) + add_definitions(-D_FORTIFY_SOURCE=2) + else (${GXX_VERSION} STREQUAL ${CXX_VERSION}) + if (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat") + add_definitions(-D_FORTIFY_SOURCE=2) + endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat") + endif (${GXX_VERSION} STREQUAL ${CXX_VERSION}) + + #Lets actualy get a numerical version of gxx's version + STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION ${CXX_VERSION}) + + #gcc 4.3 and above don't like the LL boost + if(${CXX_VERSION} GREATER 429) + add_definitions(-Wno-parentheses) + endif (${CXX_VERSION} GREATER 429) + + # End of hacks. + + add_definitions( + -DLL_LINUX=1 + -D_REENTRANT + -fexceptions + -fno-math-errno + -fno-strict-aliasing + -fsigned-char + -g + -pthread + ) + + if (SERVER) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-60") + if (EXISTS /etc/debian_version) + FILE(READ /etc/debian_version DEBIAN_VERSION) + else (EXISTS /etc/debian_version) + set(DEBIAN_VERSION "") + endif (EXISTS /etc/debian_version) + + if (NOT DEBIAN_VERSION STREQUAL "3.1") + add_definitions(-DCTYPE_WORKAROUND) + endif (NOT DEBIAN_VERSION STREQUAL "3.1") + + if (EXISTS /usr/lib/mysql4/mysql) + link_directories(/usr/lib/mysql4/mysql) + endif (EXISTS /usr/lib/mysql4/mysql) + + add_definitions( + -msse2 + -mfpmath=sse + ) + endif (SERVER) + + if (VIEWER) + add_definitions(-DAPPID=secondlife) + add_definitions(-fvisibility=hidden) + # don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh! The viewer doesn't need to catch SIGCHLD anyway. + add_definitions(-DLL_IGNORE_SIGCHLD) + if (NOT STANDALONE) + # this stops us requiring a really recent glibc at runtime + add_definitions(-fno-stack-protector) + endif (NOT STANDALONE) + set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + endif (VIEWER) + + set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}") + set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}") + set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O3 ${CMAKE_CXX_FLAGS_RELEASESSE2}") + set(CMAKE_C_FLAGS_RELEASESSE2 "-O3 ${CMAKE_C_FLAGS_RELEASESSE2}") +endif (LINUX) + + +if (DARWIN) + add_definitions(-DLL_DARWIN=1) + set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch") + # NOTE: it's critical that the optimization flag is put in front. + # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -03 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -03 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") +endif (DARWIN) + + +if (LINUX OR DARWIN) + set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-non-virtual-dtor -Woverloaded-virtual") + + if (NOT GCC_DISABLE_FATAL_WARNINGS) + set(GCC_WARNINGS "${GCC_WARNINGS} -Werror") + endif (NOT GCC_DISABLE_FATAL_WARNINGS) + + set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder") + + set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}") + + if (WORD_SIZE EQUAL 32) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") + elseif (WORD_SIZE EQUAL 64) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") + endif (WORD_SIZE EQUAL 32) +endif (LINUX OR DARWIN) + + +if (STANDALONE) + add_definitions(-DLL_STANDALONE=1) + + if (LINUX AND ${ARCH} STREQUAL "i686") + add_definitions(-march=pentiumpro) + endif (LINUX AND ${ARCH} STREQUAL "i686") + +else (STANDALONE) + set(${ARCH}_linux_INCLUDES + ELFIO + atk-1.0 + glib-2.0 + gstreamer-0.10 + gtk-2.0 + llfreetype2 + pango-1.0 + ) +endif (STANDALONE) + +if(1 EQUAL 1) + add_definitions(-DOPENSIM_RULES=1) +endif(1 EQUAL 1) + +if(SERVER) + include_directories(${LIBS_PREBUILT_DIR}/include/havok) +endif(SERVER) + +SET( CMAKE_EXE_LINKER_FLAGS_RELEASESSE2 + "${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING + "Flags used for linking binaries under SSE2 build." + FORCE ) +SET( CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 + "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING + "Flags used by the shared libraries linker under SSE2 build." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_RELEASESSE2 + CMAKE_C_FLAGS_RELEASESSE2 + CMAKE_EXE_LINKER_FLAGS_RELEASESSE2 + CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 ) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 1379d3a41..5ebc7959f 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -1,59 +1,59 @@ -# -*- cmake -*- -include(Prebuilt) - -set(Boost_FIND_QUIETLY ON) -set(Boost_FIND_REQUIRED ON) - -if (STANDALONE) - include(FindBoost) - - set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) - set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) - set(BOOST_REGEX_LIBRARY boost_regex-mt) - set(BOOST_SIGNALS_LIBRARY boost_signals-mt) - set(BOOST_SYSTEM_LIBRARY boost_system-mt) -else (STANDALONE) - use_prebuilt_binary(boost) - set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) - - if (WINDOWS) - set(BOOST_VERSION 1_45) - - # SNOW-788 - # 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc - # The precompiled boost libs for VC71 use a different suffix to VS80 and VS90 - # This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate - # boost libs are avaiable - RC. - - if (MSVC71) - set(BOOST_OPTIM_SUFFIX mt-s) - set(BOOST_DEBUG_SUFFIX mt-sgd) - else (MSVC71) - set(BOOST_OPTIM_SUFFIX mt) - set(BOOST_DEBUG_SUFFIX mt-gd) - endif (MSVC71) - - set(BOOST_PROGRAM_OPTIONS_LIBRARY - optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION} - debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION}) - set(BOOST_REGEX_LIBRARY - optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION} - debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION}) - set(BOOST_SIGNALS_LIBRARY - optimized libboost_signals-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION} - debug libboost_signals-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION}) - - elseif (DARWIN) - set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) - set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) - set(BOOST_REGEX_LIBRARY boost_regex-mt) - set(BOOST_SIGNALS_LIBRARY boost_signals-mt) - set(BOOST_SYSTEM_LIBRARY boost_system-mt) - elseif (LINUX) - set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) - set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) - set(BOOST_REGEX_LIBRARY boost_regex-mt) - set(BOOST_SIGNALS_LIBRARY boost_signals-mt) - set(BOOST_SYSTEM_LIBRARY boost_system-mt) - endif (WINDOWS) -endif (STANDALONE) +# -*- cmake -*- +include(Prebuilt) + +set(Boost_FIND_QUIETLY ON) +set(Boost_FIND_REQUIRED ON) + +if (STANDALONE) + include(FindBoost) + + set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) + set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) + set(BOOST_REGEX_LIBRARY boost_regex-mt) + set(BOOST_SIGNALS_LIBRARY boost_signals-mt) + set(BOOST_SYSTEM_LIBRARY boost_system-mt) +else (STANDALONE) + use_prebuilt_binary(boost) + set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) + + if (WINDOWS) + set(BOOST_VERSION 1_45) + + # SNOW-788 + # 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc + # The precompiled boost libs for VC71 use a different suffix to VS80 and VS90 + # This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate + # boost libs are avaiable - RC. + + if (MSVC71) + set(BOOST_OPTIM_SUFFIX mt-s) + set(BOOST_DEBUG_SUFFIX mt-sgd) + else (MSVC71) + set(BOOST_OPTIM_SUFFIX mt) + set(BOOST_DEBUG_SUFFIX mt-gd) + endif (MSVC71) + + set(BOOST_PROGRAM_OPTIONS_LIBRARY + optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION} + debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION}) + set(BOOST_REGEX_LIBRARY + optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION} + debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION}) + set(BOOST_SIGNALS_LIBRARY + optimized libboost_signals-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION} + debug libboost_signals-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION}) + + elseif (DARWIN) + set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) + set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) + set(BOOST_REGEX_LIBRARY boost_regex-mt) + set(BOOST_SIGNALS_LIBRARY boost_signals-mt) + set(BOOST_SYSTEM_LIBRARY boost_system-mt) + elseif (LINUX) + set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt) + set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt) + set(BOOST_REGEX_LIBRARY boost_regex-mt) + set(BOOST_SIGNALS_LIBRARY boost_signals-mt) + set(BOOST_SYSTEM_LIBRARY boost_system-mt) + endif (WINDOWS) +endif (STANDALONE) diff --git a/indra/cmake/CopyWinLibs.cmake b/indra/cmake/CopyWinLibs.cmake index fb13f29e4..2995fb5fe 100644 --- a/indra/cmake/CopyWinLibs.cmake +++ b/indra/cmake/CopyWinLibs.cmake @@ -1,489 +1,489 @@ -# -*- cmake -*- - -# The copy_win_libs folder contains file lists and a script used to -# copy dlls, exes and such needed to run the SecondLife from within -# VisualStudio. - -include(CMakeCopyIfDifferent) - -set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") -set(vivox_files - SLVoice.exe - alut.dll - vivoxsdk.dll - ortp.dll - wrap_oal.dll - ) -copy_if_different( - ${vivox_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Debug" - out_targets - ${vivox_files} - ) -set(all_targets ${all_targets} ${out_targets}) - - -set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") -set(debug_files - libhunspell.dll - libapr-1.dll - libaprutil-1.dll - libapriconv-1.dll - ) - -copy_if_different( - ${debug_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Debug" - out_targets - ${debug_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -# Debug config runtime files required for the plugin test mule -set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") -set(plugintest_debug_files - libeay32.dll - libglib-2.0-0.dll - libgmodule-2.0-0.dll - libgobject-2.0-0.dll - libgthread-2.0-0.dll - qtcored4.dll - qtguid4.dll - qtnetworkd4.dll - qtopengld4.dll - qtwebkitd4.dll - ssleay32.dll - ) -copy_if_different( - ${plugintest_debug_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Debug" - out_targets - ${plugintest_debug_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -# Debug config runtime files required for the plugin test mule (Qt image format plugins) -set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/imageformats") -set(plugintest_debug_files - qgifd4.dll - qicod4.dll - qjpegd4.dll - qmngd4.dll - qsvgd4.dll - qtiffd4.dll - ) -copy_if_different( - ${plugintest_debug_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Debug/imageformats" - out_targets - ${plugintest_debug_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_debug_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/llplugin/imageformats" - out_targets - ${plugintest_debug_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -# Release & ReleaseDebInfo config runtime files required for the plugin test mule -set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") -set(plugintest_release_files - libeay32.dll - libglib-2.0-0.dll - libgmodule-2.0-0.dll - libgobject-2.0-0.dll - libgthread-2.0-0.dll -# llkdu.dll (not required for plugin test) - qtcore4.dll - qtgui4.dll - qtnetwork4.dll - qtopengl4.dll - qtwebkit4.dll - ssleay32.dll - ) -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Release" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -# Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins) -set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/imageformats") -set(plugintest_release_files - qgif4.dll - qico4.dll - qjpeg4.dll - qmng4.dll - qsvg4.dll - qtiff4.dll - ) -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Release/imageformats" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2/imageformats" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Release/llplugin/imageformats" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin/imageformats" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugintest_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats" - out_targets - ${plugintest_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -# Debug config runtime files required for the plugins -set(plugins_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") -set(plugins_debug_files - libeay32.dll - qtcored4.dll - qtguid4.dll - qtnetworkd4.dll - qtopengld4.dll - qtwebkitd4.dll - ssleay32.dll - ) -copy_if_different( - ${plugins_debug_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Debug/llplugin" - out_targets - ${plugins_debug_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -# Release & ReleaseDebInfo config runtime files required for the plugins -set(plugins_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") -set(plugins_release_files - libeay32.dll - qtcore4.dll - qtgui4.dll - qtnetwork4.dll - qtopengl4.dll - qtwebkit4.dll - ssleay32.dll - ) -copy_if_different( - ${plugins_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Release/llplugin" - out_targets - ${plugins_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugins_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin" - out_targets - ${plugins_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${plugins_release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin" - out_targets - ${plugins_release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") -set(release_files - libtcmalloc_minimal.dll - fmod.dll - libhunspell.dll - libapr-1.dll - libaprutil-1.dll - libapriconv-1.dll - ) - -copy_if_different( - ${release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Release" - out_targets - ${release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${vivox_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/Release" - out_targets - ${vivox_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" - out_targets - ${release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${vivox_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" - out_targets - ${vivox_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${release_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" - out_targets - ${release_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -copy_if_different( - ${vivox_src_dir} - "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" - out_targets - ${vivox_files} - ) -set(all_targets ${all_targets} ${out_targets}) - -set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") -if(EXISTS ${internal_llkdu_path}) - set(internal_llkdu_src "${CMAKE_BINARY_DIR}/llkdu/${CMAKE_CFG_INTDIR}/llkdu.dll") - set(llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${internal_llkdu_src} ${llkdu_dst} - DEPENDS ${internal_llkdu_src} - COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" - ) - set(all_targets ${all_targets} ${llkdu_dst}) -else(EXISTS ${internal_llkdu_path}) - if (EXISTS "${debug_src_dir}/llkdu.dll") - set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") - set(debug_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/Debug/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${debug_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} - DEPENDS ${debug_llkdu_src} - COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Debug" - ) - set(all_targets ${all_targets} ${debug_llkdu_dst}) - endif (EXISTS "${debug_src_dir}/llkdu.dll") - - if (EXISTS "${release_src_dir}/llkdu.dll") - set(release_llkdu_src "${release_src_dir}/llkdu.dll") - set(release_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/Release/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${release_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} - DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release" - ) - set(all_targets ${all_targets} ${release_llkdu_dst}) - - set(releasesse2_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${releasesse2_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${releasesse2_llkdu_dst} - DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" - ) - set(all_targets ${all_targets} ${releasesse2_llkdu_dst}) - - set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll") - ADD_CUSTOM_COMMAND( - OUTPUT ${relwithdebinfo_llkdu_dst} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} - DEPENDS ${release_llkdu_src} - COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" - ) - set(all_targets ${all_targets} ${relwithdebinfo_llkdu_dst}) - endif (EXISTS "${release_src_dir}/llkdu.dll") - -endif (EXISTS ${internal_llkdu_path}) - -# Copy MS C runtime dlls, required for packaging. -# *TODO - Adapt this to support VC9 -if (MSVC80) - FIND_PATH(debug_msvc8_redist_path msvcr80d.dll - PATHS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT - NO_DEFAULT_PATH - NO_DEFAULT_PATH - ) - - if(EXISTS ${debug_msvc8_redist_path}) - set(debug_msvc8_files - msvcr80d.dll - msvcp80d.dll - Microsoft.VC80.DebugCRT.manifest - ) - - copy_if_different( - ${debug_msvc8_redist_path} - "${CMAKE_CURRENT_BINARY_DIR}/Debug" - out_targets - ${debug_msvc8_files} - ) - set(all_targets ${all_targets} ${out_targets}) - - set(debug_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/Debug/${VIEWER_BINARY_NAME}.exe.config) - add_custom_command( - OUTPUT ${debug_appconfig_file} - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py - ${CMAKE_CURRENT_BINARY_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest - ${CMAKE_CURRENT_SOURCE_DIR}/SecondLifeDebug.exe.config - ${debug_appconfig_file} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest - COMMENT "Creating debug app config file" - ) - - endif (EXISTS ${debug_msvc8_redist_path}) - - FIND_PATH(release_msvc8_redist_path msvcr80.dll - PATHS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT - NO_DEFAULT_PATH - NO_DEFAULT_PATH - ) - - if(EXISTS ${release_msvc8_redist_path}) - set(release_msvc8_files - msvcr80.dll - msvcp80.dll - Microsoft.VC80.CRT.manifest - ) - - copy_if_different( - ${release_msvc8_redist_path} - "${CMAKE_CURRENT_BINARY_DIR}/Release" - out_targets - ${release_msvc8_files} - ) - set(all_targets ${all_targets} ${out_targets}) - - copy_if_different( - ${release_msvc8_redist_path} - "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" - out_targets - ${release_msvc8_files} - ) - set(all_targets ${all_targets} ${out_targets}) - - copy_if_different( - ${release_msvc8_redist_path} - "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" - out_targets - ${release_msvc8_files} - ) - set(all_targets ${all_targets} ${out_targets}) - - set(release_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/Release/${VIEWER_BINARY_NAME}.exe.config) - add_custom_command( - OUTPUT ${release_appconfig_file} - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py - ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest - ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config - ${release_appconfig_file} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest - COMMENT "Creating release app config file" - ) - - set(releasesse2_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/${VIEWER_BINARY_NAME}.exe.config) - add_custom_command( - OUTPUT ${releasesse2_appconfig_file} - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py - ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest - ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config - ${releasesse2_appconfig_file} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest - COMMENT "Creating release-sse2 app config file" - ) - - set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config) - add_custom_command( - OUTPUT ${relwithdebinfo_appconfig_file} - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py - ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest - ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config - ${relwithdebinfo_appconfig_file} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest - COMMENT "Creating relwithdebinfo app config file" - ) - - endif (EXISTS ${release_msvc8_redist_path}) -endif (MSVC80) - -add_custom_target(copy_win_libs ALL - DEPENDS - ${all_targets} - ${release_appconfig_file} - ${releasesse2_appconfig_file} - ${relwithdebinfo_appconfig_file} - ${debug_appconfig_file} - ) -add_dependencies(copy_win_libs prepare) - -if(EXISTS ${internal_llkdu_path}) - add_dependencies(copy_win_libs llkdu) -endif(EXISTS ${internal_llkdu_path}) +# -*- cmake -*- + +# The copy_win_libs folder contains file lists and a script used to +# copy dlls, exes and such needed to run the SecondLife from within +# VisualStudio. + +include(CMakeCopyIfDifferent) + +set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") +set(vivox_files + SLVoice.exe + alut.dll + vivoxsdk.dll + ortp.dll + wrap_oal.dll + ) +copy_if_different( + ${vivox_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Debug" + out_targets + ${vivox_files} + ) +set(all_targets ${all_targets} ${out_targets}) + + +set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") +set(debug_files + libhunspell.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) + +copy_if_different( + ${debug_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Debug" + out_targets + ${debug_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +# Debug config runtime files required for the plugin test mule +set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") +set(plugintest_debug_files + libeay32.dll + libglib-2.0-0.dll + libgmodule-2.0-0.dll + libgobject-2.0-0.dll + libgthread-2.0-0.dll + qtcored4.dll + qtguid4.dll + qtnetworkd4.dll + qtopengld4.dll + qtwebkitd4.dll + ssleay32.dll + ) +copy_if_different( + ${plugintest_debug_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Debug" + out_targets + ${plugintest_debug_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +# Debug config runtime files required for the plugin test mule (Qt image format plugins) +set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/imageformats") +set(plugintest_debug_files + qgifd4.dll + qicod4.dll + qjpegd4.dll + qmngd4.dll + qsvgd4.dll + qtiffd4.dll + ) +copy_if_different( + ${plugintest_debug_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Debug/imageformats" + out_targets + ${plugintest_debug_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_debug_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/llplugin/imageformats" + out_targets + ${plugintest_debug_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +# Release & ReleaseDebInfo config runtime files required for the plugin test mule +set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +set(plugintest_release_files + libeay32.dll + libglib-2.0-0.dll + libgmodule-2.0-0.dll + libgobject-2.0-0.dll + libgthread-2.0-0.dll +# llkdu.dll (not required for plugin test) + qtcore4.dll + qtgui4.dll + qtnetwork4.dll + qtopengl4.dll + qtwebkit4.dll + ssleay32.dll + ) +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Release" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +# Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins) +set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/imageformats") +set(plugintest_release_files + qgif4.dll + qico4.dll + qjpeg4.dll + qmng4.dll + qsvg4.dll + qtiff4.dll + ) +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/Release/imageformats" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2/imageformats" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Release/llplugin/imageformats" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin/imageformats" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugintest_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats" + out_targets + ${plugintest_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +# Debug config runtime files required for the plugins +set(plugins_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") +set(plugins_debug_files + libeay32.dll + qtcored4.dll + qtguid4.dll + qtnetworkd4.dll + qtopengld4.dll + qtwebkitd4.dll + ssleay32.dll + ) +copy_if_different( + ${plugins_debug_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Debug/llplugin" + out_targets + ${plugins_debug_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +# Release & ReleaseDebInfo config runtime files required for the plugins +set(plugins_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +set(plugins_release_files + libeay32.dll + qtcore4.dll + qtgui4.dll + qtnetwork4.dll + qtopengl4.dll + qtwebkit4.dll + ssleay32.dll + ) +copy_if_different( + ${plugins_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Release/llplugin" + out_targets + ${plugins_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugins_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin" + out_targets + ${plugins_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${plugins_release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin" + out_targets + ${plugins_release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +set(release_files + libtcmalloc_minimal.dll + fmod.dll + libhunspell.dll + libapr-1.dll + libaprutil-1.dll + libapriconv-1.dll + ) + +copy_if_different( + ${release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Release" + out_targets + ${release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/Release" + out_targets + ${vivox_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" + out_targets + ${release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" + out_targets + ${vivox_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${release_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" + out_targets + ${release_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +copy_if_different( + ${vivox_src_dir} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" + out_targets + ${vivox_files} + ) +set(all_targets ${all_targets} ${out_targets}) + +set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") +if(EXISTS ${internal_llkdu_path}) + set(internal_llkdu_src "${CMAKE_BINARY_DIR}/llkdu/${CMAKE_CFG_INTDIR}/llkdu.dll") + set(llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${internal_llkdu_src} ${llkdu_dst} + DEPENDS ${internal_llkdu_src} + COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" + ) + set(all_targets ${all_targets} ${llkdu_dst}) +else(EXISTS ${internal_llkdu_path}) + if (EXISTS "${debug_src_dir}/llkdu.dll") + set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") + set(debug_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/Debug/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${debug_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} + DEPENDS ${debug_llkdu_src} + COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Debug" + ) + set(all_targets ${all_targets} ${debug_llkdu_dst}) + endif (EXISTS "${debug_src_dir}/llkdu.dll") + + if (EXISTS "${release_src_dir}/llkdu.dll") + set(release_llkdu_src "${release_src_dir}/llkdu.dll") + set(release_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/Release/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${release_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release" + ) + set(all_targets ${all_targets} ${release_llkdu_dst}) + + set(releasesse2_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${releasesse2_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${releasesse2_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" + ) + set(all_targets ${all_targets} ${releasesse2_llkdu_dst}) + + set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll") + ADD_CUSTOM_COMMAND( + OUTPUT ${relwithdebinfo_llkdu_dst} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} + DEPENDS ${release_llkdu_src} + COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" + ) + set(all_targets ${all_targets} ${relwithdebinfo_llkdu_dst}) + endif (EXISTS "${release_src_dir}/llkdu.dll") + +endif (EXISTS ${internal_llkdu_path}) + +# Copy MS C runtime dlls, required for packaging. +# *TODO - Adapt this to support VC9 +if (MSVC80) + FIND_PATH(debug_msvc8_redist_path msvcr80d.dll + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT + NO_DEFAULT_PATH + NO_DEFAULT_PATH + ) + + if(EXISTS ${debug_msvc8_redist_path}) + set(debug_msvc8_files + msvcr80d.dll + msvcp80d.dll + Microsoft.VC80.DebugCRT.manifest + ) + + copy_if_different( + ${debug_msvc8_redist_path} + "${CMAKE_CURRENT_BINARY_DIR}/Debug" + out_targets + ${debug_msvc8_files} + ) + set(all_targets ${all_targets} ${out_targets}) + + set(debug_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/Debug/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${debug_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLifeDebug.exe.config + ${debug_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest + COMMENT "Creating debug app config file" + ) + + endif (EXISTS ${debug_msvc8_redist_path}) + + FIND_PATH(release_msvc8_redist_path msvcr80.dll + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT + NO_DEFAULT_PATH + NO_DEFAULT_PATH + ) + + if(EXISTS ${release_msvc8_redist_path}) + set(release_msvc8_files + msvcr80.dll + msvcp80.dll + Microsoft.VC80.CRT.manifest + ) + + copy_if_different( + ${release_msvc8_redist_path} + "${CMAKE_CURRENT_BINARY_DIR}/Release" + out_targets + ${release_msvc8_files} + ) + set(all_targets ${all_targets} ${out_targets}) + + copy_if_different( + ${release_msvc8_redist_path} + "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" + out_targets + ${release_msvc8_files} + ) + set(all_targets ${all_targets} ${out_targets}) + + copy_if_different( + ${release_msvc8_redist_path} + "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" + out_targets + ${release_msvc8_files} + ) + set(all_targets ${all_targets} ${out_targets}) + + set(release_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/Release/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${release_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config + ${release_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest + COMMENT "Creating release app config file" + ) + + set(releasesse2_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${releasesse2_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config + ${releasesse2_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest + COMMENT "Creating release-sse2 app config file" + ) + + set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${relwithdebinfo_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config + ${relwithdebinfo_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest + COMMENT "Creating relwithdebinfo app config file" + ) + + endif (EXISTS ${release_msvc8_redist_path}) +endif (MSVC80) + +add_custom_target(copy_win_libs ALL + DEPENDS + ${all_targets} + ${release_appconfig_file} + ${releasesse2_appconfig_file} + ${relwithdebinfo_appconfig_file} + ${debug_appconfig_file} + ) +add_dependencies(copy_win_libs prepare) + +if(EXISTS ${internal_llkdu_path}) + add_dependencies(copy_win_libs llkdu) +endif(EXISTS ${internal_llkdu_path}) diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index b47f41871..a5f957a20 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -1,50 +1,50 @@ -# -*- cmake -*- -include(Prebuilt) - -if (STANDALONE) - include(FindGooglePerfTools) -else (STANDALONE) - if (LINUX OR WINDOWS) - use_prebuilt_binary(google) - endif (LINUX OR WINDOWS) - if (WINDOWS) - set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib) - set(TCMALLOC_LINKER_FLAGS "/INCLUDE:\"__tcmalloc\"") - endif (WINDOWS) - if (LINUX) - if(USE_GOOGLE_PERFTOOLS) - set(TCMALLOC_LIBRARIES tcmalloc) - set(STACKTRACE_LIBRARIES stacktrace) - set(PROFILER_LIBRARIES profiler) - else() - set(TCMALLOC_LIBRARIES tcmalloc_minimal) - endif() - set(GOOGLE_PERFTOOLS_INCLUDE_DIR - ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) - set(GOOGLE_PERFTOOLS_FOUND "YES") - endif (LINUX) -endif (STANDALONE) - -#if (GOOGLE_PERFTOOLS_FOUND) -# set(USE_GOOGLE_PERFTOOLS ON CACHE BOOL "Build with Google PerfTools support.") -#endif (GOOGLE_PERFTOOLS_FOUND) - -# XXX Disable temporarily, until we have compilation issues on 64-bit -# Etch sorted. -#set(USE_GOOGLE_PERFTOOLS OFF) - -if (USE_GOOGLE_PERFTOOLS) - set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1) - include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) - set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES} ${STACKTRACE_LIBRARIES} ${PROFILER_LIBRARIES}) -else (USE_GOOGLE_PERFTOOLS) - set(TCMALLOC_FLAG -ULL_USE_TCMALLOC) -endif (USE_GOOGLE_PERFTOOLS) - -if (NOT(DISABLE_TCMALLOC OR USE_GOOGLE_PERFTOOLS)) - message(STATUS "Building with Google TCMalloc") - set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1_) - include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) - set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES}) - set(GOOGLE_PERFTOOLS_LINKER_FLAGS ${TCMALLOC_LINKER_FLAGS}) -endif() +# -*- cmake -*- +include(Prebuilt) + +if (STANDALONE) + include(FindGooglePerfTools) +else (STANDALONE) + if (LINUX OR WINDOWS) + use_prebuilt_binary(google) + endif (LINUX OR WINDOWS) + if (WINDOWS) + set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib) + set(TCMALLOC_LINKER_FLAGS "/INCLUDE:\"__tcmalloc\"") + endif (WINDOWS) + if (LINUX) + if(USE_GOOGLE_PERFTOOLS) + set(TCMALLOC_LIBRARIES tcmalloc) + set(STACKTRACE_LIBRARIES stacktrace) + set(PROFILER_LIBRARIES profiler) + else() + set(TCMALLOC_LIBRARIES tcmalloc_minimal) + endif() + set(GOOGLE_PERFTOOLS_INCLUDE_DIR + ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) + set(GOOGLE_PERFTOOLS_FOUND "YES") + endif (LINUX) +endif (STANDALONE) + +#if (GOOGLE_PERFTOOLS_FOUND) +# set(USE_GOOGLE_PERFTOOLS ON CACHE BOOL "Build with Google PerfTools support.") +#endif (GOOGLE_PERFTOOLS_FOUND) + +# XXX Disable temporarily, until we have compilation issues on 64-bit +# Etch sorted. +#set(USE_GOOGLE_PERFTOOLS OFF) + +if (USE_GOOGLE_PERFTOOLS) + set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1) + include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) + set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES} ${STACKTRACE_LIBRARIES} ${PROFILER_LIBRARIES}) +else (USE_GOOGLE_PERFTOOLS) + set(TCMALLOC_FLAG -ULL_USE_TCMALLOC) +endif (USE_GOOGLE_PERFTOOLS) + +if (NOT(DISABLE_TCMALLOC OR USE_GOOGLE_PERFTOOLS)) + message(STATUS "Building with Google TCMalloc") + set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1_) + include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) + set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES}) + set(GOOGLE_PERFTOOLS_LINKER_FLAGS ${TCMALLOC_LINKER_FLAGS}) +endif() diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake index 002661422..a84ab64aa 100644 --- a/indra/cmake/Python.cmake +++ b/indra/cmake/Python.cmake @@ -1,57 +1,57 @@ -# -*- cmake -*- - -set(PYTHONINTERP_FOUND) - -if (WINDOWS) - # On Windows, explicitly avoid Cygwin Python. - - find_program(PYTHON_EXECUTABLE - NAMES python25.exe python23.exe python.exe - NO_DEFAULT_PATH # added so that cmake does not find cygwin python - PATHS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] - - ) -elseif (EXISTS /etc/debian_version) - # On Debian and Ubuntu, avoid Python 2.4 if possible. - - find_program(PYTHON_EXECUTABLE python2.5 python2.3 python PATHS /usr/bin) - - if (PYTHON_EXECUTABLE) - set(PYTHONINTERP_FOUND ON) - endif (PYTHON_EXECUTABLE) -elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - # On MAC OS X be sure to search standard locations first - - string(REPLACE ":" ";" PATH_LIST "$ENV{PATH}") - find_program(PYTHON_EXECUTABLE - NAMES python python25 python24 python23 - NO_DEFAULT_PATH # Avoid searching non-standard locations first - PATHS - /bin - /usr/bin - /usr/local/bin - ${PATH_LIST} - ) - - if (PYTHON_EXECUTABLE) - set(PYTHONINTERP_FOUND ON) - endif (PYTHON_EXECUTABLE) -else (WINDOWS) - include(FindPythonInterp) -endif (WINDOWS) - -if (NOT PYTHON_EXECUTABLE) - message(FATAL_ERROR "No Python interpreter found") -endif (NOT PYTHON_EXECUTABLE) - -mark_as_advanced(PYTHON_EXECUTABLE) +# -*- cmake -*- + +set(PYTHONINTERP_FOUND) + +if (WINDOWS) + # On Windows, explicitly avoid Cygwin Python. + + find_program(PYTHON_EXECUTABLE + NAMES python25.exe python23.exe python.exe + NO_DEFAULT_PATH # added so that cmake does not find cygwin python + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] + + ) +elseif (EXISTS /etc/debian_version) + # On Debian and Ubuntu, avoid Python 2.4 if possible. + + find_program(PYTHON_EXECUTABLE python2.5 python2.3 python PATHS /usr/bin) + + if (PYTHON_EXECUTABLE) + set(PYTHONINTERP_FOUND ON) + endif (PYTHON_EXECUTABLE) +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + # On MAC OS X be sure to search standard locations first + + string(REPLACE ":" ";" PATH_LIST "$ENV{PATH}") + find_program(PYTHON_EXECUTABLE + NAMES python python25 python24 python23 + NO_DEFAULT_PATH # Avoid searching non-standard locations first + PATHS + /bin + /usr/bin + /usr/local/bin + ${PATH_LIST} + ) + + if (PYTHON_EXECUTABLE) + set(PYTHONINTERP_FOUND ON) + endif (PYTHON_EXECUTABLE) +else (WINDOWS) + include(FindPythonInterp) +endif (WINDOWS) + +if (NOT PYTHON_EXECUTABLE) + message(FATAL_ERROR "No Python interpreter found") +endif (NOT PYTHON_EXECUTABLE) + +mark_as_advanced(PYTHON_EXECUTABLE) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index f5eb539e9..ca26d492a 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -1,214 +1,214 @@ -# -*- cmake -*- - -project(llcommon) - -include(00-Common) -include(LLCommon) -include(Linking) - -include_directories( - ${EXPAT_INCLUDE_DIRS} - ${LLCOMMON_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIRS} - ) - -set(llcommon_SOURCE_FILES - imageids.cpp - indra_constants.cpp - llapp.cpp - llapr.cpp - llassettype.cpp - llavatarname.cpp - llbase32.cpp - llbase64.cpp - llcommon.cpp - llcommonutils.cpp - llcrc.cpp - llcriticaldamp.cpp - llcursortypes.cpp - lldate.cpp - lldictionary.cpp - llerror.cpp - llerrorthread.cpp - llevent.cpp - llfasttimer.cpp - llfile.cpp - llfindlocale.cpp - llfixedbuffer.cpp - llformat.cpp - llframetimer.cpp - llheartbeat.cpp - llindraconfigfile.cpp - llliveappconfig.cpp - lllivefile.cpp - lllog.cpp - llmd5.cpp - llmemory.cpp - llmemorystream.cpp - llmetrics.cpp - llmortician.cpp - lloptioninterface.cpp - llprocesslauncher.cpp - llprocessor.cpp - llqueuedthread.cpp - llrand.cpp - llrun.cpp - llsd.cpp - llsdserialize.cpp - llsdserialize_xml.cpp - llsdutil.cpp - llsecondlifeurls.cpp - llstat.cpp - llstreamtools.cpp - llstring.cpp - llstringtable.cpp - llsys.cpp - llthread.cpp - lltimer.cpp - lluri.cpp - lluuid.cpp - llworkerthread.cpp - metaclass.cpp - metaproperty.cpp - reflective.cpp - timing.cpp - u64.cpp - ) - -set(llcommon_HEADER_FILES - CMakeLists.txt - - bitpack.h - ctype_workaround.h - doublelinkedlist.h - imageids.h - indra_constants.h - linden_common.h - linked_lists.h - llagentconstants.h - llapp.h - llapr.h - llassettype.h - llassoclist.h - llavatarconstants.h - llavatarname.h - llbase32.h - llbase64.h - llboost.h - llchat.h - llclickaction.h - llcommon.h - llcommonutils.h - llcrc.h - llcriticaldamp.h - llcursortypes.h - lldarray.h - lldarrayptr.h - lldate.h - lldefs.h - lldepthstack.h - lldictionary.h - lldlinked.h - lldqueueptr.h - llendianswizzle.h - llenum.h - llerror.h - llerrorcontrol.h - llerrorlegacy.h - llerrorthread.h - llevent.h - lleventemitter.h - llextendedstatus.h - llfasttimer.h - llfile.h - llfindlocale.h - llfixedbuffer.h - llformat.h - llframetimer.h - llhash.h - llheartbeat.h - llhttpstatuscodes.h - llindexedqueue.h - llindraconfigfile.h - llkeythrottle.h - lllinkedqueue.h - llliveappconfig.h - lllivefile.h - lllocalidhashmap.h - lllog.h - lllslconstants.h - llmap.h - llmd5.h - llmemory.h - llmemorystream.h - llmemtype.h - llmetrics.h - llmortician.h - llnametable.h - lloptioninterface.h - llpreprocessor.h - llpriqueuemap.h - llprocesslauncher.h - llprocessor.h - llptrskiplist.h - llptrskipmap.h - llqueuedthread.h - llrand.h - llrun.h - llsd.h - llsdserialize.h - llsdserialize_xml.h - llsdutil.h - llsecondlifeurls.h - llsimplehash.h - llskiplist.h - llskipmap.h - llstack.h - llstat.h - llstatenums.h - llstl.h - llstreamtools.h - llstrider.h - llstring.h - llstringtable.h - llsys.h - llthread.h - lltimer.h - lluri.h - lluuid.h - lluuidhashmap.h - llversionserver.h - llversionviewer.h - llworkerthread.h - metaclass.h - metaclasst.h - metaproperty.h - metapropertyt.h - processor.h - reflective.h - reflectivet.h - roles_constants.h - stdenums.h - stdtypes.h - string_table.h - timer.h - timing.h - u64.h - ) - -set_source_files_properties(${llcommon_HEADER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) - -add_library (llcommon ${llcommon_SOURCE_FILES}) -add_dependencies(llcommon prepare) -target_link_libraries( - llcommon - ${APRUTIL_LIBRARIES} - ${APR_LIBRARIES} - ${EXPAT_LIBRARIES} - ${ZLIB_LIBRARIES} - ${WINDOWS_LIBRARIES} - ) - +# -*- cmake -*- + +project(llcommon) + +include(00-Common) +include(LLCommon) +include(Linking) + +include_directories( + ${EXPAT_INCLUDE_DIRS} + ${LLCOMMON_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIRS} + ) + +set(llcommon_SOURCE_FILES + imageids.cpp + indra_constants.cpp + llapp.cpp + llapr.cpp + llassettype.cpp + llavatarname.cpp + llbase32.cpp + llbase64.cpp + llcommon.cpp + llcommonutils.cpp + llcrc.cpp + llcriticaldamp.cpp + llcursortypes.cpp + lldate.cpp + lldictionary.cpp + llerror.cpp + llerrorthread.cpp + llevent.cpp + llfasttimer.cpp + llfile.cpp + llfindlocale.cpp + llfixedbuffer.cpp + llformat.cpp + llframetimer.cpp + llheartbeat.cpp + llindraconfigfile.cpp + llliveappconfig.cpp + lllivefile.cpp + lllog.cpp + llmd5.cpp + llmemory.cpp + llmemorystream.cpp + llmetrics.cpp + llmortician.cpp + lloptioninterface.cpp + llprocesslauncher.cpp + llprocessor.cpp + llqueuedthread.cpp + llrand.cpp + llrun.cpp + llsd.cpp + llsdserialize.cpp + llsdserialize_xml.cpp + llsdutil.cpp + llsecondlifeurls.cpp + llstat.cpp + llstreamtools.cpp + llstring.cpp + llstringtable.cpp + llsys.cpp + llthread.cpp + lltimer.cpp + lluri.cpp + lluuid.cpp + llworkerthread.cpp + metaclass.cpp + metaproperty.cpp + reflective.cpp + timing.cpp + u64.cpp + ) + +set(llcommon_HEADER_FILES + CMakeLists.txt + + bitpack.h + ctype_workaround.h + doublelinkedlist.h + imageids.h + indra_constants.h + linden_common.h + linked_lists.h + llagentconstants.h + llapp.h + llapr.h + llassettype.h + llassoclist.h + llavatarconstants.h + llavatarname.h + llbase32.h + llbase64.h + llboost.h + llchat.h + llclickaction.h + llcommon.h + llcommonutils.h + llcrc.h + llcriticaldamp.h + llcursortypes.h + lldarray.h + lldarrayptr.h + lldate.h + lldefs.h + lldepthstack.h + lldictionary.h + lldlinked.h + lldqueueptr.h + llendianswizzle.h + llenum.h + llerror.h + llerrorcontrol.h + llerrorlegacy.h + llerrorthread.h + llevent.h + lleventemitter.h + llextendedstatus.h + llfasttimer.h + llfile.h + llfindlocale.h + llfixedbuffer.h + llformat.h + llframetimer.h + llhash.h + llheartbeat.h + llhttpstatuscodes.h + llindexedqueue.h + llindraconfigfile.h + llkeythrottle.h + lllinkedqueue.h + llliveappconfig.h + lllivefile.h + lllocalidhashmap.h + lllog.h + lllslconstants.h + llmap.h + llmd5.h + llmemory.h + llmemorystream.h + llmemtype.h + llmetrics.h + llmortician.h + llnametable.h + lloptioninterface.h + llpreprocessor.h + llpriqueuemap.h + llprocesslauncher.h + llprocessor.h + llptrskiplist.h + llptrskipmap.h + llqueuedthread.h + llrand.h + llrun.h + llsd.h + llsdserialize.h + llsdserialize_xml.h + llsdutil.h + llsecondlifeurls.h + llsimplehash.h + llskiplist.h + llskipmap.h + llstack.h + llstat.h + llstatenums.h + llstl.h + llstreamtools.h + llstrider.h + llstring.h + llstringtable.h + llsys.h + llthread.h + lltimer.h + lluri.h + lluuid.h + lluuidhashmap.h + llversionserver.h + llversionviewer.h + llworkerthread.h + metaclass.h + metaclasst.h + metaproperty.h + metapropertyt.h + processor.h + reflective.h + reflectivet.h + roles_constants.h + stdenums.h + stdtypes.h + string_table.h + timer.h + timing.h + u64.h + ) + +set_source_files_properties(${llcommon_HEADER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) + +add_library (llcommon ${llcommon_SOURCE_FILES}) +add_dependencies(llcommon prepare) +target_link_libraries( + llcommon + ${APRUTIL_LIBRARIES} + ${APR_LIBRARIES} + ${EXPAT_LIBRARIES} + ${ZLIB_LIBRARIES} + ${WINDOWS_LIBRARIES} + ) + diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index 3af4ae89d..39a745f25 100644 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -1,185 +1,185 @@ -/** - * @file llpreprocessor.h - * @brief This file should be included in all Linden Lab files and - * should only contain special preprocessor directives - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LLPREPROCESSOR_H -#define LLPREPROCESSOR_H - -// Figure out endianness of platform -#ifdef LL_LINUX -#define __ENABLE_WSTRING -#include -#endif // LL_LINUX - -#if LL_SOLARIS -# ifdef __sparc // Since we're talking Solaris 10 and up, only 64 bit is supported. -# define LL_BIG_ENDIAN 1 -# define LL_SOLARIS_ALIGNED_CPU 1 // used to designate issues where SPARC alignment is addressed -# define LL_SOLARIS_NON_MESA_GL 1 // The SPARC GL does not provide a MESA-based GL API -# endif -# include // ensure we know which end is up -#endif // LL_SOLARIS - -#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386))) -#define LL_LITTLE_ENDIAN 1 -#else -#define LL_BIG_ENDIAN 1 -#endif - - -// Per-compiler switches - -#ifdef __GNUC__ -#define LL_FORCE_INLINE inline __attribute__((always_inline)) -#else -#define LL_FORCE_INLINE __forceinline -#endif - -// Mark-up expressions with branch prediction hints. Do NOT use -// this with reckless abandon - it's an obfuscating micro-optimization -// outside of inner loops or other places where you are OVERWHELMINGLY -// sure which way an expression almost-always evaluates. -#if __GNUC__ >= 3 -# define LL_LIKELY(EXPR) __builtin_expect (!!(EXPR), true) -# define LL_UNLIKELY(EXPR) __builtin_expect (!!(EXPR), false) -#else -# define LL_LIKELY(EXPR) (EXPR) -# define LL_UNLIKELY(EXPR) (EXPR) -#endif - - -// Figure out differences between compilers -#if defined(__GNUC__) - #define GCC_VERSION (__GNUC__ * 10000 \ - + __GNUC_MINOR__ * 100 \ - + __GNUC_PATCHLEVEL__) - #ifndef LL_GNUC - #define LL_GNUC 1 - #endif -#elif defined(__MSVC_VER__) || defined(_MSC_VER) - #ifndef LL_MSVC - #define LL_MSVC 1 - #endif - #if _MSC_VER < 1400 - #define LL_MSVC7 //Visual C++ 2003 or earlier - #endif -#endif - -// Deal with minor differences on Unixy OSes. -#if LL_DARWIN || LL_LINUX - // Different name, same functionality. - #define stricmp strcasecmp - #define strnicmp strncasecmp - - // Not sure why this is different, but... - #ifndef MAX_PATH - #define MAX_PATH PATH_MAX - #endif // not MAX_PATH - -#endif - -// Static linking with apr on windows needs to be declared. -#ifdef LL_WINDOWS -#ifndef APR_DECLARE_STATIC -#define APR_DECLARE_STATIC // For APR on Windows -#endif -#ifndef APU_DECLARE_STATIC -#define APU_DECLARE_STATIC // For APR util on Windows -#endif -#endif - -// Deal with the differeneces on Windows -#if defined(LL_WINDOWS) -#define BOOST_REGEX_NO_LIB 1 -#define CURL_STATICLIB 1 -#ifndef XML_STATIC -#define XML_STATIC -#endif -#endif // LL_WINDOWS - -// Deal with VC6 problems -#if LL_MSVC -#pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4. -#pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4. -#pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4. -//#pragma warning( 3 : 4018 ) // "signed/unsigned mismatch" Treat this as level 3, not level 4. -#pragma warning( 3 : 4263 ) // 'function' : member function does not override any base class virtual member function -#pragma warning( 3 : 4264 ) // "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden" -#pragma warning( 3 : 4265 ) // "class has virtual functions, but destructor is not virtual" -#pragma warning( 3 : 4266 ) // 'function' : no override available for virtual member function from base 'type'; function is hidden -#pragma warning (disable : 4180) // qualifier applied to function type has no meaning; ignored -#pragma warning( disable : 4284 ) // silly MS warning deep inside their include file -#pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation. -#pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning) -#pragma warning( disable : 4996 ) // warning: deprecated - -// Linker optimization with "extern template" generates these warnings -#pragma warning( disable : 4231 ) // nonstandard extension used : 'extern' before template explicit instantiation -#pragma warning( disable : 4506 ) // no definition for inline function - -// level 4 warnings that we need to disable: -#pragma warning (disable : 4100) // unreferenced formal parameter -#pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) ) -#pragma warning (disable : 4244) // possible loss of data on conversions -#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template -#pragma warning (disable : 4512) // assignment operator could not be generated -#pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) ) - -#pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class -#pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class -#endif // LL_MSVC - -#if LL_WINDOWS -#define LL_DLLEXPORT __declspec(dllexport) -#define LL_DLLIMPORT __declspec(dllimport) -#elif LL_LINUX -#define LL_DLLEXPORT __attribute__ ((visibility("default"))) -#define LL_DLLIMPORT -#else -#define LL_DLLEXPORT -#define LL_DLLIMPORT -#endif // LL_WINDOWS - -/* -#ifdef llcommon_EXPORTS -// Compiling llcommon (shared) -#define LL_COMMON_API LL_DLLEXPORT -#else // llcommon_EXPORTS -// Using llcommon (shared) -#define LL_COMMON_API LL_DLLIMPORT -#endif // llcommon_EXPORTS -*/ - -//I hate DLLs -SG -#define LL_COMMON_API - -#endif // not LL_LINDEN_PREPROCESSOR_H +/** + * @file llpreprocessor.h + * @brief This file should be included in all Linden Lab files and + * should only contain special preprocessor directives + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLPREPROCESSOR_H +#define LLPREPROCESSOR_H + +// Figure out endianness of platform +#ifdef LL_LINUX +#define __ENABLE_WSTRING +#include +#endif // LL_LINUX + +#if LL_SOLARIS +# ifdef __sparc // Since we're talking Solaris 10 and up, only 64 bit is supported. +# define LL_BIG_ENDIAN 1 +# define LL_SOLARIS_ALIGNED_CPU 1 // used to designate issues where SPARC alignment is addressed +# define LL_SOLARIS_NON_MESA_GL 1 // The SPARC GL does not provide a MESA-based GL API +# endif +# include // ensure we know which end is up +#endif // LL_SOLARIS + +#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386))) +#define LL_LITTLE_ENDIAN 1 +#else +#define LL_BIG_ENDIAN 1 +#endif + + +// Per-compiler switches + +#ifdef __GNUC__ +#define LL_FORCE_INLINE inline __attribute__((always_inline)) +#else +#define LL_FORCE_INLINE __forceinline +#endif + +// Mark-up expressions with branch prediction hints. Do NOT use +// this with reckless abandon - it's an obfuscating micro-optimization +// outside of inner loops or other places where you are OVERWHELMINGLY +// sure which way an expression almost-always evaluates. +#if __GNUC__ >= 3 +# define LL_LIKELY(EXPR) __builtin_expect (!!(EXPR), true) +# define LL_UNLIKELY(EXPR) __builtin_expect (!!(EXPR), false) +#else +# define LL_LIKELY(EXPR) (EXPR) +# define LL_UNLIKELY(EXPR) (EXPR) +#endif + + +// Figure out differences between compilers +#if defined(__GNUC__) + #define GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) + #ifndef LL_GNUC + #define LL_GNUC 1 + #endif +#elif defined(__MSVC_VER__) || defined(_MSC_VER) + #ifndef LL_MSVC + #define LL_MSVC 1 + #endif + #if _MSC_VER < 1400 + #define LL_MSVC7 //Visual C++ 2003 or earlier + #endif +#endif + +// Deal with minor differences on Unixy OSes. +#if LL_DARWIN || LL_LINUX + // Different name, same functionality. + #define stricmp strcasecmp + #define strnicmp strncasecmp + + // Not sure why this is different, but... + #ifndef MAX_PATH + #define MAX_PATH PATH_MAX + #endif // not MAX_PATH + +#endif + +// Static linking with apr on windows needs to be declared. +#ifdef LL_WINDOWS +#ifndef APR_DECLARE_STATIC +#define APR_DECLARE_STATIC // For APR on Windows +#endif +#ifndef APU_DECLARE_STATIC +#define APU_DECLARE_STATIC // For APR util on Windows +#endif +#endif + +// Deal with the differeneces on Windows +#if defined(LL_WINDOWS) +#define BOOST_REGEX_NO_LIB 1 +#define CURL_STATICLIB 1 +#ifndef XML_STATIC +#define XML_STATIC +#endif +#endif // LL_WINDOWS + +// Deal with VC6 problems +#if LL_MSVC +#pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4. +#pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4. +#pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4. +//#pragma warning( 3 : 4018 ) // "signed/unsigned mismatch" Treat this as level 3, not level 4. +#pragma warning( 3 : 4263 ) // 'function' : member function does not override any base class virtual member function +#pragma warning( 3 : 4264 ) // "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden" +#pragma warning( 3 : 4265 ) // "class has virtual functions, but destructor is not virtual" +#pragma warning( 3 : 4266 ) // 'function' : no override available for virtual member function from base 'type'; function is hidden +#pragma warning (disable : 4180) // qualifier applied to function type has no meaning; ignored +#pragma warning( disable : 4284 ) // silly MS warning deep inside their include file +#pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation. +#pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning) +#pragma warning( disable : 4996 ) // warning: deprecated + +// Linker optimization with "extern template" generates these warnings +#pragma warning( disable : 4231 ) // nonstandard extension used : 'extern' before template explicit instantiation +#pragma warning( disable : 4506 ) // no definition for inline function + +// level 4 warnings that we need to disable: +#pragma warning (disable : 4100) // unreferenced formal parameter +#pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) ) +#pragma warning (disable : 4244) // possible loss of data on conversions +#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template +#pragma warning (disable : 4512) // assignment operator could not be generated +#pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) ) + +#pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class +#pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class +#endif // LL_MSVC + +#if LL_WINDOWS +#define LL_DLLEXPORT __declspec(dllexport) +#define LL_DLLIMPORT __declspec(dllimport) +#elif LL_LINUX +#define LL_DLLEXPORT __attribute__ ((visibility("default"))) +#define LL_DLLIMPORT +#else +#define LL_DLLEXPORT +#define LL_DLLIMPORT +#endif // LL_WINDOWS + +/* +#ifdef llcommon_EXPORTS +// Compiling llcommon (shared) +#define LL_COMMON_API LL_DLLEXPORT +#else // llcommon_EXPORTS +// Using llcommon (shared) +#define LL_COMMON_API LL_DLLIMPORT +#endif // llcommon_EXPORTS +*/ + +//I hate DLLs -SG +#define LL_COMMON_API + +#endif // not LL_LINDEN_PREPROCESSOR_H diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 7f5c065ea..a3e77b43b 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -1,47 +1,47 @@ -/** - * @file llversionviewer.h - * @brief - * - * $LicenseInfo:firstyear=2002&license=viewergpl$ - * - * Copyright (c) 2002-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLVERSIONVIEWER_H -#define LL_LLVERSIONVIEWER_H - -const S32 LL_VERSION_MAJOR = 1; -const S32 LL_VERSION_MINOR = 5; -const S32 LL_VERSION_PATCH = 6; -const S32 LL_VERSION_BUILD = 1; - -const char * const LL_CHANNEL = "Singularity"; - -#if LL_DARWIN -const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.snowglobe.viewer"; -#endif - -#endif +/** + * @file llversionviewer.h + * @brief + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLVERSIONVIEWER_H +#define LL_LLVERSIONVIEWER_H + +const S32 LL_VERSION_MAJOR = 1; +const S32 LL_VERSION_MINOR = 5; +const S32 LL_VERSION_PATCH = 6; +const S32 LL_VERSION_BUILD = 1; + +const char * const LL_CHANNEL = "Singularity"; + +#if LL_DARWIN +const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.snowglobe.viewer"; +#endif + +#endif diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index cc9a8c7d6..618c8011d 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -334,14 +334,14 @@ void LLAvatarNameCache::processName(const LLUUID& agent_id, { if (add_to_cache) { - // sCache[agent_id] = av_name; - // [SL:KB] - Patch: Agent-DisplayNames | Checked: 2010-12-28 (Catznip-2.4.0h) | Added: Catznip-2.4.0h - // Don't replace existing entries with dummies - cache_t::iterator itName = (av_name.mIsDummy) ? sCache.find(agent_id) : sCache.end(); - if (sCache.end() != itName) - itName->second.mExpires = av_name.mExpires; - else - sCache[agent_id] = av_name; + // sCache[agent_id] = av_name; + // [SL:KB] - Patch: Agent-DisplayNames | Checked: 2010-12-28 (Catznip-2.4.0h) | Added: Catznip-2.4.0h + // Don't replace existing entries with dummies + cache_t::iterator itName = (av_name.mIsDummy) ? sCache.find(agent_id) : sCache.end(); + if (sCache.end() != itName) + itName->second.mExpires = av_name.mExpires; + else + sCache[agent_id] = av_name; // [/SL:KB] } diff --git a/indra/llmessage/llnetcanary.cpp b/indra/llmessage/llnetcanary.cpp index 9b2258ed2..a714c60f2 100644 --- a/indra/llmessage/llnetcanary.cpp +++ b/indra/llmessage/llnetcanary.cpp @@ -1,149 +1,149 @@ -// -#include "llnetcanary.h" +// +#include "llnetcanary.h" #include "linden_common.h" -#include "llerror.h" -#ifdef _MSC_VER -#include -static WSADATA trapWSAData; -#define socklen_t int -#else -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if LL_DARWIN -#ifndef _SOCKLEN_T -#define _SOCKLEN_T -typedef int socklen_t; -#endif -#endif - -extern int errno; //error number -#define SOCKADDR_IN struct sockaddr_in -#define SOCKADDR struct sockaddr -#define SOCKET int -#define INVALID_SOCKET -1 -#define SOCKET_ERROR -1 -#define SD_BOTH 2 -#define closesocket close -#endif -SOCKADDR_IN trapLclAddr; -LLNetCanary::LLNetCanary(int requested_port) -{ - mGood = TRUE; - int nRet; - int hSocket; - int snd_size = 400000; - int rec_size = 400000; - int buff_size = 4; -#ifdef _MSC_VER - if(WSAStartup(0x0202, &trapWSAData)) - { - S32 err = WSAGetLastError(); - WSACleanup(); - llwarns << "WSAStartup() failure: " << err << llendl; - mGood = FALSE; - return; - } -#endif - // Get a datagram socket - hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0); - if (hSocket == INVALID_SOCKET) - { -#ifdef _MSC_VER - S32 err = WSAGetLastError(); - WSACleanup(); -#else - S32 err = errno; -#endif - mGood = FALSE; - llwarns << "socket() failure: " << err << llendl; - return; - } - - // Name the socket (assign the local port number to receive on) - trapLclAddr.sin_family = AF_INET; - trapLclAddr.sin_addr.s_addr = htonl(INADDR_ANY); - trapLclAddr.sin_port = htons(requested_port); - //llinfos << "bind() port: " << requested_port << llendl; - nRet = bind(hSocket, (struct sockaddr*) &trapLclAddr, sizeof(trapLclAddr)); - if (nRet == SOCKET_ERROR) - { -#ifdef _MSC_VER - S32 err = WSAGetLastError(); - WSACleanup(); -#else - S32 err = errno; -#endif - mGood = FALSE; - llwarns << "bind() failed: " << err << llendl; - return; - } - - // Find out what address we got - SOCKADDR_IN socket_address; - socklen_t socket_address_size = sizeof(socket_address); - getsockname(hSocket, (SOCKADDR*) &socket_address, &socket_address_size); - mPort = ntohs(socket_address.sin_port); - //llinfos << "got port " << mPort << llendl; - - // Set socket to be non-blocking -#ifdef _MSC_VER - unsigned long argp = 1; - nRet = ioctlsocket (hSocket, FIONBIO, &argp); -#else - nRet = fcntl(hSocket, F_SETFL, O_NONBLOCK); -#endif - if (nRet == SOCKET_ERROR) - { -#ifdef _MSC_VER - S32 err = WSAGetLastError(); - WSACleanup(); -#else - S32 err = errno; -#endif - mGood = FALSE; - llwarns << "Failed to set socket non-blocking, Err: " << err << llendl; - return; - } - - // set a large receive buffer - nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size); - if (nRet) - { - llinfos << "Can't set receive buffer size!" << llendl; - } - // set a large send buffer - nRet = setsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, buff_size); - if (nRet) - { - llinfos << "Can't set send buffer size!" << llendl; - } - //getsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, &buff_size); - //getsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, &buff_size); - //LL_DEBUGS("AppInit") << "startNet - receive buffer size : " << rec_size << LL_ENDL; - //LL_DEBUGS("AppInit") << "startNet - send buffer size : " << snd_size << LL_ENDL; - - mSocket = hSocket; -} -LLNetCanary::~LLNetCanary() -{ - if(mGood) - { - if(mSocket) - { - shutdown(mSocket, SD_BOTH); - closesocket(mSocket); - } -#ifdef _MSC_VER - WSACleanup(); -#endif - } -} -// +#include "llerror.h" +#ifdef _MSC_VER +#include +static WSADATA trapWSAData; +#define socklen_t int +#else +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if LL_DARWIN +#ifndef _SOCKLEN_T +#define _SOCKLEN_T +typedef int socklen_t; +#endif +#endif + +extern int errno; //error number +#define SOCKADDR_IN struct sockaddr_in +#define SOCKADDR struct sockaddr +#define SOCKET int +#define INVALID_SOCKET -1 +#define SOCKET_ERROR -1 +#define SD_BOTH 2 +#define closesocket close +#endif +SOCKADDR_IN trapLclAddr; +LLNetCanary::LLNetCanary(int requested_port) +{ + mGood = TRUE; + int nRet; + int hSocket; + int snd_size = 400000; + int rec_size = 400000; + int buff_size = 4; +#ifdef _MSC_VER + if(WSAStartup(0x0202, &trapWSAData)) + { + S32 err = WSAGetLastError(); + WSACleanup(); + llwarns << "WSAStartup() failure: " << err << llendl; + mGood = FALSE; + return; + } +#endif + // Get a datagram socket + hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0); + if (hSocket == INVALID_SOCKET) + { +#ifdef _MSC_VER + S32 err = WSAGetLastError(); + WSACleanup(); +#else + S32 err = errno; +#endif + mGood = FALSE; + llwarns << "socket() failure: " << err << llendl; + return; + } + + // Name the socket (assign the local port number to receive on) + trapLclAddr.sin_family = AF_INET; + trapLclAddr.sin_addr.s_addr = htonl(INADDR_ANY); + trapLclAddr.sin_port = htons(requested_port); + //llinfos << "bind() port: " << requested_port << llendl; + nRet = bind(hSocket, (struct sockaddr*) &trapLclAddr, sizeof(trapLclAddr)); + if (nRet == SOCKET_ERROR) + { +#ifdef _MSC_VER + S32 err = WSAGetLastError(); + WSACleanup(); +#else + S32 err = errno; +#endif + mGood = FALSE; + llwarns << "bind() failed: " << err << llendl; + return; + } + + // Find out what address we got + SOCKADDR_IN socket_address; + socklen_t socket_address_size = sizeof(socket_address); + getsockname(hSocket, (SOCKADDR*) &socket_address, &socket_address_size); + mPort = ntohs(socket_address.sin_port); + //llinfos << "got port " << mPort << llendl; + + // Set socket to be non-blocking +#ifdef _MSC_VER + unsigned long argp = 1; + nRet = ioctlsocket (hSocket, FIONBIO, &argp); +#else + nRet = fcntl(hSocket, F_SETFL, O_NONBLOCK); +#endif + if (nRet == SOCKET_ERROR) + { +#ifdef _MSC_VER + S32 err = WSAGetLastError(); + WSACleanup(); +#else + S32 err = errno; +#endif + mGood = FALSE; + llwarns << "Failed to set socket non-blocking, Err: " << err << llendl; + return; + } + + // set a large receive buffer + nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size); + if (nRet) + { + llinfos << "Can't set receive buffer size!" << llendl; + } + // set a large send buffer + nRet = setsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, buff_size); + if (nRet) + { + llinfos << "Can't set send buffer size!" << llendl; + } + //getsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, &buff_size); + //getsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, &buff_size); + //LL_DEBUGS("AppInit") << "startNet - receive buffer size : " << rec_size << LL_ENDL; + //LL_DEBUGS("AppInit") << "startNet - send buffer size : " << snd_size << LL_ENDL; + + mSocket = hSocket; +} +LLNetCanary::~LLNetCanary() +{ + if(mGood) + { + if(mSocket) + { + shutdown(mSocket, SD_BOTH); + closesocket(mSocket); + } +#ifdef _MSC_VER + WSACleanup(); +#endif + } +} +// diff --git a/indra/llmessage/llnetcanary.h b/indra/llmessage/llnetcanary.h index a5a5d6b4e..0061b5101 100644 --- a/indra/llmessage/llnetcanary.h +++ b/indra/llmessage/llnetcanary.h @@ -1,25 +1,25 @@ -// -#ifndef LL_LLNETCANARY_H -#define LL_LLNETCANARY_H -#include "stdtypes.h" -#include -class LLNetCanary -{ -public: - LLNetCanary(int requested_port); - ~LLNetCanary(); - BOOL mGood; - S32 mSocket; - U16 mPort; - U8 mBuffer[8192]; - typedef struct - { - F64 time; // LLTimer::getElapsedSeconds(); - //U8 message[4]; - U32 message; - U32 points; - std::string name; - } entry; -}; -#endif -// +// +#ifndef LL_LLNETCANARY_H +#define LL_LLNETCANARY_H +#include "stdtypes.h" +#include +class LLNetCanary +{ +public: + LLNetCanary(int requested_port); + ~LLNetCanary(); + BOOL mGood; + S32 mSocket; + U16 mPort; + U8 mBuffer[8192]; + typedef struct + { + F64 time; // LLTimer::getElapsedSeconds(); + //U8 message[4]; + U32 message; + U32 points; + std::string name; + } entry; +}; +#endif +// diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt old mode 100755 new mode 100644 index fd555d394..5d0a57dfb --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -1,95 +1,95 @@ -project(SLPlugin) - -include(00-Common) -include(LLCommon) -include(LLPlugin) -include(Linking) -include(PluginAPI) -include(LLMessage) -include(GooglePerfTools) - -include_directories( - ${LLPLUGIN_INCLUDE_DIRS} - ${LLMESSAGE_INCLUDE_DIRS} - ${LLCOMMON_INCLUDE_DIRS} -) - -if (DARWIN) - include(CMakeFindFrameworks) - find_library(CARBON_LIBRARY Carbon) - find_library(COCOA_LIBRARY Cocoa) -endif (DARWIN) - - -### SLPlugin - -set(SLPlugin_SOURCE_FILES - slplugin.cpp - ) - -if (DARWIN) - list(APPEND SLPlugin_SOURCE_FILES - slplugin-objc.mm - ) - list(APPEND SLPlugin_HEADER_FILES - slplugin-objc.h - ) -endif (DARWIN) - -set_source_files_properties(${SLPlugin_HEADER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -if (SLPlugin_HEADER_FILES) - list(APPEND SLPlugin_SOURCE_FILES ${SLPlugin_HEADER_FILES}) -endif (SLPlugin_HEADER_FILES) - -add_executable(SLPlugin - WIN32 - MACOSX_BUNDLE - ${SLPlugin_SOURCE_FILES} -) - -set_target_properties(SLPlugin - PROPERTIES - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/slplugin_info.plist - ) - -target_link_libraries(SLPlugin - ${GOOGLE_PERFTOOLS_LIBRARIES} - ${LLPLUGIN_LIBRARIES} - ${LLMESSAGE_LIBRARIES} - ${LLCOMMON_LIBRARIES} - ${PLUGIN_API_WINDOWS_LIBRARIES} -) - -add_dependencies(SLPlugin - ${LLPLUGIN_LIBRARIES} - ${LLMESSAGE_LIBRARIES} - ${LLCOMMON_LIBRARIES} -) - -if (DARWIN) - # Mac version needs to link against Carbon - target_link_libraries(SLPlugin ${CARBON_LIBRARY} ${COCOA_LIBRARY}) - # Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later) - add_custom_command( - TARGET SLPlugin POST_BUILD - COMMAND mkdir - ARGS - -p - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SLPlugin.app/Contents/Resources - ) -endif (DARWIN) - -if (LINUX) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lrt") -endif (LINUX) - -if (WINDOWS) - set_target_properties(SLPlugin - PROPERTIES - LINK_FLAGS "${GOOGLE_PERFTOOLS_LINKER_FLAGS}" - ) -endif (WINDOWS) - -#ll_deploy_sharedlibs_command(SLPlugin) +project(SLPlugin) + +include(00-Common) +include(LLCommon) +include(LLPlugin) +include(Linking) +include(PluginAPI) +include(LLMessage) +include(GooglePerfTools) + +include_directories( + ${LLPLUGIN_INCLUDE_DIRS} + ${LLMESSAGE_INCLUDE_DIRS} + ${LLCOMMON_INCLUDE_DIRS} +) + +if (DARWIN) + include(CMakeFindFrameworks) + find_library(CARBON_LIBRARY Carbon) + find_library(COCOA_LIBRARY Cocoa) +endif (DARWIN) + + +### SLPlugin + +set(SLPlugin_SOURCE_FILES + slplugin.cpp + ) + +if (DARWIN) + list(APPEND SLPlugin_SOURCE_FILES + slplugin-objc.mm + ) + list(APPEND SLPlugin_HEADER_FILES + slplugin-objc.h + ) +endif (DARWIN) + +set_source_files_properties(${SLPlugin_HEADER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +if (SLPlugin_HEADER_FILES) + list(APPEND SLPlugin_SOURCE_FILES ${SLPlugin_HEADER_FILES}) +endif (SLPlugin_HEADER_FILES) + +add_executable(SLPlugin + WIN32 + MACOSX_BUNDLE + ${SLPlugin_SOURCE_FILES} +) + +set_target_properties(SLPlugin + PROPERTIES + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/slplugin_info.plist + ) + +target_link_libraries(SLPlugin + ${GOOGLE_PERFTOOLS_LIBRARIES} + ${LLPLUGIN_LIBRARIES} + ${LLMESSAGE_LIBRARIES} + ${LLCOMMON_LIBRARIES} + ${PLUGIN_API_WINDOWS_LIBRARIES} +) + +add_dependencies(SLPlugin + ${LLPLUGIN_LIBRARIES} + ${LLMESSAGE_LIBRARIES} + ${LLCOMMON_LIBRARIES} +) + +if (DARWIN) + # Mac version needs to link against Carbon + target_link_libraries(SLPlugin ${CARBON_LIBRARY} ${COCOA_LIBRARY}) + # Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later) + add_custom_command( + TARGET SLPlugin POST_BUILD + COMMAND mkdir + ARGS + -p + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SLPlugin.app/Contents/Resources + ) +endif (DARWIN) + +if (LINUX) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lrt") +endif (LINUX) + +if (WINDOWS) + set_target_properties(SLPlugin + PROPERTIES + LINK_FLAGS "${GOOGLE_PERFTOOLS_LINKER_FLAGS}" + ) +endif (WINDOWS) + +#ll_deploy_sharedlibs_command(SLPlugin) diff --git a/indra/llprimitive/llmaterialtable.cpp b/indra/llprimitive/llmaterialtable.cpp index 1772a8485..cb7154771 100644 --- a/indra/llprimitive/llmaterialtable.cpp +++ b/indra/llprimitive/llmaterialtable.cpp @@ -1,744 +1,744 @@ -/** - * @file llmaterialtable.cpp - * @brief Table of material names and IDs for viewer - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-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 "linden_common.h" - -#include "llmaterialtable.h" -#include "llstl.h" -#include "material_codes.h" -#include "sound_ids.h" -#include "imageids.h" - -LLMaterialTable LLMaterialTable::basic(1); - -/* - Old Havok 1 constants - -// these are the approximately correct friction values for various materials -// however Havok1's friction dynamics are not very correct, so the effective -// friction coefficients that result from these numbers are approximately -// 25-50% too low, more incorrect for the lower values. -F32 const LLMaterialTable::FRICTION_MIN = 0.2f; -F32 const LLMaterialTable::FRICTION_GLASS = 0.2f; // borosilicate glass -F32 const LLMaterialTable::FRICTION_LIGHT = 0.2f; // -F32 const LLMaterialTable::FRICTION_METAL = 0.3f; // steel -F32 const LLMaterialTable::FRICTION_PLASTIC = 0.4f; // HDPE -F32 const LLMaterialTable::FRICTION_WOOD = 0.6f; // southern pine -F32 const LLMaterialTable::FRICTION_FLESH = 0.60f; // saltwater -F32 const LLMaterialTable::FRICTION_LAND = 0.78f; // dirt -F32 const LLMaterialTable::FRICTION_STONE = 0.8f; // concrete -F32 const LLMaterialTable::FRICTION_RUBBER = 0.9f; // -F32 const LLMaterialTable::FRICTION_MAX = 0.95f; // -*/ - -// #if LL_CURRENT_HAVOK_VERSION == LL_HAVOK_VERSION_460 -// Havok4 has more correct friction dynamics, however here we have to use -// the "incorrect" equivalents for the legacy Havok1 behavior -F32 const LLMaterialTable::FRICTION_MIN = 0.15f; -F32 const LLMaterialTable::FRICTION_GLASS = 0.13f; // borosilicate glass -F32 const LLMaterialTable::FRICTION_LIGHT = 0.14f; // -F32 const LLMaterialTable::FRICTION_METAL = 0.22f; // steel -F32 const LLMaterialTable::FRICTION_PLASTIC = 0.3f; // HDPE -F32 const LLMaterialTable::FRICTION_WOOD = 0.44f; // southern pine -F32 const LLMaterialTable::FRICTION_FLESH = 0.46f; // saltwater -F32 const LLMaterialTable::FRICTION_LAND = 0.58f; // dirt -F32 const LLMaterialTable::FRICTION_STONE = 0.6f; // concrete -F32 const LLMaterialTable::FRICTION_RUBBER = 0.67f; // -F32 const LLMaterialTable::FRICTION_MAX = 0.71f; // -// #endif - -F32 const LLMaterialTable::RESTITUTION_MIN = 0.02f; -F32 const LLMaterialTable::RESTITUTION_LAND = LLMaterialTable::RESTITUTION_MIN; -F32 const LLMaterialTable::RESTITUTION_FLESH = 0.2f; // saltwater -F32 const LLMaterialTable::RESTITUTION_STONE = 0.4f; // concrete -F32 const LLMaterialTable::RESTITUTION_METAL = 0.4f; // steel -F32 const LLMaterialTable::RESTITUTION_WOOD = 0.5f; // southern pine -F32 const LLMaterialTable::RESTITUTION_GLASS = 0.7f; // borosilicate glass -F32 const LLMaterialTable::RESTITUTION_PLASTIC = 0.7f; // HDPE -F32 const LLMaterialTable::RESTITUTION_LIGHT = 0.7f; // -F32 const LLMaterialTable::RESTITUTION_RUBBER = 0.9f; // -F32 const LLMaterialTable::RESTITUTION_MAX = 0.95f; - -F32 const LLMaterialTable::DEFAULT_FRICTION = 0.5f; -F32 const LLMaterialTable::DEFAULT_RESTITUTION = 0.4f; - -LLMaterialTable::LLMaterialTable() - : mCollisionSoundMatrix(NULL), - mSlidingSoundMatrix(NULL), - mRollingSoundMatrix(NULL) -{ -} - -LLMaterialTable::LLMaterialTable(U8 isBasic) -{ - initBasicTable(); -} - -LLMaterialTable::~LLMaterialTable() -{ - if (mCollisionSoundMatrix) - { - delete [] mCollisionSoundMatrix; - mCollisionSoundMatrix = NULL; - } - - if (mSlidingSoundMatrix) - { - delete [] mSlidingSoundMatrix; - mSlidingSoundMatrix = NULL; - } - - if (mRollingSoundMatrix) - { - delete [] mRollingSoundMatrix; - mRollingSoundMatrix = NULL; - } - - for_each(mMaterialInfoList.begin(), mMaterialInfoList.end(), DeletePointer()); - mMaterialInfoList.clear(); -} - -void LLMaterialTable::initBasicTable() -{ - // *TODO: Translate - add(LL_MCODE_STONE,std::string("Stone"), LL_DEFAULT_STONE_UUID); - add(LL_MCODE_METAL,std::string("Metal"), LL_DEFAULT_METAL_UUID); - add(LL_MCODE_GLASS,std::string("Glass"), LL_DEFAULT_GLASS_UUID); - add(LL_MCODE_WOOD,std::string("Wood"), LL_DEFAULT_WOOD_UUID); - add(LL_MCODE_FLESH,std::string("Flesh"), LL_DEFAULT_FLESH_UUID); - add(LL_MCODE_PLASTIC,std::string("Plastic"), LL_DEFAULT_PLASTIC_UUID); - add(LL_MCODE_RUBBER,std::string("Rubber"), LL_DEFAULT_RUBBER_UUID); - add(LL_MCODE_LIGHT,std::string("Light"), LL_DEFAULT_LIGHT_UUID); - - // specify densities for these materials. . . - // these were taken from http://www.mcelwee.net/html/densities_of_various_materials.html - - addDensity(LL_MCODE_STONE,30.f); - addDensity(LL_MCODE_METAL,50.f); - addDensity(LL_MCODE_GLASS,20.f); - addDensity(LL_MCODE_WOOD,10.f); - addDensity(LL_MCODE_FLESH,10.f); - addDensity(LL_MCODE_PLASTIC,5.f); - addDensity(LL_MCODE_RUBBER,0.5f); // - addDensity(LL_MCODE_LIGHT,20.f); // - - // add damage and energy values - addDamageAndEnergy(LL_MCODE_STONE, 1.f, 1.f, 1.f); // concrete - addDamageAndEnergy(LL_MCODE_METAL, 1.f, 1.f, 1.f); // steel - addDamageAndEnergy(LL_MCODE_GLASS, 1.f, 1.f, 1.f); // borosilicate glass - addDamageAndEnergy(LL_MCODE_WOOD, 1.f, 1.f, 1.f); // southern pine - addDamageAndEnergy(LL_MCODE_FLESH, 1.f, 1.f, 1.f); // saltwater - addDamageAndEnergy(LL_MCODE_PLASTIC, 1.f, 1.f, 1.f); // HDPE - addDamageAndEnergy(LL_MCODE_RUBBER, 1.f, 1.f, 1.f); // - addDamageAndEnergy(LL_MCODE_LIGHT, 1.f, 1.f, 1.f); // - - addFriction(LL_MCODE_STONE,0.8f); // concrete - addFriction(LL_MCODE_METAL,0.3f); // steel - addFriction(LL_MCODE_GLASS,0.2f); // borosilicate glass - addFriction(LL_MCODE_WOOD,0.6f); // southern pine - addFriction(LL_MCODE_FLESH,0.9f); // saltwater - addFriction(LL_MCODE_PLASTIC,0.4f); // HDPE - addFriction(LL_MCODE_RUBBER,0.9f); // - addFriction(LL_MCODE_LIGHT,0.2f); // - - addRestitution(LL_MCODE_STONE,0.4f); // concrete - addRestitution(LL_MCODE_METAL,0.4f); // steel - addRestitution(LL_MCODE_GLASS,0.7f); // borosilicate glass - addRestitution(LL_MCODE_WOOD,0.5f); // southern pine - addRestitution(LL_MCODE_FLESH,0.3f); // saltwater - addRestitution(LL_MCODE_PLASTIC,0.7f); // HDPE - addRestitution(LL_MCODE_RUBBER,0.9f); // - addRestitution(LL_MCODE_LIGHT,0.7f); // - - addShatterSound(LL_MCODE_STONE,LLUUID("ea296329-0f09-4993-af1b-e6784bab1dc9")); - addShatterSound(LL_MCODE_METAL,LLUUID("d1375446-1c4d-470b-9135-30132433b678")); - addShatterSound(LL_MCODE_GLASS,LLUUID("85cda060-b393-48e6-81c8-2cfdfb275351")); - addShatterSound(LL_MCODE_WOOD,LLUUID("6f00669f-15e0-4793-a63e-c03f62fee43a")); - addShatterSound(LL_MCODE_FLESH,LLUUID("2d8c6f51-149e-4e23-8413-93a379b42b67")); - addShatterSound(LL_MCODE_PLASTIC,LLUUID("d55c7f3c-e1c3-4ddc-9eff-9ef805d9190e")); - addShatterSound(LL_MCODE_RUBBER,LLUUID("212b6d1e-8d9c-4986-b3aa-f3c6df8d987d")); - addShatterSound(LL_MCODE_LIGHT,LLUUID("d55c7f3c-e1c3-4ddc-9eff-9ef805d9190e")); - - // CollisionSounds - mCollisionSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END]; - if (mCollisionSoundMatrix) - { - addCollisionSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_STONE_STONE); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_STONE_METAL); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_STONE_GLASS); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_STONE_WOOD); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_STONE_FLESH); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_STONE_PLASTIC); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_STONE_RUBBER); - addCollisionSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_STONE_PLASTIC); - - addCollisionSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_METAL_METAL); - addCollisionSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_METAL_GLASS); - addCollisionSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_METAL_WOOD); - addCollisionSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_METAL_FLESH); - addCollisionSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_METAL_PLASTIC); - addCollisionSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_METAL_PLASTIC); - addCollisionSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_METAL_RUBBER); - - addCollisionSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_GLASS_GLASS); - addCollisionSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_GLASS_WOOD); - addCollisionSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_GLASS_FLESH); - addCollisionSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_GLASS_PLASTIC); - addCollisionSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_GLASS_RUBBER); - addCollisionSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_GLASS_PLASTIC); - - addCollisionSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_WOOD_WOOD); - addCollisionSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_WOOD_FLESH); - addCollisionSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_WOOD_PLASTIC); - addCollisionSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_WOOD_RUBBER); - addCollisionSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_WOOD_PLASTIC); - - addCollisionSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_FLESH_FLESH); - addCollisionSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_FLESH_PLASTIC); - addCollisionSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_FLESH_RUBBER); - addCollisionSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_FLESH_PLASTIC); - - addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_RUBBER_RUBBER); - addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_RUBBER_PLASTIC); - addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_RUBBER_PLASTIC); - - addCollisionSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_PLASTIC_PLASTIC); - addCollisionSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_PLASTIC_PLASTIC); - - addCollisionSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_PLASTIC_PLASTIC); - } - - // Sliding Sounds - mSlidingSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END]; - if (mSlidingSoundMatrix) - { - addSlidingSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_SLIDE_STONE_STONE); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_SLIDE_STONE_WOOD); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_SLIDE_STONE_PLASTIC); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_SLIDE_STONE_RUBBER); - addSlidingSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_SLIDE_STONE_PLASTIC); - - addSlidingSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_SLIDE_METAL_METAL); - addSlidingSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_SLIDE_METAL_GLASS); - addSlidingSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_SLIDE_METAL_WOOD); - addSlidingSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_SLIDE_METAL_FLESH); - addSlidingSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_SLIDE_METAL_RUBBER); - addSlidingSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - - addSlidingSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - - addSlidingSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_SLIDE_WOOD_WOOD); - addSlidingSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_SLIDE_WOOD_FLESH); - addSlidingSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_SLIDE_WOOD_PLASTIC); - addSlidingSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_SLIDE_WOOD_PLASTIC); - - addSlidingSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_SLIDE_FLESH_FLESH); - addSlidingSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - - addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_SLIDE_RUBBER_PLASTIC); - addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_SLIDE_RUBBER_PLASTIC); - - addSlidingSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); - addSlidingSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - - addSlidingSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - } - - // Rolling Sounds - mRollingSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END]; - if (mRollingSoundMatrix) - { - addRollingSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_ROLL_STONE_STONE); - addRollingSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_ROLL_STONE_WOOD); - addRollingSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_ROLL_STONE_PLASTIC); - addRollingSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_ROLL_STONE_PLASTIC); - - addRollingSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_ROLL_METAL_GLASS); - addRollingSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_ROLL_METAL_WOOD); - addRollingSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_ROLL_METAL_WOOD); - addRollingSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_ROLL_METAL_WOOD); - - addRollingSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_ROLL_GLASS_WOOD); - addRollingSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - - addRollingSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_ROLL_WOOD_WOOD); - addRollingSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_ROLL_WOOD_FLESH); - addRollingSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_ROLL_WOOD_PLASTIC); - addRollingSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_ROLL_WOOD_PLASTIC); - - addRollingSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_ROLL_FLESH_PLASTIC); - addRollingSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_ROLL_FLESH_PLASTIC); - - addRollingSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); - addRollingSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); - - addRollingSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_ROLL_PLASTIC_PLASTIC); - addRollingSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_ROLL_PLASTIC_PLASTIC); - - addRollingSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_ROLL_PLASTIC_PLASTIC); - } -} - -BOOL LLMaterialTable::add(U8 mcode, const std::string& name, const LLUUID &uuid) -{ - LLMaterialInfo *infop; - - infop = new LLMaterialInfo(mcode,name,uuid); - if (!infop) return FALSE; - - // Add at the end so the order in menus matches the order in this - // file. JNC 11.30.01 - mMaterialInfoList.push_back(infop); - - return TRUE; -} - -BOOL LLMaterialTable::addCollisionSound(U8 mcode, U8 mcode2, const LLUUID &uuid) -{ - if (mCollisionSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) - { - mCollisionSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid; - if (mcode != mcode2) - { - mCollisionSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid; - } - } - return TRUE; -} - -BOOL LLMaterialTable::addSlidingSound(U8 mcode, U8 mcode2, const LLUUID &uuid) -{ - if (mSlidingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) - { - mSlidingSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid; - if (mcode != mcode2) - { - mSlidingSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid; - } - } - return TRUE; -} - -BOOL LLMaterialTable::addRollingSound(U8 mcode, U8 mcode2, const LLUUID &uuid) -{ - if (mRollingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) - { - mRollingSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid; - if (mcode != mcode2) - { - mRollingSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid; - } - } - return TRUE; -} - -BOOL LLMaterialTable::addShatterSound(U8 mcode, const LLUUID &uuid) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - infop->mShatterSoundID = uuid; - return TRUE; - } - } - - return FALSE; -} - -BOOL LLMaterialTable::addDensity(U8 mcode, const F32 &density) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - infop->mDensity = density; - return TRUE; - } - } - - return FALSE; -} - -BOOL LLMaterialTable::addRestitution(U8 mcode, const F32 &restitution) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - infop->mRestitution = restitution; - return TRUE; - } - } - - return FALSE; -} - -BOOL LLMaterialTable::addFriction(U8 mcode, const F32 &friction) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - infop->mFriction = friction; - return TRUE; - } - } - - return FALSE; -} - -BOOL LLMaterialTable::addDamageAndEnergy(U8 mcode, const F32 &hp_mod, const F32 &damage_mod, const F32 &ep_mod) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - infop->mHPModifier = hp_mod; - infop->mDamageModifier = damage_mod; - infop->mEPModifier = ep_mod; - return TRUE; - } - } - - return FALSE; -} - -LLUUID LLMaterialTable::getDefaultTextureID(const std::string& name) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (name == infop->mName) - { - return infop->mDefaultTextureID; - } - } - - return LLUUID::null; -} - - -LLUUID LLMaterialTable::getDefaultTextureID(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mDefaultTextureID; - } - } - - return LLUUID::null; -} - - -U8 LLMaterialTable::getMCode(const std::string& name) -{ - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (name == infop->mName) - { - return infop->mMCode; - } - } - - // - if(name.find("MCode") == 0) - { - S32 s; - sscanf(name.c_str(), "MCode%d", &s); - return U8(s); - } - // - return 0; -} - - -std::string LLMaterialTable::getName(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mName; - } - } - - // - //return NULL; - return llformat("MCode%d", mcode); - // -} - - -LLUUID LLMaterialTable::getCollisionSoundUUID(U8 mcode, U8 mcode2) -{ - mcode &= LL_MCODE_MASK; - mcode2 &= LL_MCODE_MASK; - - //llinfos << "code 1: " << ((U32) mcode) << " code 2:" << ((U32) mcode2) << llendl; - if (mCollisionSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) - { - return(mCollisionSoundMatrix[mcode * LL_MCODE_END + mcode2]); - } - else - { - //llinfos << "Null Sound" << llendl; - return(SND_NULL); - } -} - -LLUUID LLMaterialTable::getSlidingSoundUUID(U8 mcode, U8 mcode2) -{ - mcode &= LL_MCODE_MASK; - mcode2 &= LL_MCODE_MASK; - - if (mSlidingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) - { - return(mSlidingSoundMatrix[mcode * LL_MCODE_END + mcode2]); - } - else - { - return(SND_NULL); - } -} - -LLUUID LLMaterialTable::getRollingSoundUUID(U8 mcode, U8 mcode2) -{ - mcode &= LL_MCODE_MASK; - mcode2 &= LL_MCODE_MASK; - - if (mRollingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) - { - return(mRollingSoundMatrix[mcode * LL_MCODE_END + mcode2]); - } - else - { - return(SND_NULL); - } -} - -LLUUID LLMaterialTable::getGroundCollisionSoundUUID(U8 mcode) -{ - // Create material appropriate sounds for collisions with the ground - // For now, simply return a single sound for all materials - return SND_STONE_DIRT_02; -} - -LLUUID LLMaterialTable::getGroundSlidingSoundUUID(U8 mcode) -{ - // Create material-specific sound for sliding on ground - // For now, just return a single sound - return SND_SLIDE_STONE_STONE_01; -} - -LLUUID LLMaterialTable::getGroundRollingSoundUUID(U8 mcode) -{ - // Create material-specific sound for rolling on ground - // For now, just return a single sound - return SND_SLIDE_STONE_STONE_01; -} - -LLUUID LLMaterialTable::getCollisionParticleUUID(U8 mcode, U8 mcode2) -{ - // Returns an appropriate UUID to use as sprite at collision betweeen objects - // For now, just return a single image - return IMG_SHOT; -} - -LLUUID LLMaterialTable::getGroundCollisionParticleUUID(U8 mcode) -{ - // Returns an appropriate - // For now, just return a single sound - return IMG_SMOKE_POOF; -} - - -F32 LLMaterialTable::getDensity(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mDensity; - } - } - - return 0.f; -} - -F32 LLMaterialTable::getRestitution(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mRestitution; - } - } - - return LLMaterialTable::DEFAULT_RESTITUTION; -} - -F32 LLMaterialTable::getFriction(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mFriction; - } - } - - return LLMaterialTable::DEFAULT_FRICTION; -} - -F32 LLMaterialTable::getHPMod(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mHPModifier; - } - } - - return 1.f; -} - -F32 LLMaterialTable::getDamageMod(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mDamageModifier; - } - } - - return 1.f; -} - -F32 LLMaterialTable::getEPMod(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mEPModifier; - } - } - - return 1.f; -} - -LLUUID LLMaterialTable::getShatterSoundUUID(U8 mcode) -{ - mcode &= LL_MCODE_MASK; - for (info_list_t::iterator iter = mMaterialInfoList.begin(); - iter != mMaterialInfoList.end(); ++iter) - { - LLMaterialInfo *infop = *iter; - if (mcode == infop->mMCode) - { - return infop->mShatterSoundID; - } - } - - return SND_NULL; -} +/** + * @file llmaterialtable.cpp + * @brief Table of material names and IDs for viewer + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-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 "linden_common.h" + +#include "llmaterialtable.h" +#include "llstl.h" +#include "material_codes.h" +#include "sound_ids.h" +#include "imageids.h" + +LLMaterialTable LLMaterialTable::basic(1); + +/* + Old Havok 1 constants + +// these are the approximately correct friction values for various materials +// however Havok1's friction dynamics are not very correct, so the effective +// friction coefficients that result from these numbers are approximately +// 25-50% too low, more incorrect for the lower values. +F32 const LLMaterialTable::FRICTION_MIN = 0.2f; +F32 const LLMaterialTable::FRICTION_GLASS = 0.2f; // borosilicate glass +F32 const LLMaterialTable::FRICTION_LIGHT = 0.2f; // +F32 const LLMaterialTable::FRICTION_METAL = 0.3f; // steel +F32 const LLMaterialTable::FRICTION_PLASTIC = 0.4f; // HDPE +F32 const LLMaterialTable::FRICTION_WOOD = 0.6f; // southern pine +F32 const LLMaterialTable::FRICTION_FLESH = 0.60f; // saltwater +F32 const LLMaterialTable::FRICTION_LAND = 0.78f; // dirt +F32 const LLMaterialTable::FRICTION_STONE = 0.8f; // concrete +F32 const LLMaterialTable::FRICTION_RUBBER = 0.9f; // +F32 const LLMaterialTable::FRICTION_MAX = 0.95f; // +*/ + +// #if LL_CURRENT_HAVOK_VERSION == LL_HAVOK_VERSION_460 +// Havok4 has more correct friction dynamics, however here we have to use +// the "incorrect" equivalents for the legacy Havok1 behavior +F32 const LLMaterialTable::FRICTION_MIN = 0.15f; +F32 const LLMaterialTable::FRICTION_GLASS = 0.13f; // borosilicate glass +F32 const LLMaterialTable::FRICTION_LIGHT = 0.14f; // +F32 const LLMaterialTable::FRICTION_METAL = 0.22f; // steel +F32 const LLMaterialTable::FRICTION_PLASTIC = 0.3f; // HDPE +F32 const LLMaterialTable::FRICTION_WOOD = 0.44f; // southern pine +F32 const LLMaterialTable::FRICTION_FLESH = 0.46f; // saltwater +F32 const LLMaterialTable::FRICTION_LAND = 0.58f; // dirt +F32 const LLMaterialTable::FRICTION_STONE = 0.6f; // concrete +F32 const LLMaterialTable::FRICTION_RUBBER = 0.67f; // +F32 const LLMaterialTable::FRICTION_MAX = 0.71f; // +// #endif + +F32 const LLMaterialTable::RESTITUTION_MIN = 0.02f; +F32 const LLMaterialTable::RESTITUTION_LAND = LLMaterialTable::RESTITUTION_MIN; +F32 const LLMaterialTable::RESTITUTION_FLESH = 0.2f; // saltwater +F32 const LLMaterialTable::RESTITUTION_STONE = 0.4f; // concrete +F32 const LLMaterialTable::RESTITUTION_METAL = 0.4f; // steel +F32 const LLMaterialTable::RESTITUTION_WOOD = 0.5f; // southern pine +F32 const LLMaterialTable::RESTITUTION_GLASS = 0.7f; // borosilicate glass +F32 const LLMaterialTable::RESTITUTION_PLASTIC = 0.7f; // HDPE +F32 const LLMaterialTable::RESTITUTION_LIGHT = 0.7f; // +F32 const LLMaterialTable::RESTITUTION_RUBBER = 0.9f; // +F32 const LLMaterialTable::RESTITUTION_MAX = 0.95f; + +F32 const LLMaterialTable::DEFAULT_FRICTION = 0.5f; +F32 const LLMaterialTable::DEFAULT_RESTITUTION = 0.4f; + +LLMaterialTable::LLMaterialTable() + : mCollisionSoundMatrix(NULL), + mSlidingSoundMatrix(NULL), + mRollingSoundMatrix(NULL) +{ +} + +LLMaterialTable::LLMaterialTable(U8 isBasic) +{ + initBasicTable(); +} + +LLMaterialTable::~LLMaterialTable() +{ + if (mCollisionSoundMatrix) + { + delete [] mCollisionSoundMatrix; + mCollisionSoundMatrix = NULL; + } + + if (mSlidingSoundMatrix) + { + delete [] mSlidingSoundMatrix; + mSlidingSoundMatrix = NULL; + } + + if (mRollingSoundMatrix) + { + delete [] mRollingSoundMatrix; + mRollingSoundMatrix = NULL; + } + + for_each(mMaterialInfoList.begin(), mMaterialInfoList.end(), DeletePointer()); + mMaterialInfoList.clear(); +} + +void LLMaterialTable::initBasicTable() +{ + // *TODO: Translate + add(LL_MCODE_STONE,std::string("Stone"), LL_DEFAULT_STONE_UUID); + add(LL_MCODE_METAL,std::string("Metal"), LL_DEFAULT_METAL_UUID); + add(LL_MCODE_GLASS,std::string("Glass"), LL_DEFAULT_GLASS_UUID); + add(LL_MCODE_WOOD,std::string("Wood"), LL_DEFAULT_WOOD_UUID); + add(LL_MCODE_FLESH,std::string("Flesh"), LL_DEFAULT_FLESH_UUID); + add(LL_MCODE_PLASTIC,std::string("Plastic"), LL_DEFAULT_PLASTIC_UUID); + add(LL_MCODE_RUBBER,std::string("Rubber"), LL_DEFAULT_RUBBER_UUID); + add(LL_MCODE_LIGHT,std::string("Light"), LL_DEFAULT_LIGHT_UUID); + + // specify densities for these materials. . . + // these were taken from http://www.mcelwee.net/html/densities_of_various_materials.html + + addDensity(LL_MCODE_STONE,30.f); + addDensity(LL_MCODE_METAL,50.f); + addDensity(LL_MCODE_GLASS,20.f); + addDensity(LL_MCODE_WOOD,10.f); + addDensity(LL_MCODE_FLESH,10.f); + addDensity(LL_MCODE_PLASTIC,5.f); + addDensity(LL_MCODE_RUBBER,0.5f); // + addDensity(LL_MCODE_LIGHT,20.f); // + + // add damage and energy values + addDamageAndEnergy(LL_MCODE_STONE, 1.f, 1.f, 1.f); // concrete + addDamageAndEnergy(LL_MCODE_METAL, 1.f, 1.f, 1.f); // steel + addDamageAndEnergy(LL_MCODE_GLASS, 1.f, 1.f, 1.f); // borosilicate glass + addDamageAndEnergy(LL_MCODE_WOOD, 1.f, 1.f, 1.f); // southern pine + addDamageAndEnergy(LL_MCODE_FLESH, 1.f, 1.f, 1.f); // saltwater + addDamageAndEnergy(LL_MCODE_PLASTIC, 1.f, 1.f, 1.f); // HDPE + addDamageAndEnergy(LL_MCODE_RUBBER, 1.f, 1.f, 1.f); // + addDamageAndEnergy(LL_MCODE_LIGHT, 1.f, 1.f, 1.f); // + + addFriction(LL_MCODE_STONE,0.8f); // concrete + addFriction(LL_MCODE_METAL,0.3f); // steel + addFriction(LL_MCODE_GLASS,0.2f); // borosilicate glass + addFriction(LL_MCODE_WOOD,0.6f); // southern pine + addFriction(LL_MCODE_FLESH,0.9f); // saltwater + addFriction(LL_MCODE_PLASTIC,0.4f); // HDPE + addFriction(LL_MCODE_RUBBER,0.9f); // + addFriction(LL_MCODE_LIGHT,0.2f); // + + addRestitution(LL_MCODE_STONE,0.4f); // concrete + addRestitution(LL_MCODE_METAL,0.4f); // steel + addRestitution(LL_MCODE_GLASS,0.7f); // borosilicate glass + addRestitution(LL_MCODE_WOOD,0.5f); // southern pine + addRestitution(LL_MCODE_FLESH,0.3f); // saltwater + addRestitution(LL_MCODE_PLASTIC,0.7f); // HDPE + addRestitution(LL_MCODE_RUBBER,0.9f); // + addRestitution(LL_MCODE_LIGHT,0.7f); // + + addShatterSound(LL_MCODE_STONE,LLUUID("ea296329-0f09-4993-af1b-e6784bab1dc9")); + addShatterSound(LL_MCODE_METAL,LLUUID("d1375446-1c4d-470b-9135-30132433b678")); + addShatterSound(LL_MCODE_GLASS,LLUUID("85cda060-b393-48e6-81c8-2cfdfb275351")); + addShatterSound(LL_MCODE_WOOD,LLUUID("6f00669f-15e0-4793-a63e-c03f62fee43a")); + addShatterSound(LL_MCODE_FLESH,LLUUID("2d8c6f51-149e-4e23-8413-93a379b42b67")); + addShatterSound(LL_MCODE_PLASTIC,LLUUID("d55c7f3c-e1c3-4ddc-9eff-9ef805d9190e")); + addShatterSound(LL_MCODE_RUBBER,LLUUID("212b6d1e-8d9c-4986-b3aa-f3c6df8d987d")); + addShatterSound(LL_MCODE_LIGHT,LLUUID("d55c7f3c-e1c3-4ddc-9eff-9ef805d9190e")); + + // CollisionSounds + mCollisionSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END]; + if (mCollisionSoundMatrix) + { + addCollisionSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_STONE_STONE); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_STONE_METAL); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_STONE_GLASS); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_STONE_WOOD); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_STONE_FLESH); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_STONE_PLASTIC); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_STONE_RUBBER); + addCollisionSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_STONE_PLASTIC); + + addCollisionSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_METAL_METAL); + addCollisionSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_METAL_GLASS); + addCollisionSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_METAL_WOOD); + addCollisionSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_METAL_FLESH); + addCollisionSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_METAL_PLASTIC); + addCollisionSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_METAL_PLASTIC); + addCollisionSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_METAL_RUBBER); + + addCollisionSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_GLASS_GLASS); + addCollisionSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_GLASS_WOOD); + addCollisionSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_GLASS_FLESH); + addCollisionSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_GLASS_PLASTIC); + addCollisionSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_GLASS_RUBBER); + addCollisionSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_GLASS_PLASTIC); + + addCollisionSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_WOOD_WOOD); + addCollisionSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_WOOD_FLESH); + addCollisionSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_WOOD_PLASTIC); + addCollisionSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_WOOD_RUBBER); + addCollisionSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_WOOD_PLASTIC); + + addCollisionSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_FLESH_FLESH); + addCollisionSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_FLESH_PLASTIC); + addCollisionSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_FLESH_RUBBER); + addCollisionSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_FLESH_PLASTIC); + + addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_RUBBER_RUBBER); + addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_RUBBER_PLASTIC); + addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_RUBBER_PLASTIC); + + addCollisionSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_PLASTIC_PLASTIC); + addCollisionSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_PLASTIC_PLASTIC); + + addCollisionSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_PLASTIC_PLASTIC); + } + + // Sliding Sounds + mSlidingSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END]; + if (mSlidingSoundMatrix) + { + addSlidingSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_SLIDE_STONE_STONE); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_SLIDE_STONE_WOOD); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_SLIDE_STONE_PLASTIC); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_SLIDE_STONE_RUBBER); + addSlidingSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_SLIDE_STONE_PLASTIC); + + addSlidingSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_SLIDE_METAL_METAL); + addSlidingSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_SLIDE_METAL_GLASS); + addSlidingSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_SLIDE_METAL_WOOD); + addSlidingSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_SLIDE_METAL_FLESH); + addSlidingSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_SLIDE_METAL_RUBBER); + addSlidingSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + + addSlidingSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + + addSlidingSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_SLIDE_WOOD_WOOD); + addSlidingSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_SLIDE_WOOD_FLESH); + addSlidingSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_SLIDE_WOOD_PLASTIC); + addSlidingSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_SLIDE_WOOD_PLASTIC); + + addSlidingSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_SLIDE_FLESH_FLESH); + addSlidingSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + + addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_SLIDE_RUBBER_PLASTIC); + addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_SLIDE_RUBBER_PLASTIC); + + addSlidingSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); + addSlidingSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + + addSlidingSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + } + + // Rolling Sounds + mRollingSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END]; + if (mRollingSoundMatrix) + { + addRollingSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_ROLL_STONE_STONE); + addRollingSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_ROLL_STONE_WOOD); + addRollingSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_ROLL_STONE_PLASTIC); + addRollingSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_ROLL_STONE_PLASTIC); + + addRollingSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_ROLL_METAL_GLASS); + addRollingSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_ROLL_METAL_WOOD); + addRollingSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_ROLL_METAL_WOOD); + addRollingSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_ROLL_METAL_WOOD); + + addRollingSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_ROLL_GLASS_WOOD); + addRollingSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + + addRollingSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_ROLL_WOOD_WOOD); + addRollingSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_ROLL_WOOD_FLESH); + addRollingSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_ROLL_WOOD_PLASTIC); + addRollingSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_ROLL_WOOD_PLASTIC); + + addRollingSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_ROLL_FLESH_PLASTIC); + addRollingSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_ROLL_FLESH_PLASTIC); + + addRollingSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01); + addRollingSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01); + + addRollingSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_ROLL_PLASTIC_PLASTIC); + addRollingSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_ROLL_PLASTIC_PLASTIC); + + addRollingSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_ROLL_PLASTIC_PLASTIC); + } +} + +BOOL LLMaterialTable::add(U8 mcode, const std::string& name, const LLUUID &uuid) +{ + LLMaterialInfo *infop; + + infop = new LLMaterialInfo(mcode,name,uuid); + if (!infop) return FALSE; + + // Add at the end so the order in menus matches the order in this + // file. JNC 11.30.01 + mMaterialInfoList.push_back(infop); + + return TRUE; +} + +BOOL LLMaterialTable::addCollisionSound(U8 mcode, U8 mcode2, const LLUUID &uuid) +{ + if (mCollisionSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) + { + mCollisionSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid; + if (mcode != mcode2) + { + mCollisionSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid; + } + } + return TRUE; +} + +BOOL LLMaterialTable::addSlidingSound(U8 mcode, U8 mcode2, const LLUUID &uuid) +{ + if (mSlidingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) + { + mSlidingSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid; + if (mcode != mcode2) + { + mSlidingSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid; + } + } + return TRUE; +} + +BOOL LLMaterialTable::addRollingSound(U8 mcode, U8 mcode2, const LLUUID &uuid) +{ + if (mRollingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) + { + mRollingSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid; + if (mcode != mcode2) + { + mRollingSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid; + } + } + return TRUE; +} + +BOOL LLMaterialTable::addShatterSound(U8 mcode, const LLUUID &uuid) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + infop->mShatterSoundID = uuid; + return TRUE; + } + } + + return FALSE; +} + +BOOL LLMaterialTable::addDensity(U8 mcode, const F32 &density) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + infop->mDensity = density; + return TRUE; + } + } + + return FALSE; +} + +BOOL LLMaterialTable::addRestitution(U8 mcode, const F32 &restitution) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + infop->mRestitution = restitution; + return TRUE; + } + } + + return FALSE; +} + +BOOL LLMaterialTable::addFriction(U8 mcode, const F32 &friction) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + infop->mFriction = friction; + return TRUE; + } + } + + return FALSE; +} + +BOOL LLMaterialTable::addDamageAndEnergy(U8 mcode, const F32 &hp_mod, const F32 &damage_mod, const F32 &ep_mod) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + infop->mHPModifier = hp_mod; + infop->mDamageModifier = damage_mod; + infop->mEPModifier = ep_mod; + return TRUE; + } + } + + return FALSE; +} + +LLUUID LLMaterialTable::getDefaultTextureID(const std::string& name) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (name == infop->mName) + { + return infop->mDefaultTextureID; + } + } + + return LLUUID::null; +} + + +LLUUID LLMaterialTable::getDefaultTextureID(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mDefaultTextureID; + } + } + + return LLUUID::null; +} + + +U8 LLMaterialTable::getMCode(const std::string& name) +{ + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (name == infop->mName) + { + return infop->mMCode; + } + } + + // + if(name.find("MCode") == 0) + { + S32 s; + sscanf(name.c_str(), "MCode%d", &s); + return U8(s); + } + // + return 0; +} + + +std::string LLMaterialTable::getName(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mName; + } + } + + // + //return NULL; + return llformat("MCode%d", mcode); + // +} + + +LLUUID LLMaterialTable::getCollisionSoundUUID(U8 mcode, U8 mcode2) +{ + mcode &= LL_MCODE_MASK; + mcode2 &= LL_MCODE_MASK; + + //llinfos << "code 1: " << ((U32) mcode) << " code 2:" << ((U32) mcode2) << llendl; + if (mCollisionSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) + { + return(mCollisionSoundMatrix[mcode * LL_MCODE_END + mcode2]); + } + else + { + //llinfos << "Null Sound" << llendl; + return(SND_NULL); + } +} + +LLUUID LLMaterialTable::getSlidingSoundUUID(U8 mcode, U8 mcode2) +{ + mcode &= LL_MCODE_MASK; + mcode2 &= LL_MCODE_MASK; + + if (mSlidingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) + { + return(mSlidingSoundMatrix[mcode * LL_MCODE_END + mcode2]); + } + else + { + return(SND_NULL); + } +} + +LLUUID LLMaterialTable::getRollingSoundUUID(U8 mcode, U8 mcode2) +{ + mcode &= LL_MCODE_MASK; + mcode2 &= LL_MCODE_MASK; + + if (mRollingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END)) + { + return(mRollingSoundMatrix[mcode * LL_MCODE_END + mcode2]); + } + else + { + return(SND_NULL); + } +} + +LLUUID LLMaterialTable::getGroundCollisionSoundUUID(U8 mcode) +{ + // Create material appropriate sounds for collisions with the ground + // For now, simply return a single sound for all materials + return SND_STONE_DIRT_02; +} + +LLUUID LLMaterialTable::getGroundSlidingSoundUUID(U8 mcode) +{ + // Create material-specific sound for sliding on ground + // For now, just return a single sound + return SND_SLIDE_STONE_STONE_01; +} + +LLUUID LLMaterialTable::getGroundRollingSoundUUID(U8 mcode) +{ + // Create material-specific sound for rolling on ground + // For now, just return a single sound + return SND_SLIDE_STONE_STONE_01; +} + +LLUUID LLMaterialTable::getCollisionParticleUUID(U8 mcode, U8 mcode2) +{ + // Returns an appropriate UUID to use as sprite at collision betweeen objects + // For now, just return a single image + return IMG_SHOT; +} + +LLUUID LLMaterialTable::getGroundCollisionParticleUUID(U8 mcode) +{ + // Returns an appropriate + // For now, just return a single sound + return IMG_SMOKE_POOF; +} + + +F32 LLMaterialTable::getDensity(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mDensity; + } + } + + return 0.f; +} + +F32 LLMaterialTable::getRestitution(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mRestitution; + } + } + + return LLMaterialTable::DEFAULT_RESTITUTION; +} + +F32 LLMaterialTable::getFriction(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mFriction; + } + } + + return LLMaterialTable::DEFAULT_FRICTION; +} + +F32 LLMaterialTable::getHPMod(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mHPModifier; + } + } + + return 1.f; +} + +F32 LLMaterialTable::getDamageMod(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mDamageModifier; + } + } + + return 1.f; +} + +F32 LLMaterialTable::getEPMod(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mEPModifier; + } + } + + return 1.f; +} + +LLUUID LLMaterialTable::getShatterSoundUUID(U8 mcode) +{ + mcode &= LL_MCODE_MASK; + for (info_list_t::iterator iter = mMaterialInfoList.begin(); + iter != mMaterialInfoList.end(); ++iter) + { + LLMaterialInfo *infop = *iter; + if (mcode == infop->mMCode) + { + return infop->mShatterSoundID; + } + } + + return SND_NULL; +} diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index cc73ffc32..c677afd9c 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1,1662 +1,1662 @@ -# -*- cmake -*- - -project(viewer) - -include(00-Common) -include(Boost) -include(DBusGlib) -include(DirectX) -include(ELFIO) -include(FMOD) -include(OPENAL) -include(HUNSPELL) -include(FindOpenGL) -include(JsonCpp) -include(LLAddBuildTest) -include(LLAudio) -include(LLCharacter) -include(LLCommon) -include(LLImage) -include(LLImageJ2COJ) -include(LLInventory) -include(LLMath) -include(LLMessage) -include(LLPlugin) -include(LLPrimitive) -include(LLRender) -include(LLUI) -include(LLVFS) -include(LLWindow) -include(LLXML) -include(LScript) -include(Linking) -include(NDOF) -include(GooglePerfTools) -include(TemplateCheck) -include(UI) -include(LLKDU) -include(ViewerMiscLibs) -include(ViewerArtwork.cmake) - -if (WINDOWS) - include(CopyWinLibs) -endif (WINDOWS) - -include_directories( - ${DBUSGLIB_INCLUDE_DIRS} - ${HUNSPELL_INCLUDE_DIR} - ${ELFIO_INCLUDE_DIR} - ${JSONCPP_INCLUDE_DIRS} - ${LLAUDIO_INCLUDE_DIRS} - ${LLCHARACTER_INCLUDE_DIRS} - ${LLCOMMON_INCLUDE_DIRS} - ${LLIMAGE_INCLUDE_DIRS} - ${LLINVENTORY_INCLUDE_DIRS} - ${LLMATH_INCLUDE_DIRS} - ${LLMESSAGE_INCLUDE_DIRS} - ${LLPLUGIN_INCLUDE_DIRS} - ${LLPRIMITIVE_INCLUDE_DIRS} - ${LLRENDER_INCLUDE_DIRS} - ${LLUI_INCLUDE_DIRS} - ${LLVFS_INCLUDE_DIRS} - ${LLWINDOW_INCLUDE_DIRS} - ${LLXML_INCLUDE_DIRS} - ${LSCRIPT_INCLUDE_DIRS} - ${LSCRIPT_INCLUDE_DIRS}/lscript_compile - ) - -set(viewer_SOURCE_FILES - llviewerobjectbackup.cpp - slfloatermediafilter.cpp - floaterlocalassetbrowse.cpp - aoremotectrl.cpp - lgghunspell_wrapper.cpp - lggdicdownload.cpp - floaterao.cpp - floatervoicelicense.cpp - cofmgr.cpp - ascentdaycyclemanager.cpp - ascentfloatercontactgroups.cpp - ascentprefssys.cpp - ascentprefsvan.cpp - dhparam.cpp - dsaparam.cpp - emerald.cpp - emeraldboobutils.cpp - dofloaterhex.cpp - dohexeditor.cpp - floatersculptpreview.cpp - hbfloatergrouptitles.cpp - hgfloatertexteditor.cpp - hippogridmanager.cpp - hippofloaterxml.cpp - hippolimits.cpp - hipporestrequest.cpp - hippopanelgrids.cpp - jcfloaterareasearch.cpp - chatbar_as_cmdline.cpp - qtoolalign.cpp - llagent.cpp - llagentaccess.cpp - llagentdata.cpp - llagentlanguage.cpp - llagentpilot.cpp - llanimstatelabels.cpp - llappviewer.cpp - llassetconverter.cpp - llassetuploadresponders.cpp - llassetuploadqueue.cpp - llattachmentsmgr.cpp - llaudiosourcevo.cpp - llbbox.cpp - llbox.cpp - llbuildnewviewsscheduler.cpp - llcallbacklist.cpp - llcallingcard.cpp - llcaphttpsender.cpp - llchatbar.cpp - llclassifiedinfo.cpp - llclassifiedstatsresponder.cpp - llcloud.cpp - llcolorscheme.cpp - llcolorswatch.cpp - llcommandhandler.cpp - llcommandlineparser.cpp - llcompass.cpp - llcompilequeue.cpp - llconfirmationmanager.cpp - llconsole.cpp - llcontainerview.cpp - llcurrencyuimanager.cpp - llcylinder.cpp - lldebugmessagebox.cpp - lldebugview.cpp - lldelayedgestureerror.cpp - lldirpicker.cpp - lldrawable.cpp - lldrawpoolalpha.cpp - lldrawpoolavatar.cpp - lldrawpoolbump.cpp - lldrawpool.cpp - lldrawpoolground.cpp - lldrawpoolsimple.cpp - lldrawpoolsky.cpp - lldrawpoolterrain.cpp - lldrawpooltree.cpp - lldrawpoolwater.cpp - lldrawpoolwlsky.cpp - lldriverparam.cpp - lldynamictexture.cpp - llemote.cpp - lleventinfo.cpp - lleventnotifier.cpp - lleventpoll.cpp - llface.cpp - llfasttimerview.cpp - llfeaturemanager.cpp - llfilepicker.cpp - llfirstuse.cpp - llflexibleobject.cpp - llfloaterabout.cpp - llfloateractivespeakers.cpp - llfloateranimpreview.cpp - llfloaterauction.cpp - llfloateravatarinfo.cpp - llfloateravatarlist.cpp - llfloateravatarpicker.cpp - llfloateravatartextures.cpp - llfloaterbeacons.cpp - llfloaterblacklist.cpp - llviewerdisplayname.cpp - llfloaterdisplayname.cpp - llfloaterbuildoptions.cpp - llfloaterbulkpermission.cpp - llfloaterbump.cpp - llfloaterbuycontents.cpp - llfloaterbuy.cpp - llfloaterbuycurrency.cpp - llfloaterbuyland.cpp - llfloatercamera.cpp - llfloaterchat.cpp - llfloaterchatterbox.cpp - llfloaterclassified.cpp - llfloatercolorpicker.cpp - llfloatercustomize.cpp - llfloaterdaycycle.cpp - llfloaterdickdongs.cpp - llfloaterdirectory.cpp - llfloatereditui.cpp - llfloaterenvsettings.cpp - llfloaterevent.cpp - llfloaterexploreanimations.cpp - llfloaterexploresounds.cpp - llfloaterfriends.cpp - llfloaterfonttest.cpp - llfloatergesture.cpp - llfloatergodtools.cpp - llfloatergroupinfo.cpp - llfloatergroupinvite.cpp - llfloatergroups.cpp - llfloaterhandler.cpp - llfloaterhardwaresettings.cpp - llfloaterhtmlcurrency.cpp - llfloatermediabrowser.cpp - llfloaterhtmlsimple.cpp - llfloaterhud.cpp - llfloaterimagepreview.cpp - llfloaterinspect.cpp - llfloaterjoystick.cpp - llfloaterlagmeter.cpp - llfloaterland.cpp - llfloaterlandholdings.cpp - llfloaterlandmark.cpp - llfloatermap.cpp - llfloatermemleak.cpp - llfloatermessagelog.cpp - llfloatermute.cpp - llfloaternamedesc.cpp - llfloaternewim.cpp - llfloaternotificationsconsole.cpp - llfloaterobjectiminfo.cpp - llfloateropenobject.cpp - llfloaterparcel.cpp - llfloaterpermissionsmgr.cpp - llfloaterperms.cpp - llfloaterpostcard.cpp - llfloaterpostprocess.cpp - llfloaterpreference.cpp - llfloaterproperties.cpp - llfloaterregioninfo.cpp - llfloaterreporter.cpp - llfloaterscriptdebug.cpp - llfloatersellland.cpp - llfloatersettingsdebug.cpp - llfloatersnapshot.cpp - llfloaterstats.cpp - llfloatertelehub.cpp - llfloaterteleport.cpp - llfloaterteleporthistory.cpp - llfloatertest.cpp - llfloatertools.cpp - llfloatertopobjects.cpp - llfloatertos.cpp - llfloaterurldisplay.cpp - llfloaterurlentry.cpp - llfloatervfs.cpp - llfloatervfsexplorer.cpp - llfloatervoicedevicesettings.cpp - llfloaterwater.cpp - llfloaterwindlight.cpp - llfloaterworldmap.cpp - llfolderview.cpp - llfollowcam.cpp - llframestats.cpp - llframestatview.cpp - llgesturemgr.cpp - llgivemoney.cpp - llglsandbox.cpp - llgroupmgr.cpp - llgroupnotify.cpp - llhomelocationresponder.cpp - llhoverview.cpp - llhudeffectbeam.cpp - llhudeffect.cpp - llhudeffectlookat.cpp - llhudeffectpointat.cpp - llhudeffecttrail.cpp - llhudicon.cpp - llhudmanager.cpp - llhudobject.cpp - llhudrender.cpp - llhudtext.cpp - llhudview.cpp - llimpanel.cpp - llimview.cpp - llinventoryactions.cpp - llinventorybackup.cpp - llinventorybridge.cpp - llinventoryclipboard.cpp - llinventorymodel.cpp - llinventoryview.cpp - lljoystickbutton.cpp - lllandmarklist.cpp - lllocalinventory.cpp - lllogchat.cpp - llloginhandler.cpp - llsavedlogins.cpp - llmanip.cpp - llmaniprotate.cpp - llmanipscale.cpp - llmaniptranslate.cpp - llmediaremotectrl.cpp - llmemoryview.cpp - llmenucommands.cpp - llmimetypes.cpp - llmorphview.cpp - llmoveview.cpp - llmutelist.cpp - llnamebox.cpp - llnameeditor.cpp - llnamelistctrl.cpp - llnetmap.cpp - llnotify.cpp - lloverlaybar.cpp - llpanelaudioprefs.cpp - llpanelaudiovolume.cpp - llpanelavatar.cpp - llpanelclassified.cpp - llpanelcontents.cpp - llpaneldebug.cpp - llpaneldirbrowser.cpp - llpaneldirclassified.cpp - llpaneldirevents.cpp - llpaneldirfind.cpp - llpaneldirgroups.cpp - llpaneldirland.cpp - llpaneldirpeople.cpp - llpaneldirplaces.cpp - llpaneldirpopular.cpp - llpaneldisplay.cpp - llpanelevent.cpp - llpanelface.cpp - llpanelgeneral.cpp - llpanelgroup.cpp - llpanelgroupgeneral.cpp - llpanelgroupinvite.cpp - llpanelgrouplandmoney.cpp - llpanelgroupnotices.cpp - llpanelgrouproles.cpp - llpanelgroupvoting.cpp - llpanelinput.cpp - llpanelinventory.cpp - llpanelland.cpp - llpanellandaudio.cpp - llpanellandmedia.cpp - llpanellandobjects.cpp - llpanellandoptions.cpp - llpanellogin.cpp - llpanelmorph.cpp - llpanelmediahud.cpp - llpanelmsgs.cpp - llpanelnetwork.cpp - llpanelobject.cpp - llpanelpermissions.cpp - llpanelpick.cpp - llpanelplace.cpp - llpanelskins.cpp - llpanelvolume.cpp - llpanelweb.cpp - llparcelselection.cpp - llpatchvertexarray.cpp - llpolymesh.cpp - llpolymorph.cpp - llprefschat.cpp - llprefsim.cpp - llprefsvoice.cpp - llpreviewanim.cpp - llpreview.cpp - llpreviewgesture.cpp - llpreviewlandmark.cpp - llpreviewnotecard.cpp - llpreviewscript.cpp - llpreviewsound.cpp - llpreviewtexture.cpp - llproductinforequest.cpp - llprogressview.cpp - llregionposition.cpp - llremoteparcelrequest.cpp - llsavedsettingsglue.cpp - llselectmgr.cpp - llsky.cpp - llspatialpartition.cpp - llsprite.cpp - llsrv.cpp - llstartup.cpp - llstatbar.cpp - llstatgraph.cpp - llstatusbar.cpp - llstatview.cpp - llstylemap.cpp - llsurface.cpp - llsurfacepatch.cpp - lltexlayer.cpp - lltexturecache.cpp - lltexturectrl.cpp - lltexturefetch.cpp - lltextureinfo.cpp - lltextureinfodetails.cpp - lltexturestats.cpp - lltexturestatsuploader.cpp - lltextureview.cpp - lltoolbar.cpp - lltoolbrush.cpp - lltoolcomp.cpp - lltool.cpp - lltooldraganddrop.cpp - lltoolface.cpp - lltoolfocus.cpp - lltoolgrab.cpp - lltoolgun.cpp - lltoolindividual.cpp - lltoolmgr.cpp - lltoolmorph.cpp - lltoolobjpicker.cpp - lltoolpie.cpp - lltoolpipette.cpp - lltoolplacer.cpp - lltoolselect.cpp - lltoolselectland.cpp - lltoolselectrect.cpp - lltoolview.cpp - lltracker.cpp - lltrans.cpp - lltranslate.cpp - lluploaddialog.cpp - llurl.cpp - llurldispatcher.cpp - llurlhistory.cpp - llurlsimstring.cpp - llurlwhitelist.cpp - lluserauth.cpp - llvectorperfoptions.cpp - llvelocitybar.cpp - llviewchildren.cpp - llviewerassetstorage.cpp - llvieweraudio.cpp - llviewercamera.cpp - llviewercontrol.cpp - llviewerdisplay.cpp - llviewergenericmessage.cpp - llviewergesture.cpp - #llviewerimage.cpp - #llviewerimagelist.cpp - llviewerinventory.cpp - llviewerjointattachment.cpp - llviewerjoint.cpp - llviewerjointmesh.cpp - llviewerjointmesh_sse2.cpp - llviewerjointmesh_sse.cpp - llviewerjointmesh_vec.cpp - llviewerjoystick.cpp - llviewerkeyboard.cpp - llviewerlayer.cpp - llviewermedia.cpp - llviewermediafocus.cpp - llviewermedia_streamingaudio.cpp - llviewermenu.cpp - llviewermenufile.cpp - llviewermessage.cpp - llviewernetwork.cpp - llviewerobject.cpp - llviewerobjectlist.cpp - llviewerparcelmedia.cpp - llviewerparcelmediaautoplay.cpp - llviewerparcelmgr.cpp - llviewerparceloverlay.cpp - llviewerpartsim.cpp - llviewerpartsource.cpp - llviewerregion.cpp - llviewershadermgr.cpp - llviewerstats.cpp - llviewertexteditor.cpp - llviewertexture.cpp - llviewertextureanim.cpp - llviewertexturelist.cpp - llviewerthrottle.cpp - llviewervisualparam.cpp - llviewerwindow.cpp - llvlcomposition.cpp - llvlmanager.cpp - llvoavatar.cpp - llvoavatardefines.cpp - llvocache.cpp - llvoclouds.cpp - llvograss.cpp - llvoground.cpp - llvoiceclient.cpp - llvoiceremotectrl.cpp - llvoicevisualizer.cpp - llvoinventorylistener.cpp - llvopartgroup.cpp - llvosky.cpp - llvosurfacepatch.cpp - llvotextbubble.cpp - llvotree.cpp - llvovolume.cpp - llvowater.cpp - llvowlsky.cpp - llwatchdog.cpp - llwaterparammanager.cpp - llwaterparamset.cpp - llwearable.cpp - llwearablelist.cpp - llweb.cpp - llmediactrl.cpp - llwind.cpp - llwlanimator.cpp - llwldaycycle.cpp - llwlparammanager.cpp - llwlparamset.cpp - llworld.cpp - llworldmap.cpp - llworldmipmap.cpp - llmapresponders.cpp - llworldmapview.cpp - llxmlrpctransaction.cpp - noise.cpp - pipeline.cpp - scriptcounter.cpp - wlfPanel_AdvSettings.cpp - rlvhandler.cpp - rlvhelper.cpp - rlvcommon.cpp - rlvlocks.cpp - rlvinventory.cpp - rlvextensions.cpp - rlvfloaterbehaviour.cpp - rlvviewer2.cpp - shcommandhandler.cpp - ) - -# This gets renamed in the packaging step -set(VIEWER_BINARY_NAME "secondlife-bin" CACHE STRING - "The name of the viewer executable to create.") - -if ((LINUX OR DARWIN) AND NOT DARWIN_PPC) - # We can't set these flags for Darwin, because they get passed to - # the PPC compiler. Ugh. - - set_source_files_properties( - llviewerjointmesh_sse.cpp - PROPERTIES COMPILE_FLAGS "-msse -mfpmath=sse" - ) - set_source_files_properties( - llviewerjointmesh_sse2.cpp - PROPERTIES COMPILE_FLAGS "-msse2 -mfpmath=sse" - ) -endif ((LINUX OR DARWIN) AND NOT DARWIN_PPC) - -set(viewer_HEADER_FILES - CMakeLists.txt - ViewerInstall.cmake - - llviewerobjectbackup.h - slfloatermediafilter.h - floaterlocalassetbrowse.h - aoremotectrl.h - floaterao.h - floatervoicelicense.h - cofmgr.h - ascentdaycyclemanager.h - ascentfloatercontactgroups.h - ascentprefssys.h - ascentprefsvan.h - emerald.h - emeraldboobutils.h - dofloaterhex.h - dohexeditor.h - floatersculptpreview.h - hbfloatergrouptitles.h - hgfloatertexteditor.h - hippogridmanager.h - hippofloaterxml.h - hippolimits.h - hipporestrequest.h - hippopanelgrids.h - jcfloaterareasearch.h - lggdicdownload.h - lgghunspell_wrapper.h - chatbar_as_cmdline.h - qtoolalign.h - llagent.h - llagentaccess.h - llagentdata.h - llagentlanguage.h - llagentpilot.h - llanimstatelabels.h - llappearance.h - llappviewer.h - llassetconverter.h - llassetuploadresponders.h - llassetuploadqueue.h - llattachmentsmgr.h - llaudiosourcevo.h - llbbox.h - llbox.h - llbuildnewviewsscheduler.h - llcallbacklist.h - llcallingcard.h - llcaphttpsender.h - llchatbar.h - llclassifiedinfo.h - llclassifiedstatsresponder.h - llcloud.h - llcolorscheme.h - llcolorswatch.h - llcommandhandler.h - llcommandlineparser.h - llcompass.h - llcompilequeue.h - llconfirmationmanager.h - llconsole.h - llcontainerview.h - llcurrencyuimanager.h - llcylinder.h - lldebugmessagebox.h - lldebugview.h - lldelayedgestureerror.h - lldirpicker.h - lldrawable.h - lldrawpool.h - lldrawpoolalpha.h - lldrawpoolavatar.h - lldrawpoolbump.h - lldrawpoolclouds.h - lldrawpoolground.h - lldrawpoolsimple.h - lldrawpoolsky.h - lldrawpoolterrain.h - lldrawpooltree.h - lldrawpoolwater.h - lldrawpoolwlsky.h - lldriverparam.h - lldynamictexture.h - llemote.h - lleventinfo.h - lleventnotifier.h - lleventpoll.h - llface.h - llfasttimerview.h - llfeaturemanager.h - llfilepicker.h - llfirstuse.h - llflexibleobject.h - llfloaterabout.h - llfloateractivespeakers.h - llfloateranimpreview.h - llfloaterauction.h - llfloateravatarinfo.h - llfloateravatarlist.h - llfloateravatarpicker.h - llfloateravatartextures.h - llfloaterbeacons.h - llfloaterblacklist.h - llviewerdisplayname.h - llfloaterdisplayname.h - llfloaterbuildoptions.h - llfloaterbulkpermission.h - llfloaterbump.h - llfloaterbuy.h - llfloaterbuycontents.h - llfloaterbuycurrency.h - llfloaterbuyland.h - llfloatercamera.h - llfloaterchat.h - llfloaterchatterbox.h - llfloaterclassified.h - llfloatercolorpicker.h - llfloatercustomize.h - llfloaterdaycycle.h - llfloaterdickdongs.h - llfloaterdirectory.h - llfloatereditui.h - llfloaterenvsettings.h - llfloaterexploreanimations.h - llfloaterexploresounds.h - llfloaterevent.h - llfloaterfonttest.h - llfloaterfriends.h - llfloatergesture.h - llfloatergodtools.h - llfloatergroupinfo.h - llfloatergroupinvite.h - llfloatergroups.h - llfloaterhandler.h - llfloaterhardwaresettings.h - llfloaterhtmlcurrency.h - llfloatermediabrowser.h - llfloaterhtmlsimple.h - llfloaterhud.h - llfloaterimagepreview.h - llfloaterinspect.h - llfloaterjoystick.h - llfloaterlagmeter.h - llfloaterland.h - llfloaterlandholdings.h - llfloaterlandmark.h - llfloatermap.h - llfloatermemleak.h - llfloatermessagelog.h - llfloatermute.h - llfloaternamedesc.h - llfloaternewim.h - llfloaternotificationsconsole.h - llfloaterobjectiminfo.h - llfloateropenobject.h - llfloaterparcel.h - llfloaterpermissionsmgr.h - llfloaterpostcard.h - llfloaterpostprocess.h - llfloaterpreference.h - llfloaterperms.h - llfloaterproperties.h - llfloaterregioninfo.h - llfloaterreporter.h - llfloaterscriptdebug.h - llfloatersellland.h - llfloatersettingsdebug.h - llfloatersnapshot.h - llfloaterstats.h - llfloatertelehub.h - llfloaterteleport.h - llfloaterteleporthistory.h - llfloatertest.h - llfloatertools.h - llfloatertopobjects.h - llfloatertos.h - llfloaterurldisplay.h - llfloaterurlentry.h - llfloatervfs.h - llfloatervfsexplorer.h - llfloatervoicedevicesettings.h - llfloaterwater.h - llfloaterwindlight.h - llfloaterworldmap.h - llfolderview.h - llfollowcam.h - llframestats.h - llframestatview.h - llgesturemgr.h - llgivemoney.h - llgroupmgr.h - llgroupnotify.h - llhomelocationresponder.h - llhoverview.h - llhudeffect.h - llhudeffectbeam.h - llhudeffectlookat.h - llhudeffectpointat.h - llhudeffecttrail.h - llhudicon.h - llhudmanager.h - llhudobject.h - llhudrender.h - llhudtext.h - llhudview.h - llimpanel.h - llimview.h - llinventorybackup.h - llinventorybridge.h - llinventoryclipboard.h - llinventorymodel.h - llinventoryview.h - lljoystickbutton.h - lllandmarklist.h - lllightconstants.h - lllocalinventory.h - lllogchat.h - llloginhandler.h - llsavedlogins.h - llmanip.h - llmaniprotate.h - llmanipscale.h - llmaniptranslate.h - llmediaremotectrl.h - llmemoryview.h - llmenucommands.h - llmimetypes.h - llmorphview.h - llmoveview.h - llmutelist.h - llnamebox.h - llnameeditor.h - llnamelistctrl.h - llnetmap.h - llnotify.h - lloverlaybar.h - llpanelaudioprefs.h - llpanelaudiovolume.h - llpanelavatar.h - llpanelclassified.h - llpanelcontents.h - llpaneldebug.h - llpaneldirbrowser.h - llpaneldirclassified.h - llpaneldirevents.h - llpaneldirfind.h - llpaneldirgroups.h - llpaneldirland.h - llpaneldirpeople.h - llpaneldirplaces.h - llpaneldirpopular.h - llpaneldisplay.h - llpanelevent.h - llpanelface.h - llpanelgeneral.h - llpanelgroup.h - llpanelgroupgeneral.h - llpanelgroupinvite.h - llpanelgrouplandmoney.h - llpanelgroupnotices.h - llpanelgrouproles.h - llpanelgroupvoting.h - llpanelinput.h - llpanelinventory.h - llpanelland.h - llpanellandaudio.h - llpanellandmedia.h - llpanellandobjects.h - llpanellandoptions.h - llpanelLCD.h - llpanellogin.h - llpanelmorph.h - llpanelmediahud.h - llpanelmsgs.h - llpanelnetwork.h - llpanelobject.h - llpanelpermissions.h - llpanelpick.h - llpanelplace.h - llpanelskins.h - llpanelvolume.h - llpanelweb.h - llparcelselection.h - llpatchvertexarray.h - llpolymesh.h - llpolymorph.h - llprefschat.h - llprefsim.h - llprefsvoice.h - llpreview.h - llpreviewanim.h - llpreviewgesture.h - llpreviewlandmark.h - llpreviewnotecard.h - llpreviewscript.h - llpreviewsound.h - llpreviewtexture.h - llproductinforequest.h - llprogressview.h - llregionposition.h - llremoteparcelrequest.h - llresourcedata.h - llsavedsettingsglue.h - llselectmgr.h - llsky.h - llspatialpartition.h - llsprite.h - llsrv.h - llstartup.h - llstatbar.h - llstatgraph.h - llstatusbar.h - llstatview.h - llstylemap.h - llsurface.h - llsurfacepatch.h - lltable.h - lltexlayer.h - lltexturecache.h - lltexturectrl.h - lltexturefetch.h - lltextureinfo.h - lltextureinfodetails.h - lltexturestats.h - lltexturestatsuploader.h - lltextureview.h - lltool.h - lltoolbar.h - lltoolbrush.h - lltoolcomp.h - lltooldraganddrop.h - lltoolface.h - lltoolfocus.h - lltoolgrab.h - lltoolgun.h - lltoolindividual.h - lltoolmgr.h - lltoolmorph.h - lltoolobjpicker.h - lltoolpie.h - lltoolpipette.h - lltoolplacer.h - lltoolselect.h - lltoolselectland.h - lltoolselectrect.h - lltoolview.h - lltracker.h - lltrans.h - lltranslate.h - lluiconstants.h - lluploaddialog.h - llurl.h - llurldispatcher.h - llurlhistory.h - llurlsimstring.h - llurlwhitelist.h - lluserauth.h - llvectorperfoptions.h - llvelocitybar.h - llviewchildren.h - llviewerassetstorage.h - llvieweraudio.h - llviewerbuild.h - llviewercamera.h - llviewercontrol.h - llviewerdisplay.h - llviewergenericmessage.h - llviewergesture.h - #llviewerimage.h - #llviewerimagelist.h - llviewerinventory.h - llviewerjoint.h - llviewerjointattachment.h - llviewerjointmesh.h - llviewerjoystick.h - llviewerkeyboard.h - llviewerlayer.h - llviewermedia.h - llviewermediaobserver.h - llviewermediafocus.h - llviewermenu.h - llviewermenufile.h - llviewermessage.h - llviewernetwork.h - llviewerobject.h - llviewerobjectlist.h - llviewerparcelmedia.h - llviewerparcelmediaautoplay.h - llviewerparcelmgr.h - llviewerparceloverlay.h - llviewerpartsim.h - llviewerpartsource.h - llviewerprecompiledheaders.h - llviewerregion.h - llviewershadermgr.h - llviewerstats.h - llviewertexteditor.h - llviewertexture.h - llviewertextureanim.h - llviewertexturelist.h - llviewerthrottle.h - llviewervisualparam.h - llviewerwindow.h - llvlcomposition.h - llvlmanager.h - llvoavatar.h - llvoavatardefines.h - llvocache.h - llvoclouds.h - llvograss.h - llvoground.h - llvoiceclient.h - llvoiceremotectrl.h - llvoicevisualizer.h - llvoinventorylistener.h - llvopartgroup.h - llvosky.h - llvosurfacepatch.h - llvotextbubble.h - llvotree.h - llvotreenew.h - llvovolume.h - llvowater.h - llvowlsky.h - llwatchdog.h - llwaterparammanager.h - llwaterparamset.h - llwearable.h - llwearablelist.h - llweb.h - llmediactrl.h - llwind.h - llwindebug.h - llwlanimator.h - llwldaycycle.h - llwlparammanager.h - llwlparamset.h - llworld.h - llworldmap.h - llworldmipmap.h - llmapresponders.h - llworldmapview.h - llxmlrpctransaction.h - macmain.h - noise.h - pipeline.h - randgauss.h - scriptcounter.h - VertexCache.h - VorbisFramework.h - wlfPanel_AdvSettings.h - rlvdefines.h - rlvhandler.h - rlvhelper.h - rlvcommon.h - rlvlocks.h - rlvinventory.h - rlvextensions.h - rlvfloaterbehaviour.h - rlvviewer2.h - shcommandhandler.h - ) - -source_group("CMake Rules" FILES ViewerInstall.cmake) - -if (DARWIN) - LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp) - - find_library(AGL_LIBRARY AGL) - find_library(APPKIT_LIBRARY AppKit) - find_library(COCOA_LIBRARY Cocoa) - find_library(IOKIT_LIBRARY IOKit) - - set(viewer_LIBRARIES - ${COCOA_LIBRARY} - ${AGL_LIBRARY} - ${IOKIT_LIBRARY} - ) - - # Add resource files to the project. - set(viewer_RESOURCE_FILES - ${VIEWER_BRANDING_ID}.icns - macview.r - gpu_table.txt - Info-${VIEWER_BRANDING_NAME_CAMELCASE}.plist - SecondLife.nib/ - # CMake doesn't seem to support Xcode language variants well just yet - English.lproj/InfoPlist.strings - English.lproj/language.txt - German.lproj/language.txt - Japanese.lproj/language.txt - Korean.lproj/language.txt - ) - set_source_files_properties( - ${viewer_RESOURCE_FILES} - PROPERTIES - HEADER_FILE_ONLY TRUE - #MACOSX_PACKAGE_LOCATION Resources #don't do this! this tells cmake to copy the files. - ) - SOURCE_GROUP("Resources" FILES ${viewer_RESOURCE_FILES}) - list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES}) -endif (DARWIN) - -if (LINUX) - LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp) - LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -luuid -lrt -laprutil-1 -lfontconfig -Wl,--as-needed") - - set(viewer_LIBRARIES - Xinerama - ) -endif (LINUX) - -if (WINDOWS) - list(APPEND viewer_SOURCE_FILES - llappviewerwin32.cpp - llwindebug.cpp - ) - - list(APPEND viewer_HEADER_FILES - llappviewerwin32.h - llwindebug.h - ) - - # precompiled header configuration - # llviewerprecompiledheaders.cpp generates - # the .pch file. - # All sources added to viewer_SOURCE_FILES - # at this point use it. - set_source_files_properties(llviewerprecompiledheaders.cpp - PROPERTIES - COMPILE_FLAGS "/Ycllviewerprecompiledheaders.h" - ) - foreach( src_file ${viewer_SOURCE_FILES} ) - set_source_files_properties( - ${src_file} - PROPERTIES - COMPILE_FLAGS "/Yullviewerprecompiledheaders.h" - ) - endforeach( src_file ${viewer_SOURCE_FILES} ) - list(APPEND viewer_SOURCE_FILES llviewerprecompiledheaders.cpp) - - # Add resource files to the project. - # viewerRes.rc is the only buildable file, but - # the rest are all dependencies of it. - set(viewer_RESOURCE_FILES - ${ARTWORK_DIR}/res/arrow.cur - ${ARTWORK_DIR}/res/arrowcop.cur - ${ARTWORK_DIR}/res/arrowcopmulti.cur - ${ARTWORK_DIR}/res/arrowdrag.cur - ${ARTWORK_DIR}/res/circleandline.cur - ${ARTWORK_DIR}/res/icon1.ico - ${ARTWORK_DIR}/res/llarrow.cur - ${ARTWORK_DIR}/res/llarrowdrag.cur - ${ARTWORK_DIR}/res/llarrowdragmulti.cur - ${ARTWORK_DIR}/res/llarrowlocked.cur - ${ARTWORK_DIR}/res/llgrablocked.cur - ${ARTWORK_DIR}/res/llno.cur - ${ARTWORK_DIR}/res/llnolocked.cur - ${ARTWORK_DIR}/res/lltoolcamera.cur - ${ARTWORK_DIR}/res/lltoolcreate.cur - ${ARTWORK_DIR}/res/lltoolfocus.cur - ${ARTWORK_DIR}/res/lltoolgrab.cur - ${ARTWORK_DIR}/res/lltoolland.cur - ${ARTWORK_DIR}/res/lltoolpan.cur - ${ARTWORK_DIR}/res/lltoolpipette.cur - ${ARTWORK_DIR}/res/lltoolrotate.cur - ${ARTWORK_DIR}/res/lltoolscale.cur - ${ARTWORK_DIR}/res/lltooltranslate.cur - ${ARTWORK_DIR}/res/lltoolzoomin.cur - ${ARTWORK_DIR}/res/lltoolzoomout.cur - ${ARTWORK_DIR}/res/snowglobe_icon.BMP - ${ARTWORK_DIR}/res/snowglobe_icon.ico - ${ARTWORK_DIR}/res/resource.h - ${ARTWORK_DIR}/res/toolbuy.cur - ${ARTWORK_DIR}/res/toolopen.cur - ${ARTWORK_DIR}/res/toolpay.cur - ${ARTWORK_DIR}/res/toolpickobject.cur - ${ARTWORK_DIR}/res/toolpickobject2.cur - ${ARTWORK_DIR}/res/toolpickobject3.cur - ${ARTWORK_DIR}/res/toolpipette.cur - ${ARTWORK_DIR}/res/toolsit.cur - ) - - set_source_files_properties(${viewer_RESOURCE_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - - if(NOT ARTWORK_IN_SOURCE) - # The resource compiler needs to find resources here. - include_directories(${ARTWORK_DIR}/res) - endif(NOT ARTWORK_IN_SOURCE) - - if (MSVC71 OR MSVC80 AND NOT VISTA_ICON) - set(viewer_RESOURCE_FILES - res/resource.h - res/viewerRes_bc.rc - ${viewer_RESOURCE_FILES} - ) - else (MSVC71 OR MSVC80 AND NOT VISTA_ICON) - set(viewer_RESOURCE_FILES - res/resource.h - res/viewerRes.rc - ${viewer_RESOURCE_FILES} - ) - endif (MSVC71 OR MSVC80 AND NOT VISTA_ICON) - - SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES}) - - list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES}) - - find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR}) - find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR}) - mark_as_advanced( - DINPUT_LIBRARY - DXGUID_LIBRARY - ) - - set(viewer_LIBRARIES - advapi32 - comdlg32 - ${DINPUT_LIBRARY} - ${DXGUID_LIBRARY} - fmodvc - gdi32 - kernel32 - odbc32 - odbccp32 - ole32 - oleaut32 - opengl32 - shell32 - user32 - Vfw32 - winspool - ) - - find_library(INTEL_MEMOPS_LIBRARY - NAMES ll_intel_memops - PATHS - optimized ${ARCH_PREBUILT_DIRS_RELEASE} - debug ${ARCH_PREBUILT_DIRS_DEBUG} - ) - mark_as_advanced(INTEL_MEMOPS_LIBRARY) - - if (INTEL_MEMOPS_LIBRARY) - list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY}) - endif (INTEL_MEMOPS_LIBRARY) - - use_prebuilt_binary(dbghelp) -endif (WINDOWS) - -# Add the xui files. This is handy for searching for xui elements -# from within the IDE. - -file(GLOB viewer_XUI_FILE_GLOB_LIST - ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en-us/*.xml) - -set(viewer_XUI_FILES - - ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/colors.xml - ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/colors_base.xml - - - - ) - -list(APPEND viewer_XUI_FILES ${viewer_XUI_FILE_GLOB_LIST}) -list(SORT viewer_XUI_FILES) - -source_group("XUI Files" FILES ${viewer_XUI_FILES}) - -set_source_files_properties(${viewer_XUI_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND viewer_SOURCE_FILES ${viewer_XUI_FILES}) - -set(viewer_APPSETTINGS_FILES - app_settings/anim.ini - app_settings/cmd_line.xml - app_settings/grass.xml - app_settings/high_graphics.xml - app_settings/keys.ini - app_settings/keywords.ini - app_settings/logcontrol.xml - app_settings/low_graphics.xml - app_settings/mid_graphics.xml - app_settings/settings.xml - app_settings/settings_crash_behavior.xml - app_settings/settings_files.xml - app_settings/settings_per_account.xml - app_settings/std_bump.ini - app_settings/trees.xml - app_settings/ultra_graphics.xml - app_settings/viewerart.xml - ${CMAKE_SOURCE_DIR}/../etc/message.xml - ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg - ) - -source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES}) - -set_source_files_properties(${viewer_APPSETTINGS_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND viewer_SOURCE_FILES ${viewer_APPSETTINGS_FILES}) - -if(ARTWORK_EXISTS) - set(viewer_CHARACTER_FILES - ${ARTWORK_DIR}/character/attentions.xml - ${ARTWORK_DIR}/character/attentionsN.xml - ${ARTWORK_DIR}/character/avatar_lad.xml - ${ARTWORK_DIR}/character/avatar_skeleton.xml - ${ARTWORK_DIR}/character/genepool.xml - ) - - source_group("Character File" FILES ${viewer_CHARACTER_FILES}) - - set_source_files_properties(${viewer_CHARACTER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - - list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES}) -endif(ARTWORK_EXISTS) - -if (WINDOWS) - file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi) - - source_group("Installer Files" FILES ${viewer_INSTALLER_FILES}) - - set_source_files_properties(${viewer_INSTALLER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - - list(APPEND viewer_SOURCE_FILES ${viewer_INSTALLER_FILES}) -endif (WINDOWS) - -if (OPENAL) - set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL") -endif (OPENAL) - -if (FMOD) - set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD") - - if (NOT WINDOWS) - set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp) - add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES}) - set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY}) - if (DARWIN) - list(APPEND fmodwrapper_needed_LIBRARIES ${CARBON_LIBRARY}) - set_target_properties( - fmodwrapper - PROPERTIES - BUILD_WITH_INSTALL_RPATH 1 - INSTALL_NAME_DIR "@executable_path/../Resources" - LINK_FLAGS "-unexported_symbols_list \"${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp\"" - ) - endif (DARWIN) - set(FMODWRAPPER_LIBRARY fmodwrapper) - target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES}) - endif (NOT WINDOWS) -endif (FMOD) - -set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}") - -list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES}) - -set_source_files_properties(${viewer_HEADER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -add_executable(${VIEWER_BINARY_NAME} - WIN32 - MACOSX_BUNDLE - ${viewer_SOURCE_FILES} - ) - -if (!DISABLE_TEMPLATE_CHECK) - check_message_template(${VIEWER_BINARY_NAME}) -endif (!DISABLE_TEMPLATE_CHECK) - -if (LLKDU_LIBRARY) - add_dependencies(${VIEWER_BINARY_NAME} ${LLKDU_LIBRARY}) -endif (LLKDU_LIBRARY) - -# We package by default on Linux so we can run from newview/packaged. -if (LINUX) - set(PACKAGE_DEFAULT ON) -else (LINUX) - set(PACKAGE_DEFAULT OFF) -endif (LINUX) -set(PACKAGE ${PACKAGE_DEFAULT} CACHE BOOL - "Add a package target that builds an installer package.") - -if (WINDOWS) - if(MSVC71) - set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES") - else(MSVC71) - set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map") - endif(MSVC71) - - set_target_properties(${VIEWER_BINARY_NAME} - PROPERTIES - LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${GOOGLE_PERFTOOLS_LINKER_FLAGS}" - LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\"" - LINK_FLAGS_RELEASE ${release_flags} - ) - - # sets the 'working directory' for debugging from visual studio. - if (NOT UNATTENDED) - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe - ARGS - --solution - ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln - --workingdir - ${VIEWER_BINARY_NAME} - ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." - ) - endif (NOT UNATTENDED) - - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg - COMMENT "Copying message_template.msg to the runtime folder." - ) - - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} PRE_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml - COMMENT "Copying message.xml to the runtime folder." - ) - - add_dependencies(${VIEWER_BINARY_NAME} copy_win_libs) - - if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) - add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts) - endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) - - add_custom_command( - OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --configuration=${CMAKE_CFG_INTDIR} - --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} - --branding_id=${VIEWER_BRANDING_ID} - --grid=${GRID} - --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat - DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - ) - - add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit) - - if (PACKAGE) - add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat) - add_dependencies(package windows-updater windows-crash-logger) - endif (PACKAGE) -endif (WINDOWS) - -target_link_libraries(${VIEWER_BINARY_NAME} - ${GOOGLE_PERFTOOLS_LIBRARIES} - ${LLAUDIO_LIBRARIES} - ${LLCHARACTER_LIBRARIES} - ${LLIMAGE_LIBRARIES} - ${LLIMAGEJ2COJ_LIBRARIES} - ${LLINVENTORY_LIBRARIES} - ${LLMESSAGE_LIBRARIES} - ${LLPLUGIN_LIBRARIES} - ${LLPRIMITIVE_LIBRARIES} - ${LLRENDER_LIBRARIES} - ${FREETYPE_LIBRARIES} - ${LLUI_LIBRARIES} - ${LLVFS_LIBRARIES} - ${LLWINDOW_LIBRARIES} - ${LLXML_LIBRARIES} - ${LSCRIPT_LIBRARIES} - ${LLMATH_LIBRARIES} - ${LLCOMMON_LIBRARIES} - ${NDOF_LIBRARY} - ${viewer_LIBRARIES} - ${BOOST_FILESYSTEM_LIBRARY} - ${BOOST_PROGRAM_OPTIONS_LIBRARY} - ${BOOST_REGEX_LIBRARY} - ${BOOST_SIGNALS_LIBRARY} - ${BOOST_SYSTEM_LIBRARY} - ${DBUSGLIB_LIBRARIES} - ${OPENGL_LIBRARIES} - ${FMODWRAPPER_LIBRARY} - ${OPENGL_LIBRARIES} - ${JSONCPP_LIBRARIES} - ${SDL_LIBRARY} - ${SMARTHEAP_LIBRARY} - ${UI_LIBRARIES} - ${WINDOWS_LIBRARIES} - ${XMLRPCEPI_LIBRARIES} - ${ELFIO_LIBRARIES} - ${HUNSPELL_LIBRARY} - ) - -if (LINUX) - add_custom_command( - OUTPUT secondlife-stripped - COMMAND strip - ARGS --strip-debug -o secondlife-stripped ${VIEWER_BINARY_NAME} - DEPENDS ${VIEWER_BINARY_NAME} - ) - - set(product ${VIEWER_BRANDING_NAME_CAMELCASE}-${ARCH}-${viewer_VERSION}) - - add_custom_command( - OUTPUT ${product}.tar.bz2 - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} - --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} - --branding_id=${VIEWER_BRANDING_ID} - --installer_name=${product} - --arch=${ARCH} - --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged - --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched - --buildtype=${CMAKE_BUILD_TYPE} - DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - ) - - add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_gstreamer010 media_plugin_webkit) - - if (PACKAGE) - add_custom_target(package ALL DEPENDS ${product}.tar.bz2) - add_dependencies(package linux-crash-logger-strip-target) - endif (PACKAGE) -endif (LINUX) - -if (DARWIN) - set(product ${VIEWER_BRANDING_NAME}) - set_target_properties( - ${VIEWER_BINARY_NAME} - PROPERTIES - OUTPUT_NAME "${product}" - MACOSX_BUNDLE_INFO_STRING "A stable third-party Second Life viewer." - MACOSX_BUNDLE_ICON_FILE "${VIEWER_BRANDING_ID}.icns" - MACOSX_BUNDLE_GUI_IDENTIFIER "${VIEWER_BRANDING_NAME}" - MACOSX_BUNDLE_LONG_VERSION_STRING "${viewer_VERSION}" - MACOSX_BUNDLE_BUNDLE_NAME "${VIEWER_BRANDING_NAME}" - MACOSX_BUNDLE_SHORT_VERSION_STRING "${viewer_VERSION}" - MACOSX_BUNDLE_BUNDLE_VERSION "${viewer_VERSION}" - MACOSX_BUNDLE_COPYRIGHT "Copyright 2010 Balseraph Software Group" - ) - - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} POST_BUILD - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} - --actions=copy - --configuration=${CMAKE_CFG_INTDIR} - --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --branding_id=${VIEWER_BRANDING_ID} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app - --buildtype=${CMAKE_BUILD_TYPE} - DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - ) - - add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit) - - if (PACKAGE) - add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) - add_dependencies(package mac-updater mac-crash-logger) - - add_custom_command( - TARGET package POST_BUILD - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} - --configuration=${CMAKE_CFG_INTDIR} - --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} - --branding_id=${VIEWER_BRANDING_ID} - --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app - --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched - --buildtype=${CMAKE_BUILD_TYPE} - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - ) - - - add_custom_command( - TARGET package POST_BUILD - COMMAND ${PYTHON_EXECUTABLE} - ARGS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - --grid=${GRID} - --configuration=${CMAKE_CFG_INTDIR} - --channel=${VIEWER_CHANNEL} - --login_channel=${VIEWER_LOGIN_CHANNEL} - --branding_id=${VIEWER_BRANDING_ID} - --source=${CMAKE_CURRENT_SOURCE_DIR} - --artwork=${ARTWORK_DIR} - --build=${CMAKE_CURRENT_BINARY_DIR} - --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app - --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched - --buildtype=${CMAKE_BUILD_TYPE} - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py - ) - - endif (PACKAGE) -endif (DARWIN) - -if (INSTALL) - include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake) -endif (INSTALL) - -# Add tests -if (LL_TESTS) - ADD_VIEWER_BUILD_TEST(llagentaccess viewer) - #ADD_VIEWER_BUILD_TEST(llworldmap viewer) - #ADD_VIEWER_BUILD_TEST(llworldmipmap viewer) - ADD_VIEWER_BUILD_TEST(lltextureinfo viewer) - ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer) - ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer) - #ADD_VIEWER_COMM_BUILD_TEST(lltranslate viewer "") -endif (LL_TESTS) - -# Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py -if (WINDOWS) - - #~ get_target_property(BUILT_LLCOMMON llcommon LOCATION) - #~ add_custom_command( - #~ TARGET ${VIEWER_BINARY_NAME} POST_BUILD - #~ COMMAND ${CMAKE_COMMAND} - #~ ARGS - #~ -E - #~ copy_if_different - #~ ${BUILT_LLCOMMON} - #~ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - #~ COMMENT "Copying llcommon.dll to the runtime folder." - #~ ) - - get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${BUILT_SLPLUGIN} - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - COMMENT "Copying SLPlugin executable to the runtime folder." - ) - - get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${BUILT_WEBKIT_PLUGIN} - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin - COMMENT "Copying WebKit Plugin to the runtime folder." - ) - - get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION) - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${BUILT_QUICKTIME_PLUGIN} - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin - COMMENT "Copying Quicktime Plugin to the runtime folder." - ) - - # Copying the mime_types.xml file to app_settings - set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us") - set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings") - add_custom_command( - TARGET ${VIEWER_BINARY_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS - -E - copy_if_different - ${mime_types_source}/mime_types_windows.xml - ${mime_types_dest}/mime_types.xml - COMMENT "Copying mime_types_windows.xml to mime_types.xml." - ) - -endif (WINDOWS) - -if (DARWIN) -# Don't do this here -- it's taken care of by viewer_manifest.py -# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD -# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/ -# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib -# ) -endif (DARWIN) +# -*- cmake -*- + +project(viewer) + +include(00-Common) +include(Boost) +include(DBusGlib) +include(DirectX) +include(ELFIO) +include(FMOD) +include(OPENAL) +include(HUNSPELL) +include(FindOpenGL) +include(JsonCpp) +include(LLAddBuildTest) +include(LLAudio) +include(LLCharacter) +include(LLCommon) +include(LLImage) +include(LLImageJ2COJ) +include(LLInventory) +include(LLMath) +include(LLMessage) +include(LLPlugin) +include(LLPrimitive) +include(LLRender) +include(LLUI) +include(LLVFS) +include(LLWindow) +include(LLXML) +include(LScript) +include(Linking) +include(NDOF) +include(GooglePerfTools) +include(TemplateCheck) +include(UI) +include(LLKDU) +include(ViewerMiscLibs) +include(ViewerArtwork.cmake) + +if (WINDOWS) + include(CopyWinLibs) +endif (WINDOWS) + +include_directories( + ${DBUSGLIB_INCLUDE_DIRS} + ${HUNSPELL_INCLUDE_DIR} + ${ELFIO_INCLUDE_DIR} + ${JSONCPP_INCLUDE_DIRS} + ${LLAUDIO_INCLUDE_DIRS} + ${LLCHARACTER_INCLUDE_DIRS} + ${LLCOMMON_INCLUDE_DIRS} + ${LLIMAGE_INCLUDE_DIRS} + ${LLINVENTORY_INCLUDE_DIRS} + ${LLMATH_INCLUDE_DIRS} + ${LLMESSAGE_INCLUDE_DIRS} + ${LLPLUGIN_INCLUDE_DIRS} + ${LLPRIMITIVE_INCLUDE_DIRS} + ${LLRENDER_INCLUDE_DIRS} + ${LLUI_INCLUDE_DIRS} + ${LLVFS_INCLUDE_DIRS} + ${LLWINDOW_INCLUDE_DIRS} + ${LLXML_INCLUDE_DIRS} + ${LSCRIPT_INCLUDE_DIRS} + ${LSCRIPT_INCLUDE_DIRS}/lscript_compile + ) + +set(viewer_SOURCE_FILES + llviewerobjectbackup.cpp + slfloatermediafilter.cpp + floaterlocalassetbrowse.cpp + aoremotectrl.cpp + lgghunspell_wrapper.cpp + lggdicdownload.cpp + floaterao.cpp + floatervoicelicense.cpp + cofmgr.cpp + ascentdaycyclemanager.cpp + ascentfloatercontactgroups.cpp + ascentprefssys.cpp + ascentprefsvan.cpp + dhparam.cpp + dsaparam.cpp + emerald.cpp + emeraldboobutils.cpp + dofloaterhex.cpp + dohexeditor.cpp + floatersculptpreview.cpp + hbfloatergrouptitles.cpp + hgfloatertexteditor.cpp + hippogridmanager.cpp + hippofloaterxml.cpp + hippolimits.cpp + hipporestrequest.cpp + hippopanelgrids.cpp + jcfloaterareasearch.cpp + chatbar_as_cmdline.cpp + qtoolalign.cpp + llagent.cpp + llagentaccess.cpp + llagentdata.cpp + llagentlanguage.cpp + llagentpilot.cpp + llanimstatelabels.cpp + llappviewer.cpp + llassetconverter.cpp + llassetuploadresponders.cpp + llassetuploadqueue.cpp + llattachmentsmgr.cpp + llaudiosourcevo.cpp + llbbox.cpp + llbox.cpp + llbuildnewviewsscheduler.cpp + llcallbacklist.cpp + llcallingcard.cpp + llcaphttpsender.cpp + llchatbar.cpp + llclassifiedinfo.cpp + llclassifiedstatsresponder.cpp + llcloud.cpp + llcolorscheme.cpp + llcolorswatch.cpp + llcommandhandler.cpp + llcommandlineparser.cpp + llcompass.cpp + llcompilequeue.cpp + llconfirmationmanager.cpp + llconsole.cpp + llcontainerview.cpp + llcurrencyuimanager.cpp + llcylinder.cpp + lldebugmessagebox.cpp + lldebugview.cpp + lldelayedgestureerror.cpp + lldirpicker.cpp + lldrawable.cpp + lldrawpoolalpha.cpp + lldrawpoolavatar.cpp + lldrawpoolbump.cpp + lldrawpool.cpp + lldrawpoolground.cpp + lldrawpoolsimple.cpp + lldrawpoolsky.cpp + lldrawpoolterrain.cpp + lldrawpooltree.cpp + lldrawpoolwater.cpp + lldrawpoolwlsky.cpp + lldriverparam.cpp + lldynamictexture.cpp + llemote.cpp + lleventinfo.cpp + lleventnotifier.cpp + lleventpoll.cpp + llface.cpp + llfasttimerview.cpp + llfeaturemanager.cpp + llfilepicker.cpp + llfirstuse.cpp + llflexibleobject.cpp + llfloaterabout.cpp + llfloateractivespeakers.cpp + llfloateranimpreview.cpp + llfloaterauction.cpp + llfloateravatarinfo.cpp + llfloateravatarlist.cpp + llfloateravatarpicker.cpp + llfloateravatartextures.cpp + llfloaterbeacons.cpp + llfloaterblacklist.cpp + llviewerdisplayname.cpp + llfloaterdisplayname.cpp + llfloaterbuildoptions.cpp + llfloaterbulkpermission.cpp + llfloaterbump.cpp + llfloaterbuycontents.cpp + llfloaterbuy.cpp + llfloaterbuycurrency.cpp + llfloaterbuyland.cpp + llfloatercamera.cpp + llfloaterchat.cpp + llfloaterchatterbox.cpp + llfloaterclassified.cpp + llfloatercolorpicker.cpp + llfloatercustomize.cpp + llfloaterdaycycle.cpp + llfloaterdickdongs.cpp + llfloaterdirectory.cpp + llfloatereditui.cpp + llfloaterenvsettings.cpp + llfloaterevent.cpp + llfloaterexploreanimations.cpp + llfloaterexploresounds.cpp + llfloaterfriends.cpp + llfloaterfonttest.cpp + llfloatergesture.cpp + llfloatergodtools.cpp + llfloatergroupinfo.cpp + llfloatergroupinvite.cpp + llfloatergroups.cpp + llfloaterhandler.cpp + llfloaterhardwaresettings.cpp + llfloaterhtmlcurrency.cpp + llfloatermediabrowser.cpp + llfloaterhtmlsimple.cpp + llfloaterhud.cpp + llfloaterimagepreview.cpp + llfloaterinspect.cpp + llfloaterjoystick.cpp + llfloaterlagmeter.cpp + llfloaterland.cpp + llfloaterlandholdings.cpp + llfloaterlandmark.cpp + llfloatermap.cpp + llfloatermemleak.cpp + llfloatermessagelog.cpp + llfloatermute.cpp + llfloaternamedesc.cpp + llfloaternewim.cpp + llfloaternotificationsconsole.cpp + llfloaterobjectiminfo.cpp + llfloateropenobject.cpp + llfloaterparcel.cpp + llfloaterpermissionsmgr.cpp + llfloaterperms.cpp + llfloaterpostcard.cpp + llfloaterpostprocess.cpp + llfloaterpreference.cpp + llfloaterproperties.cpp + llfloaterregioninfo.cpp + llfloaterreporter.cpp + llfloaterscriptdebug.cpp + llfloatersellland.cpp + llfloatersettingsdebug.cpp + llfloatersnapshot.cpp + llfloaterstats.cpp + llfloatertelehub.cpp + llfloaterteleport.cpp + llfloaterteleporthistory.cpp + llfloatertest.cpp + llfloatertools.cpp + llfloatertopobjects.cpp + llfloatertos.cpp + llfloaterurldisplay.cpp + llfloaterurlentry.cpp + llfloatervfs.cpp + llfloatervfsexplorer.cpp + llfloatervoicedevicesettings.cpp + llfloaterwater.cpp + llfloaterwindlight.cpp + llfloaterworldmap.cpp + llfolderview.cpp + llfollowcam.cpp + llframestats.cpp + llframestatview.cpp + llgesturemgr.cpp + llgivemoney.cpp + llglsandbox.cpp + llgroupmgr.cpp + llgroupnotify.cpp + llhomelocationresponder.cpp + llhoverview.cpp + llhudeffectbeam.cpp + llhudeffect.cpp + llhudeffectlookat.cpp + llhudeffectpointat.cpp + llhudeffecttrail.cpp + llhudicon.cpp + llhudmanager.cpp + llhudobject.cpp + llhudrender.cpp + llhudtext.cpp + llhudview.cpp + llimpanel.cpp + llimview.cpp + llinventoryactions.cpp + llinventorybackup.cpp + llinventorybridge.cpp + llinventoryclipboard.cpp + llinventorymodel.cpp + llinventoryview.cpp + lljoystickbutton.cpp + lllandmarklist.cpp + lllocalinventory.cpp + lllogchat.cpp + llloginhandler.cpp + llsavedlogins.cpp + llmanip.cpp + llmaniprotate.cpp + llmanipscale.cpp + llmaniptranslate.cpp + llmediaremotectrl.cpp + llmemoryview.cpp + llmenucommands.cpp + llmimetypes.cpp + llmorphview.cpp + llmoveview.cpp + llmutelist.cpp + llnamebox.cpp + llnameeditor.cpp + llnamelistctrl.cpp + llnetmap.cpp + llnotify.cpp + lloverlaybar.cpp + llpanelaudioprefs.cpp + llpanelaudiovolume.cpp + llpanelavatar.cpp + llpanelclassified.cpp + llpanelcontents.cpp + llpaneldebug.cpp + llpaneldirbrowser.cpp + llpaneldirclassified.cpp + llpaneldirevents.cpp + llpaneldirfind.cpp + llpaneldirgroups.cpp + llpaneldirland.cpp + llpaneldirpeople.cpp + llpaneldirplaces.cpp + llpaneldirpopular.cpp + llpaneldisplay.cpp + llpanelevent.cpp + llpanelface.cpp + llpanelgeneral.cpp + llpanelgroup.cpp + llpanelgroupgeneral.cpp + llpanelgroupinvite.cpp + llpanelgrouplandmoney.cpp + llpanelgroupnotices.cpp + llpanelgrouproles.cpp + llpanelgroupvoting.cpp + llpanelinput.cpp + llpanelinventory.cpp + llpanelland.cpp + llpanellandaudio.cpp + llpanellandmedia.cpp + llpanellandobjects.cpp + llpanellandoptions.cpp + llpanellogin.cpp + llpanelmorph.cpp + llpanelmediahud.cpp + llpanelmsgs.cpp + llpanelnetwork.cpp + llpanelobject.cpp + llpanelpermissions.cpp + llpanelpick.cpp + llpanelplace.cpp + llpanelskins.cpp + llpanelvolume.cpp + llpanelweb.cpp + llparcelselection.cpp + llpatchvertexarray.cpp + llpolymesh.cpp + llpolymorph.cpp + llprefschat.cpp + llprefsim.cpp + llprefsvoice.cpp + llpreviewanim.cpp + llpreview.cpp + llpreviewgesture.cpp + llpreviewlandmark.cpp + llpreviewnotecard.cpp + llpreviewscript.cpp + llpreviewsound.cpp + llpreviewtexture.cpp + llproductinforequest.cpp + llprogressview.cpp + llregionposition.cpp + llremoteparcelrequest.cpp + llsavedsettingsglue.cpp + llselectmgr.cpp + llsky.cpp + llspatialpartition.cpp + llsprite.cpp + llsrv.cpp + llstartup.cpp + llstatbar.cpp + llstatgraph.cpp + llstatusbar.cpp + llstatview.cpp + llstylemap.cpp + llsurface.cpp + llsurfacepatch.cpp + lltexlayer.cpp + lltexturecache.cpp + lltexturectrl.cpp + lltexturefetch.cpp + lltextureinfo.cpp + lltextureinfodetails.cpp + lltexturestats.cpp + lltexturestatsuploader.cpp + lltextureview.cpp + lltoolbar.cpp + lltoolbrush.cpp + lltoolcomp.cpp + lltool.cpp + lltooldraganddrop.cpp + lltoolface.cpp + lltoolfocus.cpp + lltoolgrab.cpp + lltoolgun.cpp + lltoolindividual.cpp + lltoolmgr.cpp + lltoolmorph.cpp + lltoolobjpicker.cpp + lltoolpie.cpp + lltoolpipette.cpp + lltoolplacer.cpp + lltoolselect.cpp + lltoolselectland.cpp + lltoolselectrect.cpp + lltoolview.cpp + lltracker.cpp + lltrans.cpp + lltranslate.cpp + lluploaddialog.cpp + llurl.cpp + llurldispatcher.cpp + llurlhistory.cpp + llurlsimstring.cpp + llurlwhitelist.cpp + lluserauth.cpp + llvectorperfoptions.cpp + llvelocitybar.cpp + llviewchildren.cpp + llviewerassetstorage.cpp + llvieweraudio.cpp + llviewercamera.cpp + llviewercontrol.cpp + llviewerdisplay.cpp + llviewergenericmessage.cpp + llviewergesture.cpp + #llviewerimage.cpp + #llviewerimagelist.cpp + llviewerinventory.cpp + llviewerjointattachment.cpp + llviewerjoint.cpp + llviewerjointmesh.cpp + llviewerjointmesh_sse2.cpp + llviewerjointmesh_sse.cpp + llviewerjointmesh_vec.cpp + llviewerjoystick.cpp + llviewerkeyboard.cpp + llviewerlayer.cpp + llviewermedia.cpp + llviewermediafocus.cpp + llviewermedia_streamingaudio.cpp + llviewermenu.cpp + llviewermenufile.cpp + llviewermessage.cpp + llviewernetwork.cpp + llviewerobject.cpp + llviewerobjectlist.cpp + llviewerparcelmedia.cpp + llviewerparcelmediaautoplay.cpp + llviewerparcelmgr.cpp + llviewerparceloverlay.cpp + llviewerpartsim.cpp + llviewerpartsource.cpp + llviewerregion.cpp + llviewershadermgr.cpp + llviewerstats.cpp + llviewertexteditor.cpp + llviewertexture.cpp + llviewertextureanim.cpp + llviewertexturelist.cpp + llviewerthrottle.cpp + llviewervisualparam.cpp + llviewerwindow.cpp + llvlcomposition.cpp + llvlmanager.cpp + llvoavatar.cpp + llvoavatardefines.cpp + llvocache.cpp + llvoclouds.cpp + llvograss.cpp + llvoground.cpp + llvoiceclient.cpp + llvoiceremotectrl.cpp + llvoicevisualizer.cpp + llvoinventorylistener.cpp + llvopartgroup.cpp + llvosky.cpp + llvosurfacepatch.cpp + llvotextbubble.cpp + llvotree.cpp + llvovolume.cpp + llvowater.cpp + llvowlsky.cpp + llwatchdog.cpp + llwaterparammanager.cpp + llwaterparamset.cpp + llwearable.cpp + llwearablelist.cpp + llweb.cpp + llmediactrl.cpp + llwind.cpp + llwlanimator.cpp + llwldaycycle.cpp + llwlparammanager.cpp + llwlparamset.cpp + llworld.cpp + llworldmap.cpp + llworldmipmap.cpp + llmapresponders.cpp + llworldmapview.cpp + llxmlrpctransaction.cpp + noise.cpp + pipeline.cpp + scriptcounter.cpp + wlfPanel_AdvSettings.cpp + rlvhandler.cpp + rlvhelper.cpp + rlvcommon.cpp + rlvlocks.cpp + rlvinventory.cpp + rlvextensions.cpp + rlvfloaterbehaviour.cpp + rlvviewer2.cpp + shcommandhandler.cpp + ) + +# This gets renamed in the packaging step +set(VIEWER_BINARY_NAME "secondlife-bin" CACHE STRING + "The name of the viewer executable to create.") + +if ((LINUX OR DARWIN) AND NOT DARWIN_PPC) + # We can't set these flags for Darwin, because they get passed to + # the PPC compiler. Ugh. + + set_source_files_properties( + llviewerjointmesh_sse.cpp + PROPERTIES COMPILE_FLAGS "-msse -mfpmath=sse" + ) + set_source_files_properties( + llviewerjointmesh_sse2.cpp + PROPERTIES COMPILE_FLAGS "-msse2 -mfpmath=sse" + ) +endif ((LINUX OR DARWIN) AND NOT DARWIN_PPC) + +set(viewer_HEADER_FILES + CMakeLists.txt + ViewerInstall.cmake + + llviewerobjectbackup.h + slfloatermediafilter.h + floaterlocalassetbrowse.h + aoremotectrl.h + floaterao.h + floatervoicelicense.h + cofmgr.h + ascentdaycyclemanager.h + ascentfloatercontactgroups.h + ascentprefssys.h + ascentprefsvan.h + emerald.h + emeraldboobutils.h + dofloaterhex.h + dohexeditor.h + floatersculptpreview.h + hbfloatergrouptitles.h + hgfloatertexteditor.h + hippogridmanager.h + hippofloaterxml.h + hippolimits.h + hipporestrequest.h + hippopanelgrids.h + jcfloaterareasearch.h + lggdicdownload.h + lgghunspell_wrapper.h + chatbar_as_cmdline.h + qtoolalign.h + llagent.h + llagentaccess.h + llagentdata.h + llagentlanguage.h + llagentpilot.h + llanimstatelabels.h + llappearance.h + llappviewer.h + llassetconverter.h + llassetuploadresponders.h + llassetuploadqueue.h + llattachmentsmgr.h + llaudiosourcevo.h + llbbox.h + llbox.h + llbuildnewviewsscheduler.h + llcallbacklist.h + llcallingcard.h + llcaphttpsender.h + llchatbar.h + llclassifiedinfo.h + llclassifiedstatsresponder.h + llcloud.h + llcolorscheme.h + llcolorswatch.h + llcommandhandler.h + llcommandlineparser.h + llcompass.h + llcompilequeue.h + llconfirmationmanager.h + llconsole.h + llcontainerview.h + llcurrencyuimanager.h + llcylinder.h + lldebugmessagebox.h + lldebugview.h + lldelayedgestureerror.h + lldirpicker.h + lldrawable.h + lldrawpool.h + lldrawpoolalpha.h + lldrawpoolavatar.h + lldrawpoolbump.h + lldrawpoolclouds.h + lldrawpoolground.h + lldrawpoolsimple.h + lldrawpoolsky.h + lldrawpoolterrain.h + lldrawpooltree.h + lldrawpoolwater.h + lldrawpoolwlsky.h + lldriverparam.h + lldynamictexture.h + llemote.h + lleventinfo.h + lleventnotifier.h + lleventpoll.h + llface.h + llfasttimerview.h + llfeaturemanager.h + llfilepicker.h + llfirstuse.h + llflexibleobject.h + llfloaterabout.h + llfloateractivespeakers.h + llfloateranimpreview.h + llfloaterauction.h + llfloateravatarinfo.h + llfloateravatarlist.h + llfloateravatarpicker.h + llfloateravatartextures.h + llfloaterbeacons.h + llfloaterblacklist.h + llviewerdisplayname.h + llfloaterdisplayname.h + llfloaterbuildoptions.h + llfloaterbulkpermission.h + llfloaterbump.h + llfloaterbuy.h + llfloaterbuycontents.h + llfloaterbuycurrency.h + llfloaterbuyland.h + llfloatercamera.h + llfloaterchat.h + llfloaterchatterbox.h + llfloaterclassified.h + llfloatercolorpicker.h + llfloatercustomize.h + llfloaterdaycycle.h + llfloaterdickdongs.h + llfloaterdirectory.h + llfloatereditui.h + llfloaterenvsettings.h + llfloaterexploreanimations.h + llfloaterexploresounds.h + llfloaterevent.h + llfloaterfonttest.h + llfloaterfriends.h + llfloatergesture.h + llfloatergodtools.h + llfloatergroupinfo.h + llfloatergroupinvite.h + llfloatergroups.h + llfloaterhandler.h + llfloaterhardwaresettings.h + llfloaterhtmlcurrency.h + llfloatermediabrowser.h + llfloaterhtmlsimple.h + llfloaterhud.h + llfloaterimagepreview.h + llfloaterinspect.h + llfloaterjoystick.h + llfloaterlagmeter.h + llfloaterland.h + llfloaterlandholdings.h + llfloaterlandmark.h + llfloatermap.h + llfloatermemleak.h + llfloatermessagelog.h + llfloatermute.h + llfloaternamedesc.h + llfloaternewim.h + llfloaternotificationsconsole.h + llfloaterobjectiminfo.h + llfloateropenobject.h + llfloaterparcel.h + llfloaterpermissionsmgr.h + llfloaterpostcard.h + llfloaterpostprocess.h + llfloaterpreference.h + llfloaterperms.h + llfloaterproperties.h + llfloaterregioninfo.h + llfloaterreporter.h + llfloaterscriptdebug.h + llfloatersellland.h + llfloatersettingsdebug.h + llfloatersnapshot.h + llfloaterstats.h + llfloatertelehub.h + llfloaterteleport.h + llfloaterteleporthistory.h + llfloatertest.h + llfloatertools.h + llfloatertopobjects.h + llfloatertos.h + llfloaterurldisplay.h + llfloaterurlentry.h + llfloatervfs.h + llfloatervfsexplorer.h + llfloatervoicedevicesettings.h + llfloaterwater.h + llfloaterwindlight.h + llfloaterworldmap.h + llfolderview.h + llfollowcam.h + llframestats.h + llframestatview.h + llgesturemgr.h + llgivemoney.h + llgroupmgr.h + llgroupnotify.h + llhomelocationresponder.h + llhoverview.h + llhudeffect.h + llhudeffectbeam.h + llhudeffectlookat.h + llhudeffectpointat.h + llhudeffecttrail.h + llhudicon.h + llhudmanager.h + llhudobject.h + llhudrender.h + llhudtext.h + llhudview.h + llimpanel.h + llimview.h + llinventorybackup.h + llinventorybridge.h + llinventoryclipboard.h + llinventorymodel.h + llinventoryview.h + lljoystickbutton.h + lllandmarklist.h + lllightconstants.h + lllocalinventory.h + lllogchat.h + llloginhandler.h + llsavedlogins.h + llmanip.h + llmaniprotate.h + llmanipscale.h + llmaniptranslate.h + llmediaremotectrl.h + llmemoryview.h + llmenucommands.h + llmimetypes.h + llmorphview.h + llmoveview.h + llmutelist.h + llnamebox.h + llnameeditor.h + llnamelistctrl.h + llnetmap.h + llnotify.h + lloverlaybar.h + llpanelaudioprefs.h + llpanelaudiovolume.h + llpanelavatar.h + llpanelclassified.h + llpanelcontents.h + llpaneldebug.h + llpaneldirbrowser.h + llpaneldirclassified.h + llpaneldirevents.h + llpaneldirfind.h + llpaneldirgroups.h + llpaneldirland.h + llpaneldirpeople.h + llpaneldirplaces.h + llpaneldirpopular.h + llpaneldisplay.h + llpanelevent.h + llpanelface.h + llpanelgeneral.h + llpanelgroup.h + llpanelgroupgeneral.h + llpanelgroupinvite.h + llpanelgrouplandmoney.h + llpanelgroupnotices.h + llpanelgrouproles.h + llpanelgroupvoting.h + llpanelinput.h + llpanelinventory.h + llpanelland.h + llpanellandaudio.h + llpanellandmedia.h + llpanellandobjects.h + llpanellandoptions.h + llpanelLCD.h + llpanellogin.h + llpanelmorph.h + llpanelmediahud.h + llpanelmsgs.h + llpanelnetwork.h + llpanelobject.h + llpanelpermissions.h + llpanelpick.h + llpanelplace.h + llpanelskins.h + llpanelvolume.h + llpanelweb.h + llparcelselection.h + llpatchvertexarray.h + llpolymesh.h + llpolymorph.h + llprefschat.h + llprefsim.h + llprefsvoice.h + llpreview.h + llpreviewanim.h + llpreviewgesture.h + llpreviewlandmark.h + llpreviewnotecard.h + llpreviewscript.h + llpreviewsound.h + llpreviewtexture.h + llproductinforequest.h + llprogressview.h + llregionposition.h + llremoteparcelrequest.h + llresourcedata.h + llsavedsettingsglue.h + llselectmgr.h + llsky.h + llspatialpartition.h + llsprite.h + llsrv.h + llstartup.h + llstatbar.h + llstatgraph.h + llstatusbar.h + llstatview.h + llstylemap.h + llsurface.h + llsurfacepatch.h + lltable.h + lltexlayer.h + lltexturecache.h + lltexturectrl.h + lltexturefetch.h + lltextureinfo.h + lltextureinfodetails.h + lltexturestats.h + lltexturestatsuploader.h + lltextureview.h + lltool.h + lltoolbar.h + lltoolbrush.h + lltoolcomp.h + lltooldraganddrop.h + lltoolface.h + lltoolfocus.h + lltoolgrab.h + lltoolgun.h + lltoolindividual.h + lltoolmgr.h + lltoolmorph.h + lltoolobjpicker.h + lltoolpie.h + lltoolpipette.h + lltoolplacer.h + lltoolselect.h + lltoolselectland.h + lltoolselectrect.h + lltoolview.h + lltracker.h + lltrans.h + lltranslate.h + lluiconstants.h + lluploaddialog.h + llurl.h + llurldispatcher.h + llurlhistory.h + llurlsimstring.h + llurlwhitelist.h + lluserauth.h + llvectorperfoptions.h + llvelocitybar.h + llviewchildren.h + llviewerassetstorage.h + llvieweraudio.h + llviewerbuild.h + llviewercamera.h + llviewercontrol.h + llviewerdisplay.h + llviewergenericmessage.h + llviewergesture.h + #llviewerimage.h + #llviewerimagelist.h + llviewerinventory.h + llviewerjoint.h + llviewerjointattachment.h + llviewerjointmesh.h + llviewerjoystick.h + llviewerkeyboard.h + llviewerlayer.h + llviewermedia.h + llviewermediaobserver.h + llviewermediafocus.h + llviewermenu.h + llviewermenufile.h + llviewermessage.h + llviewernetwork.h + llviewerobject.h + llviewerobjectlist.h + llviewerparcelmedia.h + llviewerparcelmediaautoplay.h + llviewerparcelmgr.h + llviewerparceloverlay.h + llviewerpartsim.h + llviewerpartsource.h + llviewerprecompiledheaders.h + llviewerregion.h + llviewershadermgr.h + llviewerstats.h + llviewertexteditor.h + llviewertexture.h + llviewertextureanim.h + llviewertexturelist.h + llviewerthrottle.h + llviewervisualparam.h + llviewerwindow.h + llvlcomposition.h + llvlmanager.h + llvoavatar.h + llvoavatardefines.h + llvocache.h + llvoclouds.h + llvograss.h + llvoground.h + llvoiceclient.h + llvoiceremotectrl.h + llvoicevisualizer.h + llvoinventorylistener.h + llvopartgroup.h + llvosky.h + llvosurfacepatch.h + llvotextbubble.h + llvotree.h + llvotreenew.h + llvovolume.h + llvowater.h + llvowlsky.h + llwatchdog.h + llwaterparammanager.h + llwaterparamset.h + llwearable.h + llwearablelist.h + llweb.h + llmediactrl.h + llwind.h + llwindebug.h + llwlanimator.h + llwldaycycle.h + llwlparammanager.h + llwlparamset.h + llworld.h + llworldmap.h + llworldmipmap.h + llmapresponders.h + llworldmapview.h + llxmlrpctransaction.h + macmain.h + noise.h + pipeline.h + randgauss.h + scriptcounter.h + VertexCache.h + VorbisFramework.h + wlfPanel_AdvSettings.h + rlvdefines.h + rlvhandler.h + rlvhelper.h + rlvcommon.h + rlvlocks.h + rlvinventory.h + rlvextensions.h + rlvfloaterbehaviour.h + rlvviewer2.h + shcommandhandler.h + ) + +source_group("CMake Rules" FILES ViewerInstall.cmake) + +if (DARWIN) + LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp) + + find_library(AGL_LIBRARY AGL) + find_library(APPKIT_LIBRARY AppKit) + find_library(COCOA_LIBRARY Cocoa) + find_library(IOKIT_LIBRARY IOKit) + + set(viewer_LIBRARIES + ${COCOA_LIBRARY} + ${AGL_LIBRARY} + ${IOKIT_LIBRARY} + ) + + # Add resource files to the project. + set(viewer_RESOURCE_FILES + ${VIEWER_BRANDING_ID}.icns + macview.r + gpu_table.txt + Info-${VIEWER_BRANDING_NAME_CAMELCASE}.plist + SecondLife.nib/ + # CMake doesn't seem to support Xcode language variants well just yet + English.lproj/InfoPlist.strings + English.lproj/language.txt + German.lproj/language.txt + Japanese.lproj/language.txt + Korean.lproj/language.txt + ) + set_source_files_properties( + ${viewer_RESOURCE_FILES} + PROPERTIES + HEADER_FILE_ONLY TRUE + #MACOSX_PACKAGE_LOCATION Resources #don't do this! this tells cmake to copy the files. + ) + SOURCE_GROUP("Resources" FILES ${viewer_RESOURCE_FILES}) + list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES}) +endif (DARWIN) + +if (LINUX) + LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp) + LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -luuid -lrt -laprutil-1 -lfontconfig -Wl,--as-needed") + + set(viewer_LIBRARIES + Xinerama + ) +endif (LINUX) + +if (WINDOWS) + list(APPEND viewer_SOURCE_FILES + llappviewerwin32.cpp + llwindebug.cpp + ) + + list(APPEND viewer_HEADER_FILES + llappviewerwin32.h + llwindebug.h + ) + + # precompiled header configuration + # llviewerprecompiledheaders.cpp generates + # the .pch file. + # All sources added to viewer_SOURCE_FILES + # at this point use it. + set_source_files_properties(llviewerprecompiledheaders.cpp + PROPERTIES + COMPILE_FLAGS "/Ycllviewerprecompiledheaders.h" + ) + foreach( src_file ${viewer_SOURCE_FILES} ) + set_source_files_properties( + ${src_file} + PROPERTIES + COMPILE_FLAGS "/Yullviewerprecompiledheaders.h" + ) + endforeach( src_file ${viewer_SOURCE_FILES} ) + list(APPEND viewer_SOURCE_FILES llviewerprecompiledheaders.cpp) + + # Add resource files to the project. + # viewerRes.rc is the only buildable file, but + # the rest are all dependencies of it. + set(viewer_RESOURCE_FILES + ${ARTWORK_DIR}/res/arrow.cur + ${ARTWORK_DIR}/res/arrowcop.cur + ${ARTWORK_DIR}/res/arrowcopmulti.cur + ${ARTWORK_DIR}/res/arrowdrag.cur + ${ARTWORK_DIR}/res/circleandline.cur + ${ARTWORK_DIR}/res/icon1.ico + ${ARTWORK_DIR}/res/llarrow.cur + ${ARTWORK_DIR}/res/llarrowdrag.cur + ${ARTWORK_DIR}/res/llarrowdragmulti.cur + ${ARTWORK_DIR}/res/llarrowlocked.cur + ${ARTWORK_DIR}/res/llgrablocked.cur + ${ARTWORK_DIR}/res/llno.cur + ${ARTWORK_DIR}/res/llnolocked.cur + ${ARTWORK_DIR}/res/lltoolcamera.cur + ${ARTWORK_DIR}/res/lltoolcreate.cur + ${ARTWORK_DIR}/res/lltoolfocus.cur + ${ARTWORK_DIR}/res/lltoolgrab.cur + ${ARTWORK_DIR}/res/lltoolland.cur + ${ARTWORK_DIR}/res/lltoolpan.cur + ${ARTWORK_DIR}/res/lltoolpipette.cur + ${ARTWORK_DIR}/res/lltoolrotate.cur + ${ARTWORK_DIR}/res/lltoolscale.cur + ${ARTWORK_DIR}/res/lltooltranslate.cur + ${ARTWORK_DIR}/res/lltoolzoomin.cur + ${ARTWORK_DIR}/res/lltoolzoomout.cur + ${ARTWORK_DIR}/res/snowglobe_icon.BMP + ${ARTWORK_DIR}/res/snowglobe_icon.ico + ${ARTWORK_DIR}/res/resource.h + ${ARTWORK_DIR}/res/toolbuy.cur + ${ARTWORK_DIR}/res/toolopen.cur + ${ARTWORK_DIR}/res/toolpay.cur + ${ARTWORK_DIR}/res/toolpickobject.cur + ${ARTWORK_DIR}/res/toolpickobject2.cur + ${ARTWORK_DIR}/res/toolpickobject3.cur + ${ARTWORK_DIR}/res/toolpipette.cur + ${ARTWORK_DIR}/res/toolsit.cur + ) + + set_source_files_properties(${viewer_RESOURCE_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + + if(NOT ARTWORK_IN_SOURCE) + # The resource compiler needs to find resources here. + include_directories(${ARTWORK_DIR}/res) + endif(NOT ARTWORK_IN_SOURCE) + + if (MSVC71 OR MSVC80 AND NOT VISTA_ICON) + set(viewer_RESOURCE_FILES + res/resource.h + res/viewerRes_bc.rc + ${viewer_RESOURCE_FILES} + ) + else (MSVC71 OR MSVC80 AND NOT VISTA_ICON) + set(viewer_RESOURCE_FILES + res/resource.h + res/viewerRes.rc + ${viewer_RESOURCE_FILES} + ) + endif (MSVC71 OR MSVC80 AND NOT VISTA_ICON) + + SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES}) + + list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES}) + + find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR}) + find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR}) + mark_as_advanced( + DINPUT_LIBRARY + DXGUID_LIBRARY + ) + + set(viewer_LIBRARIES + advapi32 + comdlg32 + ${DINPUT_LIBRARY} + ${DXGUID_LIBRARY} + fmodvc + gdi32 + kernel32 + odbc32 + odbccp32 + ole32 + oleaut32 + opengl32 + shell32 + user32 + Vfw32 + winspool + ) + + find_library(INTEL_MEMOPS_LIBRARY + NAMES ll_intel_memops + PATHS + optimized ${ARCH_PREBUILT_DIRS_RELEASE} + debug ${ARCH_PREBUILT_DIRS_DEBUG} + ) + mark_as_advanced(INTEL_MEMOPS_LIBRARY) + + if (INTEL_MEMOPS_LIBRARY) + list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY}) + endif (INTEL_MEMOPS_LIBRARY) + + use_prebuilt_binary(dbghelp) +endif (WINDOWS) + +# Add the xui files. This is handy for searching for xui elements +# from within the IDE. + +file(GLOB viewer_XUI_FILE_GLOB_LIST + ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en-us/*.xml) + +set(viewer_XUI_FILES + + ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/colors.xml + ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/colors_base.xml + + + + ) + +list(APPEND viewer_XUI_FILES ${viewer_XUI_FILE_GLOB_LIST}) +list(SORT viewer_XUI_FILES) + +source_group("XUI Files" FILES ${viewer_XUI_FILES}) + +set_source_files_properties(${viewer_XUI_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +list(APPEND viewer_SOURCE_FILES ${viewer_XUI_FILES}) + +set(viewer_APPSETTINGS_FILES + app_settings/anim.ini + app_settings/cmd_line.xml + app_settings/grass.xml + app_settings/high_graphics.xml + app_settings/keys.ini + app_settings/keywords.ini + app_settings/logcontrol.xml + app_settings/low_graphics.xml + app_settings/mid_graphics.xml + app_settings/settings.xml + app_settings/settings_crash_behavior.xml + app_settings/settings_files.xml + app_settings/settings_per_account.xml + app_settings/std_bump.ini + app_settings/trees.xml + app_settings/ultra_graphics.xml + app_settings/viewerart.xml + ${CMAKE_SOURCE_DIR}/../etc/message.xml + ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg + ) + +source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES}) + +set_source_files_properties(${viewer_APPSETTINGS_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +list(APPEND viewer_SOURCE_FILES ${viewer_APPSETTINGS_FILES}) + +if(ARTWORK_EXISTS) + set(viewer_CHARACTER_FILES + ${ARTWORK_DIR}/character/attentions.xml + ${ARTWORK_DIR}/character/attentionsN.xml + ${ARTWORK_DIR}/character/avatar_lad.xml + ${ARTWORK_DIR}/character/avatar_skeleton.xml + ${ARTWORK_DIR}/character/genepool.xml + ) + + source_group("Character File" FILES ${viewer_CHARACTER_FILES}) + + set_source_files_properties(${viewer_CHARACTER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + + list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES}) +endif(ARTWORK_EXISTS) + +if (WINDOWS) + file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi) + + source_group("Installer Files" FILES ${viewer_INSTALLER_FILES}) + + set_source_files_properties(${viewer_INSTALLER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + + list(APPEND viewer_SOURCE_FILES ${viewer_INSTALLER_FILES}) +endif (WINDOWS) + +if (OPENAL) + set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL") +endif (OPENAL) + +if (FMOD) + set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD") + + if (NOT WINDOWS) + set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp) + add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES}) + set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY}) + if (DARWIN) + list(APPEND fmodwrapper_needed_LIBRARIES ${CARBON_LIBRARY}) + set_target_properties( + fmodwrapper + PROPERTIES + BUILD_WITH_INSTALL_RPATH 1 + INSTALL_NAME_DIR "@executable_path/../Resources" + LINK_FLAGS "-unexported_symbols_list \"${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp\"" + ) + endif (DARWIN) + set(FMODWRAPPER_LIBRARY fmodwrapper) + target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES}) + endif (NOT WINDOWS) +endif (FMOD) + +set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}") + +list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES}) + +set_source_files_properties(${viewer_HEADER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +add_executable(${VIEWER_BINARY_NAME} + WIN32 + MACOSX_BUNDLE + ${viewer_SOURCE_FILES} + ) + +if (!DISABLE_TEMPLATE_CHECK) + check_message_template(${VIEWER_BINARY_NAME}) +endif (!DISABLE_TEMPLATE_CHECK) + +if (LLKDU_LIBRARY) + add_dependencies(${VIEWER_BINARY_NAME} ${LLKDU_LIBRARY}) +endif (LLKDU_LIBRARY) + +# We package by default on Linux so we can run from newview/packaged. +if (LINUX) + set(PACKAGE_DEFAULT ON) +else (LINUX) + set(PACKAGE_DEFAULT OFF) +endif (LINUX) +set(PACKAGE ${PACKAGE_DEFAULT} CACHE BOOL + "Add a package target that builds an installer package.") + +if (WINDOWS) + if(MSVC71) + set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES") + else(MSVC71) + set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map") + endif(MSVC71) + + set_target_properties(${VIEWER_BINARY_NAME} + PROPERTIES + LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${GOOGLE_PERFTOOLS_LINKER_FLAGS}" + LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\"" + LINK_FLAGS_RELEASE ${release_flags} + ) + + # sets the 'working directory' for debugging from visual studio. + if (NOT UNATTENDED) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} PRE_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe + ARGS + --solution + ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln + --workingdir + ${VIEWER_BINARY_NAME} + ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." + ) + endif (NOT UNATTENDED) + + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} PRE_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg + COMMENT "Copying message_template.msg to the runtime folder." + ) + + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} PRE_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml + COMMENT "Copying message.xml to the runtime folder." + ) + + add_dependencies(${VIEWER_BINARY_NAME} copy_win_libs) + + if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) + add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts) + endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) + + add_custom_command( + OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --configuration=${CMAKE_CFG_INTDIR} + --channel=${VIEWER_CHANNEL} + --login_channel=${VIEWER_LOGIN_CHANNEL} + --branding_id=${VIEWER_BRANDING_ID} + --grid=${GRID} + --source=${CMAKE_CURRENT_SOURCE_DIR} + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} + --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat + DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + ) + + add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit) + + if (PACKAGE) + add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat) + add_dependencies(package windows-updater windows-crash-logger) + endif (PACKAGE) +endif (WINDOWS) + +target_link_libraries(${VIEWER_BINARY_NAME} + ${GOOGLE_PERFTOOLS_LIBRARIES} + ${LLAUDIO_LIBRARIES} + ${LLCHARACTER_LIBRARIES} + ${LLIMAGE_LIBRARIES} + ${LLIMAGEJ2COJ_LIBRARIES} + ${LLINVENTORY_LIBRARIES} + ${LLMESSAGE_LIBRARIES} + ${LLPLUGIN_LIBRARIES} + ${LLPRIMITIVE_LIBRARIES} + ${LLRENDER_LIBRARIES} + ${FREETYPE_LIBRARIES} + ${LLUI_LIBRARIES} + ${LLVFS_LIBRARIES} + ${LLWINDOW_LIBRARIES} + ${LLXML_LIBRARIES} + ${LSCRIPT_LIBRARIES} + ${LLMATH_LIBRARIES} + ${LLCOMMON_LIBRARIES} + ${NDOF_LIBRARY} + ${viewer_LIBRARIES} + ${BOOST_FILESYSTEM_LIBRARY} + ${BOOST_PROGRAM_OPTIONS_LIBRARY} + ${BOOST_REGEX_LIBRARY} + ${BOOST_SIGNALS_LIBRARY} + ${BOOST_SYSTEM_LIBRARY} + ${DBUSGLIB_LIBRARIES} + ${OPENGL_LIBRARIES} + ${FMODWRAPPER_LIBRARY} + ${OPENGL_LIBRARIES} + ${JSONCPP_LIBRARIES} + ${SDL_LIBRARY} + ${SMARTHEAP_LIBRARY} + ${UI_LIBRARIES} + ${WINDOWS_LIBRARIES} + ${XMLRPCEPI_LIBRARIES} + ${ELFIO_LIBRARIES} + ${HUNSPELL_LIBRARY} + ) + +if (LINUX) + add_custom_command( + OUTPUT secondlife-stripped + COMMAND strip + ARGS --strip-debug -o secondlife-stripped ${VIEWER_BINARY_NAME} + DEPENDS ${VIEWER_BINARY_NAME} + ) + + set(product ${VIEWER_BRANDING_NAME_CAMELCASE}-${ARCH}-${viewer_VERSION}) + + add_custom_command( + OUTPUT ${product}.tar.bz2 + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --grid=${GRID} + --channel=${VIEWER_CHANNEL} + --login_channel=${VIEWER_LOGIN_CHANNEL} + --branding_id=${VIEWER_BRANDING_ID} + --installer_name=${product} + --arch=${ARCH} + --source=${CMAKE_CURRENT_SOURCE_DIR} + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged + --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched + --buildtype=${CMAKE_BUILD_TYPE} + DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + ) + + add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_gstreamer010 media_plugin_webkit) + + if (PACKAGE) + add_custom_target(package ALL DEPENDS ${product}.tar.bz2) + add_dependencies(package linux-crash-logger-strip-target) + endif (PACKAGE) +endif (LINUX) + +if (DARWIN) + set(product ${VIEWER_BRANDING_NAME}) + set_target_properties( + ${VIEWER_BINARY_NAME} + PROPERTIES + OUTPUT_NAME "${product}" + MACOSX_BUNDLE_INFO_STRING "A stable third-party Second Life viewer." + MACOSX_BUNDLE_ICON_FILE "${VIEWER_BRANDING_ID}.icns" + MACOSX_BUNDLE_GUI_IDENTIFIER "${VIEWER_BRANDING_NAME}" + MACOSX_BUNDLE_LONG_VERSION_STRING "${viewer_VERSION}" + MACOSX_BUNDLE_BUNDLE_NAME "${VIEWER_BRANDING_NAME}" + MACOSX_BUNDLE_SHORT_VERSION_STRING "${viewer_VERSION}" + MACOSX_BUNDLE_BUNDLE_VERSION "${viewer_VERSION}" + MACOSX_BUNDLE_COPYRIGHT "Copyright 2010 Balseraph Software Group" + ) + + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --grid=${GRID} + --actions=copy + --configuration=${CMAKE_CFG_INTDIR} + --source=${CMAKE_CURRENT_SOURCE_DIR} + --artwork=${ARTWORK_DIR} + --branding_id=${VIEWER_BRANDING_ID} + --build=${CMAKE_CURRENT_BINARY_DIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app + --buildtype=${CMAKE_BUILD_TYPE} + DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + ) + + add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit) + + if (PACKAGE) + add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) + add_dependencies(package mac-updater mac-crash-logger) + + add_custom_command( + TARGET package POST_BUILD + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --grid=${GRID} + --configuration=${CMAKE_CFG_INTDIR} + --channel=${VIEWER_CHANNEL} + --login_channel=${VIEWER_LOGIN_CHANNEL} + --branding_id=${VIEWER_BRANDING_ID} + --source=${CMAKE_CURRENT_SOURCE_DIR} + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app + --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched + --buildtype=${CMAKE_BUILD_TYPE} + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + ) + + + add_custom_command( + TARGET package POST_BUILD + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --grid=${GRID} + --configuration=${CMAKE_CFG_INTDIR} + --channel=${VIEWER_CHANNEL} + --login_channel=${VIEWER_LOGIN_CHANNEL} + --branding_id=${VIEWER_BRANDING_ID} + --source=${CMAKE_CURRENT_SOURCE_DIR} + --artwork=${ARTWORK_DIR} + --build=${CMAKE_CURRENT_BINARY_DIR} + --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app + --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched + --buildtype=${CMAKE_BUILD_TYPE} + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + ) + + endif (PACKAGE) +endif (DARWIN) + +if (INSTALL) + include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake) +endif (INSTALL) + +# Add tests +if (LL_TESTS) + ADD_VIEWER_BUILD_TEST(llagentaccess viewer) + #ADD_VIEWER_BUILD_TEST(llworldmap viewer) + #ADD_VIEWER_BUILD_TEST(llworldmipmap viewer) + ADD_VIEWER_BUILD_TEST(lltextureinfo viewer) + ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer) + ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer) + #ADD_VIEWER_COMM_BUILD_TEST(lltranslate viewer "") +endif (LL_TESTS) + +# Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py +if (WINDOWS) + + #~ get_target_property(BUILT_LLCOMMON llcommon LOCATION) + #~ add_custom_command( + #~ TARGET ${VIEWER_BINARY_NAME} POST_BUILD + #~ COMMAND ${CMAKE_COMMAND} + #~ ARGS + #~ -E + #~ copy_if_different + #~ ${BUILT_LLCOMMON} + #~ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} + #~ COMMENT "Copying llcommon.dll to the runtime folder." + #~ ) + + get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${BUILT_SLPLUGIN} + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} + COMMENT "Copying SLPlugin executable to the runtime folder." + ) + + get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${BUILT_WEBKIT_PLUGIN} + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin + COMMENT "Copying WebKit Plugin to the runtime folder." + ) + + get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${BUILT_QUICKTIME_PLUGIN} + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin + COMMENT "Copying Quicktime Plugin to the runtime folder." + ) + + # Copying the mime_types.xml file to app_settings + set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us") + set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings") + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS + -E + copy_if_different + ${mime_types_source}/mime_types_windows.xml + ${mime_types_dest}/mime_types.xml + COMMENT "Copying mime_types_windows.xml to mime_types.xml." + ) + +endif (WINDOWS) + +if (DARWIN) +# Don't do this here -- it's taken care of by viewer_manifest.py +# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/ +# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib +# ) +endif (DARWIN) diff --git a/indra/newview/app_settings/mime_types.xml b/indra/newview/app_settings/mime_types.xml index 715ac02b6..4a7a6e17a 100644 --- a/indra/newview/app_settings/mime_types.xml +++ b/indra/newview/app_settings/mime_types.xml @@ -1,445 +1,445 @@ - - - - (Unknown) - - - none - - - media_plugin_webkit - - - - - icn_media_web.tga - - - text/html - - - This location has Web content - - - Show Web content - - - true - - - false - - - - - - video/* - - - icn_media_movie.tga - - - There is a movie to play here - - - Play movie - - - false - - - true - - - - - - icn_media_web.tga - - - image/* - - - There is an image at this location - - - View this location's image - - - false - - - false - - - - - - icn_media_web.tga - - - audio/* - - - There is audio at this location - - - Play this location's audio - - - false - - - true - - - - - - movie - - - media_plugin_quicktime - - - - - - none - - - media_plugin_quicktime - - - - - - none - - - - - - audio - - - - - - movie - - - - - - image - - - - - - movie - - - media_plugin_quicktime - - - - - - web - - - - - - audio - - - - - - image - - - - - - image - - - - - - image - - - - - - movie - - - media_plugin_quicktime - - - - - - web - - - - - - image - - - - - - audio - - - media_plugin_quicktime - - - - - - audio - - - media_plugin_quicktime - - - - - - audio - - - media_plugin_quicktime - - - - - - audio - - - media_plugin_quicktime - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - image - - - media_plugin_webkit - - - - - - web - - - media_plugin_webkit - - - - - - text - - - media_plugin_webkit - - - - - - text - - - media_plugin_webkit - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - - - - movie - - - media_plugin_quicktime - - - + + + + (Unknown) + + + none + + + media_plugin_webkit + + + + + icn_media_web.tga + + + text/html + + + This location has Web content + + + Show Web content + + + true + + + false + + + + + + video/* + + + icn_media_movie.tga + + + There is a movie to play here + + + Play movie + + + false + + + true + + + + + + icn_media_web.tga + + + image/* + + + There is an image at this location + + + View this location's image + + + false + + + false + + + + + + icn_media_web.tga + + + audio/* + + + There is audio at this location + + + Play this location's audio + + + false + + + true + + + + + + movie + + + media_plugin_quicktime + + + + + + none + + + media_plugin_quicktime + + + + + + none + + + + + + audio + + + + + + movie + + + + + + image + + + + + + movie + + + media_plugin_quicktime + + + + + + web + + + + + + audio + + + + + + image + + + + + + image + + + + + + image + + + + + + movie + + + media_plugin_quicktime + + + + + + web + + + + + + image + + + + + + audio + + + media_plugin_quicktime + + + + + + audio + + + media_plugin_quicktime + + + + + + audio + + + media_plugin_quicktime + + + + + + audio + + + media_plugin_quicktime + + + + + + image + + + media_plugin_webkit + + + + + + image + + + media_plugin_webkit + + + + + + image + + + media_plugin_webkit + + + + + + image + + + media_plugin_webkit + + + + + + image + + + media_plugin_webkit + + + + + + image + + + media_plugin_webkit + + + + + + web + + + media_plugin_webkit + + + + + + text + + + media_plugin_webkit + + + + + + text + + + media_plugin_webkit + + + + + + movie + + + media_plugin_quicktime + + + + + + movie + + + media_plugin_quicktime + + + + + + movie + + + media_plugin_quicktime + + + + + + movie + + + media_plugin_quicktime + + + + + + movie + + + media_plugin_quicktime + + + + + + movie + + + media_plugin_quicktime + + + diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 550eecce8..9e24ea23a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1,14126 +1,14126 @@ - - - - Include - - settings_ascent.xml - settings_ascent_coa.xml - settings_sh.xml - settings_rlv.xml - - - SpellDownloadURL - - Comment - Base url for download dictionaries - Persist - 1 - Type - String - Value - http://app.singularityviewer.org/dict/ - - SpellDisplay - - Comment - Turn on to highlight misspelled text in line edit boxes - Persist - 1 - Type - Boolean - Value - 1 - - SpellInstalled - - Comment - The list of installed dictionaries - Persist - 1 - Type - String - Value - EN_SL - - SpellBase - - Comment - The base dictionary to spell check with - Persist - 1 - Type - String - Value - English (United States of America) - - - ScriptsCanShowUI - - Comment - Allow LSL calls (such as LLMapDestination) to spawn viewer UI - Persist - 1 - Type - Boolean - Value - 1 - - FloaterObjectBackuptRect - - Comment - Rectangle for the object backup floater - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - - MediaEnableFilter - - Comment - Enable media domain filtering - Persist - 1 - Type - Boolean - Value - 0 - - MediaFilterRect - - Comment - Rectangle for Media Filter floater - Persist - 1 - Type - Rect - Value - - 0 - 100 - 100 - 100 - - - - UseServersideWindlightSettings - - Comment - Whether or not to use Windlight settings presented by the server. - Persist - 1 - Type - Boolean - Value - 1 - - - FloaterLocalbitmapbrowserRect - - Comment - LOLRectangle - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - - - - - ShowAOSitPopup - - Comment - Show AO sit popup - Persist - 1 - Type - Boolean - Value - 0 - - EnableAORemote - - Comment - Enable AO quick access remote in toolbar - Persist - 1 - Type - Boolean - Value - 0 - - - DisableInternalFlyUpAnimation - - Comment - Disables the internal hover up animation (on your local computer only). Enable if you use an AO and wear hand attachments like rings, prim nails etc. that often loose their correct position while flying. - Persist - 1 - Type - Boolean - Value - 0 - - - AOEnabled - - Comment - Turn on Animation Overrider - Persist - 1 - Type - Boolean - Value - 0 - - AOAdvanced - - Comment - Advanced options - Persist - 0 - Type - Boolean - Value - 0 - - AOSitsEnabled - - Comment - Overrides sit animations. - Persist - 1 - Type - Boolean - Value - 1 - - AONoStandsInMouselook - - Comment - Disables stand anims during mouselook - Persist - 1 - Type - Boolean - Value - 1 - - AOStandInterval - - Comment - AO stand time in seconds - Persist - 1 - Type - F32 - Value - 20 - - AOStandRandomize - - Comment - Randomize stand anims - Persist - 1 - Type - Boolean - Value - 0 - - AORect - - Comment - Rectangle for AO window - Persist - 1 - Type - Rect - Value - - 0 - 100 - 100 - 100 - - - - - ClientDefinitionsURL - - Comment - Where to fetch updated client definitions from - Persist - 1 - Type - String - Value - http://app.singularityviewer.org/client_definitions.xml - - - LastSelectedGrid - - Comment - Last grid selected from the grid pulldown - Persist - 1 - Type - String - Value - - - ShowcaseURLDefault - - Comment - URL to load for the Showcase tab in Second Life - Persist - 1 - Type - String - Value - http://secondlife.com/app/showcase/index.php? - - - CheckForGridUpdates - - Comment - Fetch list of grids from Hippo server - Persist - 1 - Type - Boolean - Value - 0 - - DefaultGrid - - Comment - Nickname of the default grid - Persist - 1 - Type - String - Value - secondlife - - - VivoxLicenseAccepted - - Comment - By setting to true, you agree to accept the Vivox license agreement at http://www.vivox.com/vivox_aup.html - Persist - 1 - Type - Boolean - Value - 0 - - - WarnFirstVoiceLicense - - Comment - Enables FirstVoiceLicense window on login - Persist - 1 - Type - Boolean - Value - 1 - - - - ShyotlRenderUseStreamVBO - - Comment - Use VBO's for stream buffers - Persist - 1 - Type - Boolean - Value - 0 - - ResetFocusOnSelfClick - - Comment - Setting this to TRUE resets your camera when you left-click your avatar - Persist - 1 - Type - Boolean - Value - 1 - - - MoyFastMiniMap - - Comment - Don't show buildings on mini-map - Persist - 1 - Type - Boolean - Value - 0 - - BeauchampFloaterGroupTitlesRect - - Comment - Rectangle for group titles window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 500 - 0 - - - OptionShowGroupNameInChatIM - - Comment - Show group name in IM notification - Persist - 1 - Type - Boolean - Value - 1 - - OptionPlayTpSound - - Comment - Play sound effect on teleport - Persist - 1 - Type - Boolean - Value - 1 - - OptionRotateCamAfterLocalTP - - Comment - Play sound effect on teleport - Persist - 1 - Type - Boolean - Value - 0 - - OptionOffsetTPByAgentHeight - - Comment - Play sound effect on teleport - Persist - 1 - Type - Boolean - Value - 1 - - InventorySortOrder - - Comment - Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Type - U32 - Value - 3 - - Blacklist.Settings - - Comment - List for blacklisting assets DO NOT EDIT DIRECTLY use the floater - Persist - 1 - Type - LLSD - Value - - - - - LinksForChattingObjects - - Comment - Show links for chatting objects (0=no, 1=for others' objects, 2=for all objects) - Persist - 1 - Type - U32 - Value - 0 - - DisablePointAtAndBeam - - Comment - Disable pointing at objects and the pointat beam - Persist - 1 - Type - Boolean - Value - 1 - - PrivateLookAt - - Comment - When TRUE, do not disclose what we are looking at - Persist - 1 - Type - Boolean - Value - 0 - - ShowSelectionBeam - - Comment - Show selection particle beam when selecting or interacting with objects. - Persist - 1 - Type - Boolean - Value - 1 - - BroadcastViewerEffects - - Comment - Broadcast Viewer Effects - Persist - 1 - Type - Boolean - Value - 0 - - EmeraldUseProperArc - - Comment - Enables/Disables a fixed ARC counter - Persist - 1 - Type - Boolean - Value - 0 - - EmeraldBoobMass - - Comment - Mass of boobs. - Persist - 1 - Type - F32 - Value - 54.0 - - EmeraldBoobHardness - - Comment - Hardness (dampening) of boobs. - Persist - 1 - Type - F32 - Value - 51 - - EmeraldBreastPhysicsToggle - - Comment - Enables/Disables breast physics - Persist - 1 - Type - Boolean - Value - 1 - - EmeraldBreastSportsBra - - Comment - allows disabling the physics for 1 av, in case their outfit looks wrong with it on - Persist - 1 - Type - Boolean - Value - 0 - - EmeraldBoobVelMax - - Comment - Max amount of velocity boobs can have - Persist - 1 - Type - F32 - Value - 64 - - EmeraldBoobFriction - - Comment - Internal friction (brings boobs to rest). Shouldn't ever be above 1. - Persist - 1 - Type - F32 - Value - 80 - - EmeraldBoobVelMin - - Comment - Friction Fraction of FPS (used to keep friction uniform through FPS change). - Persist - 1 - Type - F32 - Value - 24 - - EmeraldBoobXYInfluence - - Comment - Amount of influence along the X and Y planes. - Persist - 1 - Type - F32 - Value - 0.1 - - wlfAdvSettingsPopup - - Comment - Show Windlight popup - Persist - 0 - Type - Boolean - Value - 1 - - WoLfVerticalIMTabs - - Comment - Vertical IM Tabs - Persist - 1 - Type - Boolean - Value - 1 - - - AgentChatColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - IsCOA - 1 - - BackgroundChatColor - - Comment - Color of chat bubble background - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 0.0 - 1.0 - - IsCOA - 1 - - EffectColor - - Comment - Particle effects color - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - IsCOA - 1 - - IMChatColor - - Comment - Color of instant messages from other residents - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - IsCOA - 1 - - llOwnerSayChatColor - - Comment - Color of chat messages from objects only visible to the owner - Persist - 1 - Type - Color4 - Value - - 0.990000009537 - 0.990000009537 - 0.689999997616 - 1.0 - - IsCOA - 1 - - ObjectChatColor - - Comment - Color of chat messages from objects - Persist - 1 - Type - Color4 - Value - - 0.699999988079 - 0.899999976158 - 0.699999988079 - 1 - - IsCOA - 1 - - SkinCurrent - - Comment - The currently selected skin. - Persist - 1 - Type - String - Value - dark - IsCOA - 1 - - SystemChatColor - - Comment - Color of chat messages from SL System - Persist - 1 - Type - Color4 - Value - - 0.800000011921 - 1.0 - 1.0 - 1.0 - - IsCOA - 1 - - UISndAlert - - Comment - Sound file for alerts (uuid for sound asset) - Persist - 1 - Type - String - Value - ed124764-705d-d497-167a-182cd9fa2e6c - IsCOA - 1 - - UISndBadKeystroke - - Comment - Sound file for invalid keystroke (uuid for sound asset) - Persist - 1 - Type - String - Value - 2ca849ba-2885-4bc3-90ef-d4987a5b983a - IsCOA - 1 - - UISndClick - - Comment - Sound file for mouse click (uuid for sound asset) - Persist - 1 - Type - String - Value - 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 - IsCOA - 1 - - UISndClickRelease - - Comment - Sound file for mouse button release (uuid for sound asset) - Persist - 1 - Type - String - Value - 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 - IsCOA - 1 - - UISndDebugSpamToggle - - Comment - Log UI sound effects as they are played - Persist - 1 - Type - Boolean - Value - 0 - IsCOA - 1 - - UISndHealthReductionF - - Comment - Sound file for female pain (uuid for sound asset) - Persist - 1 - Type - String - Value - 219c5d93-6c09-31c5-fb3f-c5fe7495c115 - IsCOA - 1 - - UISndHealthReductionM - - Comment - Sound file for male pain (uuid for sound asset) - Persist - 1 - Type - String - Value - e057c244-5768-1056-c37e-1537454eeb62 - IsCOA - 1 - - UISndHealthReductionThreshold - - Comment - Amount of health reduction required to trigger "pain" sound - Persist - 1 - Type - F32 - Value - 10.0 - IsCOA - 1 - - UISndInvalidOp - - Comment - Sound file for invalid operations (uuid for sound asset) - Persist - 1 - Type - String - Value - 4174f859-0d3d-c517-c424-72923dc21f65 - IsCOA - 1 - - UISndMoneyChangeDown - - Comment - Sound file for L$ balance increase (uuid for sound asset) - Persist - 1 - Type - String - Value - 104974e3-dfda-428b-99ee-b0d4e748d3a3 - IsCOA - 1 - - UISndMoneyChangeThreshold - - Comment - Amount of change in L$ balance required to trigger "money" sound - Persist - 1 - Type - F32 - Value - 50.0 - IsCOA - 1 - - UISndMoneyChangeUp - - Comment - Sound file for L$ balance decrease(uuid for sound asset) - Persist - 1 - Type - String - Value - 77a018af-098e-c037-51a6-178f05877c6f - IsCOA - 1 - - UISndNewIncomingIMSession - - Comment - Sound file for new instant message session(uuid for sound asset) - Persist - 1 - Type - String - Value - 67cc2844-00f3-2b3c-b991-6418d01e1bb7 - IsCOA - 1 - - UISndObjectCreate - - Comment - Sound file for object creation (uuid for sound asset) - Persist - 1 - Type - String - Value - f4a0660f-5446-dea2-80b7-6482a082803c - IsCOA - 1 - - UISndObjectDelete - - Comment - Sound file for object deletion (uuid for sound asset) - Persist - 1 - Type - String - Value - 0cb7b00a-4c10-6948-84de-a93c09af2ba9 - IsCOA - 1 - - UISndObjectRezIn - - Comment - Sound file for rezzing objects (uuid for sound asset) - Persist - 1 - Type - String - Value - 3c8fc726-1fd6-862d-fa01-16c5b2568db6 - IsCOA - 1 - - UISndObjectRezOut - - Comment - Sound file for derezzing objects (uuid for sound asset) - Persist - 1 - Type - String - Value - 00000000-0000-0000-0000-000000000000 - IsCOA - 1 - - UISndPieMenuAppear - - Comment - Sound file for opening pie menu (uuid for sound asset) - Persist - 1 - Type - String - Value - 8eaed61f-92ff-6485-de83-4dcc938a478e - IsCOA - 1 - - UISndPieMenuHide - - Comment - Sound file for closing pie menu (uuid for sound asset) - Persist - 1 - Type - String - Value - 00000000-0000-0000-0000-000000000000 - IsCOA - 1 - - UISndPieMenuSliceHighlight0 - - Comment - Sound file for selecting pie menu item 0 (uuid for sound asset) - Persist - 1 - Type - String - Value - d9f73cf8-17b4-6f7a-1565-7951226c305d - IsCOA - 1 - - UISndPieMenuSliceHighlight1 - - Comment - Sound file for selecting pie menu item 1 (uuid for sound asset) - Persist - 1 - Type - String - Value - f6ba9816-dcaf-f755-7b67-51b31b6233e5 - IsCOA - 1 - - UISndPieMenuSliceHighlight2 - - Comment - Sound file for selecting pie menu item 2 (uuid for sound asset) - Persist - 1 - Type - String - Value - 7aff2265-d05b-8b72-63c7-dbf96dc2f21f - IsCOA - 1 - - UISndPieMenuSliceHighlight3 - - Comment - Sound file for selecting pie menu item 3 (uuid for sound asset) - Persist - 1 - Type - String - Value - 09b2184e-8601-44e2-afbb-ce37434b8ba1 - IsCOA - 1 - - UISndPieMenuSliceHighlight4 - - Comment - Sound file for selecting pie menu item 4 (uuid for sound asset) - Persist - 1 - Type - String - Value - bbe4c7fc-7044-b05e-7b89-36924a67593c - IsCOA - 1 - - UISndPieMenuSliceHighlight5 - - Comment - Sound file for selecting pie menu item 5 (uuid for sound asset) - Persist - 1 - Type - String - Value - d166039b-b4f5-c2ec-4911-c85c727b016c - IsCOA - 1 - - UISndPieMenuSliceHighlight6 - - Comment - Sound file for selecting pie menu item 6 (uuid for sound asset) - Persist - 1 - Type - String - Value - 242af82b-43c2-9a3b-e108-3b0c7e384981 - IsCOA - 1 - - UISndPieMenuSliceHighlight7 - - Comment - Sound file for selecting pie menu item 7 (uuid for sound asset) - Persist - 1 - Type - String - Value - c1f334fb-a5be-8fe7-22b3-29631c21cf0b - IsCOA - 1 - - UISndSnapshot - - Comment - Sound file for taking a snapshot (uuid for sound asset) - Persist - 1 - Type - String - Value - 3d09f582-3851-c0e0-f5ba-277ac5c73fb4 - IsCOA - 1 - - UISndStartIM - - Comment - Sound file for starting a new IM session (uuid for sound asset) - Persist - 1 - Type - String - Value - c825dfbc-9827-7e02-6507-3713d18916c1 - IsCOA - 1 - - UISndTeleportOut - - Comment - Sound file for teleporting (uuid for sound asset) - Persist - 1 - Type - String - Value - d7a9a565-a013-2a69-797d-5332baa1a947 - IsCOA - 1 - - UISndTyping - - Comment - Sound file for starting to type a chat message (uuid for sound asset) - Persist - 1 - Type - String - Value - 5e191c7b-8996-9ced-a177-b2ac32bfea06 - IsCOA - 1 - - UISndWindowClose - - Comment - Sound file for closing a window (uuid for sound asset) - Persist - 1 - Type - String - Value - 2c346eda-b60c-ab33-1119-b8941916a499 - IsCOA - 1 - - UISndWindowOpen - - Comment - Sound file for opening a window (uuid for sound asset) - Persist - 1 - Type - String - Value - c80260ba-41fd-8a46-768a-6bf236360e3a - IsCOA - 1 - - UserChatColor - - Comment - Color of your chat messages - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - IsCOA - 1 - - - AFKTimeout - - Comment - Time before automatically setting AFK (away from keyboard) mode (seconds) - Persist - 1 - Type - F32 - Value - 300.0 - - AdvanceSnapshot - - Comment - Display advanced parameter settings in snaphot interface - Persist - 1 - Type - Boolean - Value - 0 - - AlertedUnsupportedHardware - - Comment - Set if there's unsupported hardware and we've already done a notification. - Persist - 1 - Type - Boolean - Value - 0 - - AllowIdleAFK - - Comment - Automatically set AFK (away from keyboard) mode when idle - Persist - 1 - Type - Boolean - Value - 1 - - AllowMultipleViewers - - Comment - Allow multiple viewers. - Persist - 1 - Type - Boolean - Value - 1 - - AllowTapTapHoldRun - - Comment - Tapping a direction key twice and holding it down makes avatar run - Persist - 1 - Type - Boolean - Value - 1 - - AnimateTextures - - Comment - Enable texture animation (debug) - Persist - 1 - Type - Boolean - Value - 1 - - AnimationDebug - - Comment - Show active animations in a bubble above avatars head - Persist - 1 - Type - Boolean - Value - 0 - - PreviewAnimInWorld - - Comment - Play animation preview in-world when uploading - Persist - 1 - Type - Boolean - Value - 0 - - AppearanceCameraMovement - - Comment - When entering appearance editing mode, camera zooms in on currently selected portion of avatar - Persist - 1 - Type - Boolean - Value - 1 - - ApplyColorImmediately - - Comment - Preview selections in color picker immediately - Persist - 1 - Type - Boolean - Value - 1 - - ApplyTextureImmediately - - Comment - Preview selections in texture picker immediately - Persist - 1 - Type - Boolean - Value - 1 - - ArrowKeysMoveAvatar - - Comment - While cursor is in chat entry box, arrow keys still control your avatar - Persist - 1 - Type - Boolean - Value - 1 - - AskedAboutCrashReports - - Comment - Turns off dialog asking if you want to enable crash reporting - Persist - 1 - Type - Boolean - Value - 0 - - AuctionShowFence - - Comment - When auctioning land, include parcel boundary marker in snapshot - Persist - 1 - Type - Boolean - Value - 1 - - AudioLevelAmbient - - Comment - Audio level of environment sounds - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelDoppler - - Comment - Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect) - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMaster - - Comment - Master audio level, or overall volume - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMedia - - Comment - Audio level of Quicktime movies - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMic - - Comment - Audio level of microphone input - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelMusic - - Comment - Audio level of streaming music - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelRolloff - - Comment - Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff) - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelSFX - - Comment - Audio level of in-world sound effects - Persist - 1 - Type - F32 - Value - 1.0 - - AudioLevelUI - - Comment - Audio level of UI sound effects - Persist - 1 - Type - F32 - Value - 0.5 - - AudioLevelVoice - - Comment - Audio level of voice chat - Persist - 1 - Type - F32 - Value - 0.5 - - AudioStreamingMusic - - Comment - Enable streaming audio - Persist - 1 - Type - Boolean - Value - 1 - - AudioStreamingVideo - - Comment - Enable streaming video - Persist - 1 - Type - Boolean - Value - 0 - - AuditTexture - - Comment - Enable texture auditting. - Persist - 1 - Type - Boolean - Value - 0 - - AutoAcceptNewInventory - - Comment - Automatically accept new notecards/textures/landmarks - Persist - 1 - Type - Boolean - Value - 0 - - AutoLeveling - - Comment - Keep Flycam level. - Persist - 1 - Type - Boolean - Value - 1 - - AutoLoadWebProfiles - - Comment - Automatically load ALL profile webpages without asking first. - Persist - 1 - Type - Boolean - Value - 0 - - AutoLogin - - Comment - Login automatically using last username/password combination - Persist - 0 - Type - Boolean - Value - 0 - - AutoMimeDiscovery - - Comment - Enable viewer mime type discovery of media URLs - Persist - 1 - Type - Boolean - Value - 0 - - AutoPilotLocksCamera - - Comment - Keep camera position locked when avatar walks to selected position - Persist - 1 - Type - Boolean - Value - 0 - - AutoSnapshot - - Comment - Update snapshot when camera stops moving, or any parameter changes - Persist - 1 - Type - Boolean - Value - 0 - - AutomaticFly - - Comment - Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only) - Persist - 1 - Type - Boolean - Value - 1 - - AvatarAxisDeadZone0 - - Comment - Avatar axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone1 - - Comment - Avatar axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone2 - - Comment - Avatar axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone3 - - Comment - Avatar axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone4 - - Comment - Avatar axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisDeadZone5 - - Comment - Avatar axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - AvatarAxisScale0 - - Comment - Avatar axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale1 - - Comment - Avatar axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale2 - - Comment - Avatar axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale3 - - Comment - Avatar axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale4 - - Comment - Avatar axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarAxisScale5 - - Comment - Avatar axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - AvatarBacklight - - Comment - Add rim lighting to avatar rendering to approximate shininess of skin - Persist - 1 - Type - Boolean - Value - 1 - - AvatarFeathering - - Comment - Avatar feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16.0 - - AvatarPickerSortOrder - - Comment - Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 2 - - AvatarSex - - Comment - - Persist - 0 - Type - U32 - Value - 0 - - BackgroundYieldTime - - Comment - Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds) - Persist - 1 - Type - S32 - Value - 40 - - FloaterBlacklistRect - - Comment - LOLRectangle - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - - BackwardBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 45 - 29 - 66 - 4 - - - BasicHelpRect - - Comment - Rectangle for help window - Persist - 1 - Type - Rect - Value - - 0 - 404 - 467 - 0 - - - BeaconAlwaysOn - - Comment - Beacons / highlighting always on - Persist - 1 - Type - Boolean - Value - 0 - - BrowserHomePage - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - http://www.singularityviewer.org - - BrowserCookiesEnabled - - Comment - Enable Cookes in WebKit - Persist - 1 - Type - Boolean - Value - 1 - - BrowserPluginsEnabled - - Comment - Enable Mozilla Plug-Ins in WebKit - Persist - 1 - Type - Boolean - Value - 1 - - BrowserJavascriptEnabled - - Comment - Enable JavaScript execution in WebKit - Persist - 1 - Type - Boolean - Value - 1 - - PluginAttachDebuggerToPlugins - - Comment - TODO: understand what this actually does -.-sg - Persist - 1 - Type - Boolean - Value - 0 - - BlockAvatarAppearanceMessages - - Comment - Ignore's appearance messages (for simulating Ruth) - Persist - 1 - Type - Boolean - Value - 0 - - BrowserProxyAddress - - Comment - Address for the Web Proxy - Persist - 1 - Type - String - Value - - - BrowserProxyEnabled - - Comment - Use Web Proxy - Persist - 1 - Type - Boolean - Value - 0 - - BrowserProxyExclusions - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - - - BrowserProxyPort - - Comment - Port for Web Proxy - Persist - 1 - Type - S32 - Value - 3128 - - BrowserProxySocks45 - - Comment - [NOT USED] - Persist - 1 - Type - S32 - Value - 5 - - Socks5ProxyEnabled - - Comment - Use Socks5 Proxy - Persist - 1 - Type - Boolean - Value - 0 - - Socks5HttpProxyType - - Comment - Proxy type to use for HTTP operations - Persist - 1 - Type - String - Value - None - - Socks5ProxyHost - - Comment - Socks 5 Proxy Host - Persist - 1 - Type - String - Value - - - Socks5ProxyPort - - Comment - Socks 5 Proxy Port - Persist - 1 - Type - U32 - Value - 1080 - - Socks5Username - - Comment - Socks 5 Username - Persist - 1 - Type - String - Value - - - Socks5Password - - Comment - Socks 5 Password - Persist - 1 - Type - String - Value - - - Socks5AuthType - - Comment - Selected Auth mechanism for Socks5 - Persist - 1 - Type - String - Value - None - - BuildAxisDeadZone0 - - Comment - Build axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone1 - - Comment - Build axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone2 - - Comment - Build axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone3 - - Comment - Build axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone4 - - Comment - Build axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisDeadZone5 - - Comment - Build axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - BuildAxisScale0 - - Comment - Build axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale1 - - Comment - Build axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale2 - - Comment - Build axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale3 - - Comment - Build axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale4 - - Comment - Build axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildAxisScale5 - - Comment - Build axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - BuildBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - BuildFeathering - - Comment - Build feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16.0 - - BulkChangeIncludeAnimations - - Comment - Bulk permission changes affect animations - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeAnimations - - Comment - Bulk permission changes affect animations - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeAnimations - - Comment - Bulk permission changes affect animations - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeAnimations - - Comment - Bulk permission changes affect animations - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeBodyParts - - Comment - Bulk permission changes affect body parts - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeClothing - - Comment - Bulk permission changes affect clothing - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeGestures - - Comment - Bulk permission changes affect gestures - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeLandmarks - - Comment - Bulk permission changes affect landmarks - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeNotecards - - Comment - Bulk permission changes affect notecards - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeObjects - - Comment - Bulk permission changes affect objects - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeScripts - - Comment - Bulk permission changes affect scripts - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeSounds - - Comment - Bulk permission changes affect sounds - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeIncludeTextures - - Comment - Bulk permission changes affect textures - Persist - 1 - Type - Boolean - Value - 1 - - BulkChangeEveryoneCopy - - Comment - Bulk changed objects can be copied by everyone - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeNextOwnerCopy - - Comment - Bulk changed objects can be copied by next owner - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeNextOwnerModify - - Comment - Bulk changed objects can be modified by next owner - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeNextOwnerTransfer - - Comment - Bulk changed objects can be resold or given away by next owner - Persist - 1 - Type - Boolean - Value - 0 - - BulkChangeShareWithGroup - - Comment - Bulk changed objects are shared with the currently active group - Persist - 1 - Type - Boolean - Value - 0 - - ButtonFlashCount - - Comment - Number of flashes after which flashing buttons stay lit up - Persist - 1 - Type - S32 - Value - 8 - - ButtonFlashRate - - Comment - Frequency at which buttons flash (hz) - Persist - 1 - Type - F32 - Value - 1.25 - - ButtonHPad - - Comment - Default horizontal spacing between buttons (pixels) - Persist - 1 - Type - S32 - Value - 10 - - ButtonHeight - - Comment - Default height for normal buttons (pixels) - Persist - 1 - Type - S32 - Value - 20 - - ButtonHeightSmall - - Comment - Default height for small buttons (pixels) - Persist - 1 - Type - S32 - Value - 16 - - ButtonVPad - - Comment - Default vertical spacing between buttons (pixels) - Persist - 1 - Type - S32 - Value - 1 - - CacheLocation - - Comment - Controls the location of the local disk cache - Persist - 1 - Type - String - Value - - - CacheSize - - Comment - Controls amount of hard drive space reserved for local file caching in MB - Persist - 1 - Type - U32 - Value - 500 - - CacheValidateCounter - - Comment - Used to distribute cache validation - Persist - 1 - Type - U32 - Value - 0 - - CameraMouseWheelZoom - - Comment - Camera zooms in and out with mousewheel - Persist - 1 - Type - Boolean - Value - 1 - - CameraAngle - - Comment - Camera field of view angle (Radians) - Persist - 1 - Type - F32 - Value - 1.047197551 - - CameraOffset - - Comment - Render with camera offset from view frustum (rendering debug) - Persist - 1 - Type - Boolean - Value - 0 - - CameraOffsetBuild - - Comment - Default camera position relative to focus point when entering build mode - Persist - 1 - Type - Vector3 - Value - - -6.0 - 0.0 - 6.0 - - - CameraOffsetDefault - - Comment - Default camera offset from avatar - Persist - 1 - Type - Vector3 - Value - - -3.0 - 0.0 - 0.75 - - - CameraOffsetScale - - Comment - Scales the default offset - Persist - 1 - Type - F32 - Value - 1.0 - - CameraPosOnLogout - - Comment - Camera position when last logged out (global coordinates) - Persist - 1 - Type - Vector3D - Value - - 0.0 - 0.0 - 0.0 - - - CameraPositionSmoothing - - Comment - Smooths camera position over time - Persist - 1 - Type - F32 - Value - 1.0 - - ChatBarStealsFocus - - Comment - Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus - Persist - 1 - Type - Boolean - Value - 1 - - ChatBubbleOpacity - - Comment - Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.5 - - ChatFontSize - - Comment - Size of chat text in chat console (0 = small, 1 = big) - Persist - 1 - Type - S32 - Value - 1 - - ChatFullWidth - - Comment - Chat console takes up full width of SL window - Persist - 1 - Type - Boolean - Value - 1 - - ChatHistoryTornOff - - Comment - Show chat history window separately from Communicate window. - Persist - 1 - Type - Boolean - Value - 0 - - ChatOnlineNotification - - Comment - Provide notifications for when friend log on and off of SL - Persist - 1 - Type - Boolean - Value - 1 - - HideNotificationsInChat - - Comment - Do not echo/log notifications in chat - Persist - 1 - Type - Boolean - Value - 0 - - ChatPersistTime - - Comment - Time for which chat stays visible in console (seconds) - Persist - 1 - Type - F32 - Value - 20.0 - - ChatShowTimestamps - - Comment - Show timestamps in chat - Persist - 1 - Type - Boolean - Value - 1 - - ChatSpacing - - Comment - Add extra vertical spacing between local chat lines - Persist - 1 - Type - S32 - Value - 0 - - ChatVisible - - Comment - Chat bar is visible - Persist - 1 - Type - Boolean - Value - 1 - - ChatterboxRect - - Comment - Rectangle for chatterbox window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 350 - 0 - - - CheesyBeacon - - Comment - Enable cheesy beacon effects - Persist - 1 - Type - Boolean - Value - 0 - - ClientSettingsFile - - Comment - Persisted client settings file name (per install). - Persist - 0 - Type - String - Value - - - CloseChatOnReturn - - Comment - Close chat after hitting return - Persist - 1 - Type - Boolean - Value - 0 - - CloseSnapshotOnKeep - - Comment - Close snapshot window after saving snapshot - Persist - 1 - Type - Boolean - Value - 1 - - CmdLineDisableVoice - - Comment - Disable Voice. - Persist - 0 - Type - Boolean - Value - 0 - - CmdLineAgentURI - - Comment - URL of agent host to connect to in Agent Domain. - Persist - 0 - Type - String - Value - - - CmdLineGridChoice - - Comment - The user's grid choice or ip address. - Persist - 0 - Type - String - Value - - - CmdLineHelperURI - - Comment - Command line specified helper web CGI prefix to use. - Persist - 0 - Type - String - Value - - - CmdLineLoginURI - - Comment - Command line specified login server and CGI prefix to use. - Persist - 0 - Type - LLSD - Value - - - - - CmdLineRegionURI - - Comment - URL of region to connect to through Agent Domain. - Persist - 0 - Type - String - Value - - - ColorPaletteEntry01 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 0.0 - 1.0 - - - ColorPaletteEntry02 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 0.5 - 1.0 - - - ColorPaletteEntry03 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.0 - 0.0 - 1.0 - - - ColorPaletteEntry04 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 0.0 - 1.0 - - - ColorPaletteEntry05 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.5 - 0.0 - 1.0 - - - ColorPaletteEntry06 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.5 - 0.5 - 1.0 - - - ColorPaletteEntry07 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 0.5 - 1.0 - - - ColorPaletteEntry08 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.0 - 0.5 - 1.0 - - - ColorPaletteEntry09 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 0.0 - 1.0 - - - ColorPaletteEntry10 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.25 - 0.25 - 1.0 - - - ColorPaletteEntry11 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.5 - 1.0 - 1.0 - - - ColorPaletteEntry12 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.25 - 0.5 - 1.0 - - - ColorPaletteEntry13 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.0 - 1.0 - 1.0 - - - ColorPaletteEntry14 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.25 - 0.0 - 1.0 - - - ColorPaletteEntry15 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - ColorPaletteEntry16 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - ColorPaletteEntry17 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - ColorPaletteEntry18 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.75 - 0.75 - 0.75 - 1.0 - - - ColorPaletteEntry19 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.0 - 0.0 - 1.0 - - - ColorPaletteEntry20 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 0.0 - 1.0 - - - ColorPaletteEntry21 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 1.0 - 0.0 - 1.0 - - - ColorPaletteEntry22 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 1.0 - 1.0 - 1.0 - - - ColorPaletteEntry23 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 1.0 - 1.0 - - - ColorPaletteEntry24 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.0 - 1.0 - 1.0 - - - ColorPaletteEntry25 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 0.5 - 1.0 - - - ColorPaletteEntry26 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.0 - 1.0 - 0.5 - 1.0 - - - ColorPaletteEntry27 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 1.0 - 1.0 - 1.0 - - - ColorPaletteEntry28 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 0.5 - 0.5 - 1.0 - 1.0 - - - ColorPaletteEntry29 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.0 - 0.5 - 1.0 - - - ColorPaletteEntry30 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.5 - 0.0 - 1.0 - - - ColorPaletteEntry31 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - ColorPaletteEntry32 - - Comment - Color picker palette entry - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 1.0 - 1.0 - - - ColumnHeaderDropDownDelay - - Comment - Time in seconds of mouse click before column header shows sort options list - Persist - 1 - Type - F32 - Value - 0.300000011921 - - CompileOutputRect - - Comment - Rectangle for script Recompile Everything output window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 300 - 0 - - - ConnectAsGod - - Comment - Log in a god if you have god access. - Persist - 1 - Type - Boolean - Value - 0 - - ConnectionPort - - Comment - Custom connection port number - Persist - 1 - Type - U32 - Value - 13000 - - ConnectionPortEnabled - - Comment - Use the custom connection port? - Persist - 1 - Type - Boolean - Value - 0 - - ConsoleBackgroundOpacity - - Comment - Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.700 - - ConsoleBufferSize - - Comment - Size of chat console history (lines of chat) - Persist - 1 - Type - S32 - Value - 40 - - ConsoleMaxLines - - Comment - Max number of lines of chat text visible in console. - Persist - 1 - Type - S32 - Value - 40 - - ContactsTornOff - - Comment - Show contacts window separately from Communicate window. - Persist - 1 - Type - Boolean - Value - 0 - - CookiesEnabled - - Comment - Accept cookies from Web sites? - Persist - 1 - Type - Boolean - Value - 1 - - CreateToolCopyCenters - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - - CreateToolCopyRotates - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - CreateToolCopySelection - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - CreateToolKeepSelected - - Comment - After using create tool, keep the create tool active - Persist - 1 - Type - Boolean - Value - 0 - - Cursor3D - - Comment - Tread Joystick values as absolute positions (not deltas). - Persist - 1 - Type - Boolean - Value - 1 - - CustomServer - - Comment - Specifies IP address or hostname of grid to which you connect - Persist - 1 - Type - String - Value - - - DebugBeaconLineWidth - - Comment - Size of lines for Debug Beacons - Persist - 1 - Type - S32 - Value - 1 - - DebugInventoryFilters - - Comment - Turn on debugging display for inventory filtering - Persist - 1 - Type - Boolean - Value - 0 - - DebugPermissions - - Comment - Log permissions for selected inventory items - Persist - 1 - Type - Boolean - Value - 0 - - DebugPluginDisableTimeout - - Comment - Disable the code which watches for plugins that are crashed or hung - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowColor - - Comment - Show color under cursor - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowRenderInfo - - Comment - Show depth buffer contents - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowRenderMatrices - - Comment - Display values of current view and projection matrices. - Persist - 1 - Type - Boolean - Value - 0 - - DebugShowTime - - Comment - Show depth buffer contents - Persist - 1 - Type - Boolean - Value - 0 - - DebugStatModeFPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeBandwidth - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePacketLoss - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatMode - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeKTrisDrawnFr - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeKTrisDrawnSec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTotalObjs - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeNewObjs - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTextureCount - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeRawCount - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeGLMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeFormattedMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeRawMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeBoundMem - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePacketsIn - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePacketsOut - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTexture - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeAsset - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeLayers - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeActualIn - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeActualOut - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeVFSPendingOps - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeTimeDialation - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimFPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePhysicsFPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModePinnedObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeLowLODObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeMemoryAllocated - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeAgentUpdatesSec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeMainAgents - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeChildAgents - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimActiveObjects - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimActiveScripts - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimScriptEvents - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimInPPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimOutPPS - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimPendingDownloads - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - SimPendingUploads - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimTotalUnackedBytes - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimFrameMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimNetMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimOtherMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimAgentMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimImagesMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimScriptMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSpareMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsStepMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsShapeUpdateMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSimPhysicsOtherMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimSleepMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugStatModeSimPumpIOMsec - - Comment - Mode of stat in Statistics floater - Persist - 1 - Type - S32 - Value - -1 - - DebugViews - - Comment - Display debugging info for views. - Persist - 1 - Type - Boolean - Value - 0 - - DebugWindowProc - - Comment - Log windows messages - Persist - 1 - Type - Boolean - Value - 0 - - DefaultObjectTexture - - Comment - Texture used as 'Default' in texture picker. (UUID texture reference) - Persist - 1 - Type - String - Value - 89556747-24cb-43ed-920b-47caed15465f - - DisableCameraConstraints - - Comment - Disable the normal bounds put on the camera by avatar position - Persist - 1 - Type - Boolean - Value - 0 - - DisableRendering - - Comment - Disable GL rendering and GUI (load testing) - Persist - 1 - Type - Boolean - Value - 0 - - DisableVerticalSync - - Comment - Update frames as fast as possible (FALSE = update frames between display scans) - Persist - 1 - Type - Boolean - Value - 1 - - DisplayAvatarAgentTarget - - Comment - Show avatar positioning locators (animation debug) - Persist - 1 - Type - Boolean - Value - 0 - - DisplayChat - - Comment - Display Latest Chat message on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayDebug - - Comment - Display Network Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayDebugConsole - - Comment - Display Console Debug Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayIM - - Comment - Display Latest IM message on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayLinden - - Comment - Display Account Information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayRegion - - Comment - Display Location information on LCD - Persist - 1 - Type - Boolean - Value - 1 - - DisplayTimecode - - Comment - Display timecode on screen - Persist - 1 - Type - Boolean - Value - 0 - - Disregard128DefaultDrawDistance - - Comment - Whether to use the auto default to 128 draw distance - Persist - 1 - Type - Boolean - Value - 1 - - Disregard96DefaultDrawDistance - - Comment - Whether to use the auto default to 96 draw distance - Persist - 1 - Type - Boolean - Value - 1 - - DoubleClickAutoPilot - - Comment - Enable double-click auto pilot - Persist - 1 - Type - Boolean - Value - 0 - - DoubleClickTeleport - - Comment - Enable double-click to teleport where allowed - Persist - 1 - Type - Boolean - Value - 0 - - DoubleClickTeleportMiniMap - - Comment - Enable double-click-teleport for the mini-map - Persist - 1 - Type - Boolean - Value - 0 - - DragAndDropToolTipDelay - - Comment - Seconds before displaying tooltip when performing drag and drop operation - Persist - 1 - Type - F32 - Value - 0.10000000149 - - DropShadowButton - - Comment - Drop shadow width for buttons (pixels) - Persist - 1 - Type - S32 - Value - 2 - - DropShadowFloater - - Comment - Drop shadow width for floaters (pixels) - Persist - 1 - Type - S32 - Value - 5 - - DropShadowSlider - - Comment - Drop shadow width for sliders (pixels) - Persist - 1 - Type - S32 - Value - 3 - - DropShadowTooltip - - Comment - Drop shadow width for tooltips (pixels) - Persist - 1 - Type - S32 - Value - 4 - - DynamicCameraStrength - - Comment - Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity) - Persist - 1 - Type - F32 - Value - 2.0 - - EditCameraMovement - - Comment - When entering build mode, camera moves up above avatar - Persist - 1 - Type - Boolean - Value - 0 - - EditLinkedParts - - Comment - Select individual parts of linked objects - Persist - 0 - Type - Boolean - Value - 0 - - DecimalsForTools - - Comment - Number of decimals for the edit tool position, size and rotation settings (0 to 5) - Persist - 1 - Type - U32 - Value - 5 - - EffectScriptChatParticles - - Comment - 1 = normal behavior, 0 = disable display of swirling lights when scripts communicate - Persist - 1 - Type - Boolean - Value - 1 - - EnableRippleWater - - Comment - Whether to use ripple water shader or not - Persist - 1 - Type - Boolean - Value - 1 - - EnableVoiceChat - - Comment - Enable talking to other residents with a microphone - Persist - 1 - Type - Boolean - Value - 0 - - EnergyFromTop - - Comment - - Persist - 0 - Type - S32 - Value - 20 - - EnergyHeight - - Comment - - Persist - 0 - Type - S32 - Value - 40 - - EnergyWidth - - Comment - - Persist - 0 - Type - S32 - Value - 175 - - EveryoneCopy - - Comment - Everyone can copy the newly created objects - Persist - 1 - Type - Boolean - Value - 0 - - FPSLogFrequency - - Comment - Seconds between display of FPS in log (0 for never) - Persist - 1 - Type - F32 - Value - 60.0 - - FPSLogFrequency - - Comment - Seconds between display of FPS in log (0 for never) - Persist - 1 - Type - F32 - Value - 10.0 - - FilterItemsPerFrame - - Comment - Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed) - Persist - 1 - Type - S32 - Value - 500 - - FindLandArea - - Comment - Enables filtering of land search results by area - Persist - 1 - Type - Boolean - Value - 0 - - FindLandPrice - - Comment - Enables filtering of land search results by price - Persist - 1 - Type - Boolean - Value - 1 - - FindLandType - - Comment - Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale") - Persist - 1 - Type - String - Value - All - - FindPeopleOnline - - Comment - Limits people search to only users who are logged on - Persist - 1 - Type - Boolean - Value - 1 - - FindPlacesPictures - - Comment - Display only results of find places that have pictures - Persist - 1 - Type - Boolean - Value - 1 - - FirstLoginThisInstall - - Comment - Specifies that you have not successfully logged in since you installed the latest update - Persist - 1 - Type - Boolean - Value - 1 - - FirstName - - Comment - Login first name - Persist - 1 - Type - String - Value - - - FirstPersonAvatarVisible - - Comment - Display avatar and attachments below neck while in mouselook - Persist - 1 - Type - Boolean - Value - 0 - - FirstPersonBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - FirstRunThisInstall - - Comment - Specifies that you have not run the viewer since you installed the latest update - Persist - 1 - Type - Boolean - Value - 1 - - FixedWeather - - Comment - Weather effects do not change over time - Persist - 1 - Type - Boolean - Value - 0 - - LongDateFormat - - Comment - Long date format to use - Persist - 1 - Type - String - Value - %A %d %B %Y - - ShortDateFormat - - Comment - Short date format to use - Persist - 1 - Type - String - Value - %Y-%m-%d - - ShortTimeFormat - - Comment - Short time format (hours and minutes) to use - Persist - 1 - Type - String - Value - %H:%M - - LongTimeFormat - - Comment - Long time format (hours, minutes and seconds) to use - Persist - 1 - Type - String - Value - %H:%M:%S - - TimestampFormat - - Comment - Timestamp format to use - Persist - 1 - Type - String - Value - %a %d %b %Y %H:%M:%S - - SecondsInChatAndIMs - - Comment - TRUE to add seconds to timestamps for IM and chat - Persist - 1 - Type - Boolean - Value - 0 - - FloaterAboutRect - - Comment - Rectangle for About window - Persist - 1 - Type - Rect - Value - - 0 - 440 - 470 - 0 - - - FloaterActiveSpeakersRect - - Comment - Rectangle for active speakers window - Persist - 1 - Type - Rect - Value - - 0 - 300 - 250 - 0 - - - FloaterActiveSpeakersSortAscending - - Comment - Whether to sort up or down - Persist - 1 - Type - Boolean - Value - 1 - - FloaterActiveSpeakersSortColumn - - Comment - Column name to sort on - Persist - 1 - Type - String - Value - speaking_status - - FloaterAreaSearchRect - - Comment - Rectangle for the area search floater - Persist - 1 - Type - Rect - Value - - 0 - 400 - 200 - 0 - - - FloaterAdvancedSkyRect - - Comment - Rectangle for Advanced Sky Editor - Persist - 1 - Type - Rect - Value - - 0 - 220 - 700 - 0 - - - FloaterAdvancedWaterRect - - Comment - Rectangle for Advanced Water Editor - Persist - 1 - Type - Rect - Value - - 0 - 240 - 700 - 0 - - - FloaterAudioVolumeRect - - Comment - Rectangle for Audio Volume window - Persist - 1 - Type - Rect - Value - - 0 - 440 - 470 - 0 - - - FloaterBeaconsRect - - Comment - Rectangle for beacon and highlight controls - Persist - 1 - Type - Rect - Value - - 200 - 250 - 250 - 200 - - - FloaterBuildOptionsRect - - Comment - Rectangle for build options window. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterVFSRect - - Comment - Rectangle for local assets window. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterBumpRect - - Comment - Rectangle for Bumps/Hits window - Persist - 1 - Type - Rect - Value - - 0 - 180 - 400 - 0 - - - FloaterBuyContentsRect - - Comment - Rectangle for Buy Contents window - Persist - 1 - Type - Rect - Value - - 0 - 250 - 300 - 0 - - - FloaterBuyRect - - Comment - Rectangle for buy window - Persist - 1 - Type - Rect - Value - - 0 - 250 - 300 - 0 - - - FloaterCameraRect3 - - Comment - Rectangle for camera control window - Persist - 1 - Type - Rect - Value - - 0 - 64 - 176 - 0 - - - FloaterChatRect - - Comment - Rectangle for chat history - Persist - 1 - Type - Rect - Value - - 0 - 172 - 500 - 0 - - - FloaterClothingRect - - Comment - Rectangle for clothing window - Persist - 1 - Type - Rect - Value - - 0 - 480 - 320 - 0 - - - FloaterContactsRect - - Comment - Rectangle for chat history - Persist - 1 - Type - Rect - Value - - 0 - 390 - 395 - 0 - - - FloaterCustomizeAppearanceRect - - Comment - Rectangle for avatar customization window - Persist - 1 - Type - Rect - Value - - 0 - 540 - 494 - 0 - - - FloaterDayCycleRect - - Comment - Rectangle for Day Cycle Editor - Persist - 1 - Type - Rect - Value - - 0 - 646 - 275 - 0 - - - FloaterEnvRect - - Comment - Rectangle for Environment Editor - Persist - 1 - Type - Rect - Value - - 0 - 150 - 600 - 0 - - - FloaterFindRect2 - - Comment - Rectangle for Find window - Persist - 1 - Type - Rect - Value - - 0 - 570 - 780 - 0 - - - FloaterFriendsRect - - Comment - Rectangle for friends window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 250 - 0 - - - FloaterGestureRect2 - - Comment - Rectangle for gestures window - Persist - 1 - Type - Rect - Value - - 0 - 465 - 350 - 0 - - - FloaterHUDRect2 - - Comment - Rectangle for HUD Floater window - Persist - 1 - Type - Rect - Value - - - 0 - 292 - 362 - 0 - - - FloaterHtmlRect - - Comment - Rectangle for HTML window - Persist - 1 - Type - Rect - Value - - 100 - 460 - 370 - 100 - - - FloaterIMRect - - Comment - Rectangle for IM window - Persist - 1 - Type - Rect - Value - - 0 - 160 - 500 - 0 - - - FloaterInspectRect - - Comment - Rectangle for Object Inspect window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - - FloaterInventoryRect - - Comment - Rectangle for inventory window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 300 - 0 - - - FloaterJoystickRect - - Comment - Rectangle for joystick controls window. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterLagMeter - - Comment - Rectangle for lag meter - Persist - 1 - Type - Rect - Value - - 0 - 142 - 350 - 0 - - - ShowRadar - - Comment - Show the radar floater - Persist - 1 - Type - Boolean - Value - 0 - - FloaterRadarRect - - Comment - Rectangle for Radar - Persist - 1 - Type - Rect - Value - - 0 - 400 - 200 - 0 - - - RadarKeepOpen - - Comment - Keeps radar updates running in background - Persist - 1 - Type - Boolean - Value - 0 - - RadarUpdateRate - - Comment - Radar update rate (0 = high, 1 = medium, 2 = low) - Persist - 1 - Type - U32 - Value - 1 - - RadarAlertSim - - Comment - Whether the radar emits chat alerts for avatars entering/exiting sim - Persist - 1 - Type - Boolean - Value - 0 - - RadarAlertDraw - - Comment - Whether the radar emits chat alerts for avatars entering/exiting draw distance - Persist - 1 - Type - Boolean - Value - 0 - - RadarAlertShoutRange - - Comment - Whether the radar emits chat alerts for avatars entering/exiting shout range - Persist - 1 - Type - Boolean - Value - 0 - - RadarAlertChatRange - - Comment - Whether the radar emits chat alerts for avatars entering/exiting chat range - Persist - 1 - Type - Boolean - Value - 1 - - RadarChatAlerts - - Comment - Whether the radar emits chat alerts regarding the status of avatars it displays - Persist - 1 - Type - Boolean - Value - 0 - - RadarChatKeys - - Comment - Enable private chat alerts for avatars entering the region - Persist - 1 - Type - Boolean - Value - 0 - - FloaterLandRect5 - - Comment - Rectangle for About Land window - Persist - 1 - Type - Rect - Value - - 0 - 370 - 460 - 0 - - - FloaterLandmarkRect - - Comment - Rectangle for landmark picker - Persist - 1 - Type - Rect - Value - - 0 - 290 - 310 - 0 - - - FloaterMediaRect - - Comment - Rectangle for media browser window - Persist - 1 - Type - Rect - Value - - 16 - 650 - 600 - 128 - - - FloaterMiniMapRect - - Comment - Rectangle for world map - Persist - 1 - Type - Rect - Value - - 0 - 225 - 200 - 0 - - - FloaterMoveRect2 - - Comment - Rectangle for avatar control window - Persist - 1 - Type - Rect - Value - - 0 - 58 - 135 - 0 - - - FloaterMuteRect3 - - Comment - Rectangle for mute window - Persist - 1 - Type - Rect - Value - - 0 - 300 - 300 - 0 - - - FloaterObjectIMInfo - - Comment - Rectangle for floater object im info windows - Persist - 1 - Type - Rect - Value - - 0 - 300 - 300 - 0 - - - FloaterOpenObjectRect - - Comment - Rectangle for Open Object window - Persist - 1 - Type - Rect - Value - - 0 - 350 - 300 - 0 - - - FloaterPayRectB - - Comment - Rectangle for pay window - Persist - 1 - Type - Rect - Value - - 0 - 150 - 400 - 0 - - - FloaterPermPrefsRect - - Comment - Rectangle for initial permissions preferences - Persist - 1 - Type - Rect - Value - - 200 - 250 - 250 - 200 - - - FloaterRegionInfo - - Comment - Rectangle for region info window - Persist - 1 - Type - Rect - Value - - 0 - 512 - 480 - 0 - - - FloaterScriptDebugRect - - Comment - Rectangle for Script Error/Debug window - Persist - 1 - Type - Rect - Value - - 0 - 130 - 450 - 0 - - - FloaterSnapshotRect - - Comment - Rectangle for snapshot window - Persist - 1 - Type - Rect - Value - - 0 - 200 - 200 - 400 - - - FloaterSoundsRect - - Comment - Rectangle for sounds log floater. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterSoundsLogAvatars - - Comment - Show SoundTriggers/gestures played by agents in the log. Also includes collision sounds if enabled - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsLogObjects - - Comment - Show sounds played by objects in the log. Also includes collision sounds if enabled - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsLogCollisions - - Comment - Don't filter out default collision sounds in the log - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsLogRepeats - - Comment - Only show one entry for each unique asset ID in the log - Persist - 1 - Type - Boolean - Value - 1 - - FloaterStatisticsRect - - Comment - Rectangle for chat history - Persist - 1 - Type - Rect - Value - - 0 - 400 - 250 - 0 - - - FloaterTeleportHistoryRect - - Comment - Rectangle for teleport history window - Persist - 1 - Type - Rect - Value - - 20 - 20 - 470 - 200 - - - FloaterViewBottom - - Comment - [DO NOT MODIFY] Controls layout of floating windows within SL window - Persist - 1 - Type - S32 - Value - -1 - - FloaterWorldMapRect2 - - Comment - Rectangle for world map window - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterAORect - - Comment - Rectangle for AO editor. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterAvatarsRect - - Comment - Rectangle for avatar radar. - Persist - 1 - Type - Rect - Value - - 200 - 905 - 396 - 734 - - - FloaterInterceptorRect - - Comment - Rectangle for interceptor floater. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterKeyToolRect - - Comment - Rectangle for KeyTool floater. - Persist - 1 - Type - Rect - Value - - 439 - 759 - 593 - 443 - - - KeyToolAutomaticOpen - - Comment - Automatically open KeyTool results - Persist - 1 - Type - Boolean - Value - 1 - - KeyToolAutomaticClose - - Comment - Automatically close KeyTool floater when a result is found - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsRect - - Comment - Rectangle for sounds log floater. - Persist - 1 - Type - Rect - Value - - 0 - 0 - 0 - 0 - - - FloaterSoundsLogAvatars - - Comment - Show SoundTriggers/gestures played by agents in the log. Also includes collision sounds if enabled - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsLogObjects - - Comment - Show sounds played by objects in the log. Also includes collision sounds if enabled - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsLogCollisions - - Comment - Don't filter out default collision sounds in the log - Persist - 1 - Type - Boolean - Value - 1 - - FloaterSoundsLogRepeats - - Comment - Only show one entry for each unique asset ID in the log - Persist - 1 - Type - Boolean - Value - 1 - - FlyBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - AlwaysAllowFly - - Comment - Ignore parcel/region setting that blocks flying - Persist - 1 - Type - Boolean - Value - 1 - - FlycamAbsolute - - Comment - Treat Flycam values as absolute positions (not deltas). - Persist - 1 - Type - Boolean - Value - 0 - - FlycamAxisDeadZone0 - - Comment - Flycam axis 0 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone1 - - Comment - Flycam axis 1 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone2 - - Comment - Flycam axis 2 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone3 - - Comment - Flycam axis 3 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone4 - - Comment - Flycam axis 4 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone5 - - Comment - Flycam axis 5 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisDeadZone6 - - Comment - Flycam axis 6 dead zone. - Persist - 1 - Type - F32 - Value - 0.1 - - FlycamAxisScale0 - - Comment - Flycam axis 0 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale1 - - Comment - Flycam axis 1 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale2 - - Comment - Flycam axis 2 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale3 - - Comment - Flycam axis 3 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale4 - - Comment - Flycam axis 4 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale5 - - Comment - Flycam axis 5 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamAxisScale6 - - Comment - Flycam axis 6 scaler. - Persist - 1 - Type - F32 - Value - 1.0 - - FlycamFeathering - - Comment - Flycam feathering (less is softer) - Persist - 1 - Type - F32 - Value - 16.0 - - FlycamZoomDirect - - Comment - Map flycam zoom axis directly to camera zoom. - Persist - 1 - Type - Boolean - Value - 0 - - FlyingAtExit - - Comment - Was flying when last logged out, so fly when logging in - Persist - 1 - Type - Boolean - Value - 0 - - FocusOffsetDefault - - Comment - Default focus point offset relative to avatar (x-axis is forward) - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.0 - 1.0 - - - FocusPosOnLogout - - Comment - Camera focus point when last logged out (global coordinates) - Persist - 1 - Type - Vector3D - Value - - 0.0 - 0.0 - 0.0 - - - FolderAutoOpenDelay - - Comment - Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop - Persist - 1 - Type - F32 - Value - 0.75 - - FolderLoadingMessageWaitTime - - Comment - Seconds to wait before showing the LOADING... text in folder views - Persist - 1 - Type - F32 - Value - 0.5 - - FontMonospace - - Comment - Name of monospace font that definitely exists (Truetype file name) - Persist - 0 - Type - String - Value - DejaVuSansMono.ttf - - FontSansSerif - - Comment - Name of primary sans-serif font that definitely exists (Truetype file name) - Persist - 0 - Type - String - Value - DroidSans.ttf - - FontSansSerifBundledFallback - - Comment - Name of secondary sans-serif font that definitely exists (Truetype file name) - Persist - 0 - Type - String - Value - DejaVuSansCondensed.ttf - - FontSansSerifBold - - Comment - Name of bold font (Truetype file name) - Persist - 0 - Type - String - Value - DroidSans-Bold.ttf - - FontSansSerifFallback - - Comment - Name of sans-serif font (Truetype file name) - Persist - 0 - Type - String - Value - - - FontSansSerifFallbackScale - - Comment - Scale of fallback font relative to huge font (fraction of huge font size) - Persist - 1 - Type - F32 - Value - 1.00 - - FontScreenDPI - - Comment - Font resolution, higher is bigger (pixels per inch) - Persist - 1 - Type - F32 - Value - 96.0 - - FontSizeHuge - - Comment - Size of huge font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 14.0 - - FontSizeLarge - - Comment - Size of large font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 11.0 - - FontSizeMedium - - Comment - Size of medium font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 9.5 - - FontSizeMonospace - - Comment - Size of monospaced font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 9.0 - - FontSizeSmall - - Comment - Size of small font (points, or 1/72 of an inch) - Persist - 1 - Type - F32 - Value - 8.5 - - ForceNotecardDragCargoPermissive - - Comment - For testing what does and does not work when using HTTPS upload - Persist - 1 - Type - Boolean - Value - 0 - - ForceNotecardDragCargoAcceptance - - Comment - For testing what does and does not work when using HTTPS upload - Persist - 1 - Type - Boolean - Value - 0 - - ForceShowGrid - - Comment - Always show grid dropdown on login screen - Persist - 1 - Type - Boolean - Value - 0 - - ForceMandatoryUpdate - - Comment - For QA: On next startup, forces the auto-updater to run - Persist - 1 - Type - Boolean - Value - 0 - - ForwardBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 45 - 54 - 66 - 29 - - - FreezeTime - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - FullScreen - - Comment - Run SL in fullscreen mode - Persist - 1 - Type - Boolean - Value - 0 - - FullScreenAspectRatio - - Comment - Aspect ratio of fullscreen display (width / height) - Persist - 1 - Type - F32 - Value - 1.33329999447 - - FullScreenAutoDetectAspectRatio - - Comment - Automatically detect proper aspect ratio for fullscreen display - Persist - 1 - Type - Boolean - Value - 1 - - FullScreenHeight - - Comment - Fullscreen resolution in height - Persist - 1 - Type - S32 - Value - 768 - - FullScreenWidth - - Comment - Fullscreen resolution in width - Persist - 1 - Type - S32 - Value - 1024 - - GridCrossSections - - Comment - Highlight cross sections of prims with grid manipulation plane. - Persist - 1 - Type - Boolean - Value - 0 - - GridDrawSize - - Comment - Visible extent of 2D snap grid (meters) - Persist - 1 - Type - F32 - Value - 12.0 - - GridMode - - Comment - Snap grid reference frame (0 = world, 1 = local, 2 = reference object) - Persist - 1 - Type - S32 - Value - 0 - - GridOpacity - - Comment - Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.699999988079 - - GridResolution - - Comment - Size of single grid step (meters) - Persist - 1 - Type - F32 - Value - 0.5 - - GridSubUnit - - Comment - Display fractional grid steps, relative to grid size - Persist - 1 - Type - Boolean - Value - 0 - - GridSubdivision - - Comment - Maximum number of times to divide single snap grid unit when GridSubUnit is true - Persist - 1 - Type - S32 - Value - 32 - - GroupNotifyBoxHeight - - Comment - Height of group notice messages - Persist - 1 - Type - S32 - Value - 260 - - GroupNotifyBoxWidth - - Comment - Width of group notice messages - Persist - 1 - Type - S32 - Value - 400 - - HTMLLinkColor - - Comment - Color of hyperlinks - Persist - 1 - Type - Color4 - Value - - 0.600000023842 - 0.600000023842 - 1.0 - 1.0 - - - HelpHomeURL - - Comment - URL of initial help page - Persist - 1 - Type - String - Value - help/index.html - - HelpLastVisitedURL - - Comment - URL of last help page, will be shown next time help is accessed - Persist - 1 - Type - String - Value - help/index.html - - HighResSnapshot - - Comment - Double resolution of snapshot from current window resolution - Persist - 1 - Type - Boolean - Value - 0 - - HtmlFindRect - - Comment - Rectangle for HTML find window - Persist - 1 - Type - Rect - Value - - 16 - 650 - 600 - 128 - - - HtmlHelpLastPage - - Comment - Last URL visited via help system - Persist - 1 - Type - String - Value - - - HtmlHelpRect - - Comment - Rectangle for HTML help window - Persist - 1 - Type - Rect - Value - - 16 - 650 - 600 - 128 - - - HtmlReleaseMessage - - Comment - Rectangle for HTML Release Message Floater window - Persist - 1 - Type - Rect - Value - - 46 - 520 - 400 - 128 - - - IMInChatConsole - - Comment - Copy IM into chat console - Persist - 1 - Type - Boolean - Value - 1 - - IMInChatHistory - - Comment - Copy IM into chat history - Persist - 1 - Type - Boolean - Value - 0 - - IMShowTimestamps - - Comment - Show timestamps in IM - Persist - 1 - Type - Boolean - Value - 1 - - IgnorePixelDepth - - Comment - Ignore pixel depth settings. - Persist - 1 - Type - Boolean - Value - 0 - - ImagePipelineUseHTTP - - Comment - If TRUE use HTTP GET to fetch textures from the server - Persist - 1 - Type - Boolean - Value - 1 - - InBandwidth - - Comment - Incoming bandwidth throttle (bps) - Persist - 1 - Type - F32 - Value - 0.0 - - InstallLanguage - - Comment - Language passed from installer (for UI) - Persist - 1 - Type - String - Value - en-us - - FetchInventoryOnLogin - - Comment - Automatically fetch the inventory in the background after login - Persist - 1 - Type - Boolean - Value - 1 - - InventoryAutoOpenDelay - - Comment - Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop - Persist - 1 - Type - F32 - Value - 1.0 - - InventorySortOrder - - Comment - Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 7 - - InvertMouse - - Comment - When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up) - Persist - 1 - Type - Boolean - Value - 0 - - JoystickAvatarEnabled - - Comment - Enables the Joystick to control Avatar movement. - Persist - 1 - Type - Boolean - Value - 1 - - JoystickAxis0 - - Comment - Flycam hardware axis mapping for internal axis 0 ([0, 5]). - Persist - 1 - Type - S32 - Value - 1 - - JoystickAxis1 - - Comment - Flycam hardware axis mapping for internal axis 1 ([0, 5]). - Persist - 1 - Type - S32 - Value - 0 - - JoystickAxis2 - - Comment - Flycam hardware axis mapping for internal axis 2 ([0, 5]). - Persist - 1 - Type - S32 - Value - 2 - - JoystickAxis3 - - Comment - Flycam hardware axis mapping for internal axis 3 ([0, 5]). - Persist - 1 - Type - S32 - Value - 4 - - JoystickAxis4 - - Comment - Flycam hardware axis mapping for internal axis 4 ([0, 5]). - Persist - 1 - Type - S32 - Value - 3 - - JoystickAxis5 - - Comment - Flycam hardware axis mapping for internal axis 5 ([0, 5]). - Persist - 1 - Type - S32 - Value - 5 - - JoystickAxis6 - - Comment - Flycam hardware axis mapping for internal axis 6 ([0, 5]). - Persist - 1 - Type - S32 - Value - -1 - - JoystickBuildEnabled - - Comment - Enables the Joystick to move edited objects. - Persist - 1 - Type - Boolean - Value - 0 - - JoystickEnabled - - Comment - Enables Joystick Input. - Persist - 1 - Type - Boolean - Value - 0 - - JoystickFlycamEnabled - - Comment - Enables the Joystick to control the flycam. - Persist - 0 - Type - Boolean - Value - 1 - - JoystickInitialized - - Comment - Whether or not a joystick has been detected and initiailized. - Persist - 1 - Type - String - Value - - - JoystickRunThreshold - - Comment - Input threshold to initiate running - Persist - 1 - Type - F32 - Value - 0.25 - - KeepAspectForSnapshot - - Comment - Use full window when taking snapshot, regardless of requested image size - Persist - 1 - Type - Boolean - Value - 1 - - LandBrushSize - - Comment - Size of affected region when using teraform tool - Persist - 1 - Type - F32 - Value - 2.0 - - LCDDestination - - Comment - Which LCD to use - Persist - 1 - Type - S32 - Value - 0 - - LSLFindCaseInsensitivity - - Comment - Use case insensitivity when searching in LSL editor - Persist - 1 - Type - Boolean - Value - 0 - - LSLHelpRect - - Comment - Rectangle for LSL help window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - - LSLHelpURL - - Comment - URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword - Persist - 1 - Type - String - Value - http://wiki.secondlife.com/wiki/[LSL_STRING] - - LagMeterShrunk - - Comment - Last large/small state for lag meter - Persist - 1 - Type - Boolean - Value - 0 - - Language - - Comment - Language specifier (for UI) - Persist - 1 - Type - String - Value - default - - LanguageIsPublic - - Comment - Let other residents see our language information - Persist - 1 - Type - Boolean - Value - 1 - - TranslateLanguage - - Comment - Translate Language specifier - Persist - 1 - Type - String - Value - default - - TranslateChat - - Comment - Translate incoming chat messages - Persist - 1 - Type - Boolean - Value - 0 - - LastFeatureVersion - - Comment - [DO NOT MODIFY] Version number for tracking hardware changes - Persist - 1 - Type - S32 - Value - 0 - - LastFindPanel - - Comment - Controls which find operation appears by default when clicking "Find" button - Persist - 1 - Type - String - Value - find_all_panel - - LastName - - Comment - Login last name - Persist - 1 - Type - String - Value - - - LastPrefTab - - Comment - Last selected tab in preferences window - Persist - 1 - Type - S32 - Value - 0 - - LastRunVersion - - Comment - Version number of last instance of the viewer that you ran - Persist - 1 - Type - String - Value - 0.0.0 - - LastSnapshotToEmailHeight - - Comment - The height of the last email snapshot, in px - Persist - 1 - Type - S32 - Value - 768 - - LastSnapshotToEmailWidth - - Comment - The width of the last email snapshot, in px - Persist - 1 - Type - S32 - Value - 1024 - - LastSnapshotToDiskHeight - - Comment - The height of the last disk snapshot, in px - Persist - 1 - Type - S32 - Value - 768 - - LastSnapshotToDiskWidth - - Comment - The width of the last disk snapshot, in px - Persist - 1 - Type - S32 - Value - 1024 - - LastSnapshotToInventoryHeight - - Comment - The height of the last texture snapshot, in px - Persist - 1 - Type - S32 - Value - 512 - - LastSnapshotToInventoryWidth - - Comment - The width of the last texture snapshot, in px - Persist - 1 - Type - S32 - Value - 512 - - LastSnapshotType - - Comment - Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image) - Persist - 1 - Type - S32 - Value - 0 - - LeftClickShowMenu - - Comment - Left click opens pie menu (FALSE = left click touches or grabs object) - Persist - 1 - Type - Boolean - Value - 0 - - LegacyMultiAttachmentSupport - - Comment - Converts legacy "secondary attachment points" to multi-attachments for other avatars - Persist - 1 - Type - Boolean - Value - 1 - - LimitDragDistance - - Comment - Limit translation of object via translate tool - Persist - 1 - Type - Boolean - Value - 1 - - LimitSelectDistance - - Comment - Disallow selection of objects beyond max select distance - Persist - 1 - Type - Boolean - Value - 0 - - LipSyncAah - - Comment - Aah (jaw opening) babble loop - Persist - 1 - Type - String - Value - 257998776531013446642343 - - LipSyncAahPowerTransfer - - Comment - Transfer curve for Voice Interface power to aah lip sync amplitude - Persist - 1 - Type - String - Value - 0000123456789 - - LipSyncEnabled - - Comment - 0 disable lip-sync, 1 enable babble loop - Persist - 1 - Type - Boolean - Value - 1 - - LipSyncOoh - - Comment - Ooh (mouth width) babble loop - Persist - 1 - Type - String - Value - 1247898743223344444443200000 - - LipSyncOohAahRate - - Comment - Rate to babble Ooh and Aah (/sec) - Persist - 1 - Type - F32 - Value - 24.0 - - LipSyncOohPowerTransfer - - Comment - Transfer curve for Voice Interface power to ooh lip sync amplitude - Persist - 1 - Type - String - Value - 0012345566778899 - - LocalCacheVersion - - Comment - Version number of cache - Persist - 1 - Type - S32 - Value - 0 - - LogMessages - - Comment - Log network traffic - Persist - 1 - Type - Boolean - Value - 0 - - LoginAsGod - - Comment - Attempt to login with god powers (Linden accounts only) - Persist - 1 - Type - Boolean - Value - 0 - - LoginLastLocation - - Comment - Login at same location you last logged out - Persist - 1 - Type - Boolean - Value - 1 - - LoginPage - - Comment - Login authentication page. - Persist - 1 - Type - String - Value - - - LosslessJ2CUpload - - Comment - Use lossless compression for small image uploads - Persist - 1 - Type - Boolean - Value - 0 - - MainloopTimeoutDefault - - Comment - Timeout duration for mainloop lock detection, in seconds. - Persist - 1 - Type - F32 - Value - 20.0 - - MapServerURL - - Comment - World map URL template for locating map tiles - Persist - 0 - Type - String - Value - http://map.secondlife.com.s3.amazonaws.com/ - - UseWebMapTiles - - Comment - Use web map tiles whenever possible - Persist - 1 - Type - Boolean - Value - 1 - - MapOverlayIndex - - Comment - Currently selected world map type - Persist - 1 - Type - S32 - Value - 0 - - MapScale - - Comment - World map zoom level (pixels per region) - Persist - 1 - Type - F32 - Value - 128.0 - - MapShowAgentCount - - Comment - Show number of agents next to region names on world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowPGEvents - - Comment - Show PG events on world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowMatureEvents - - Comment - Show mature events on world map - Persist - 1 - Type - Boolean - Value - 0 - - MapShowAdultEvents - - Comment - Show adult events on world map - Persist - 1 - Type - Boolean - Value - 0 - - MapShowInfohubs - - Comment - Show infohubs on the world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowLandForSale - - Comment - Show land for sale on world map - Persist - 1 - Type - Boolean - Value - 0 - - MapShowPeople - - Comment - Show other users on world map - Persist - 1 - Type - Boolean - Value - 1 - - MapShowTelehubs - - Comment - Show telehubs on world map - Persist - 1 - Type - Boolean - Value - 1 - - Marker - - Comment - [NOT USED] - Persist - 1 - Type - String - Value - - - MaxDragDistance - - Comment - Maximum allowed translation distance in a single operation of translate tool (meters from start point) - Persist - 1 - Type - F32 - Value - 48.0 - - MaxSelectDistance - - Comment - Maximum allowed selection distance (meters from avatar) - Persist - 1 - Type - F32 - Value - 64.0 - - MeanCollisionBump - - Comment - You have experienced an abuse of being bumped by an object or avatar - Persist - 1 - Type - Boolean - Value - 0 - - MeanCollisionPhysical - - Comment - You have experienced an abuse from a physical object - Persist - 1 - Type - Boolean - Value - 0 - - MeanCollisionPushObject - - Comment - You have experienced an abuse of being pushed by a scripted object - Persist - 1 - Type - Boolean - Value - 0 - - MeanCollisionScripted - - Comment - You have experienced an abuse from a scripted object - Persist - 1 - Type - Boolean - Value - 0 - - MeanCollisionSelected - - Comment - You have experienced an abuse of being pushed via a selected object - Persist - 1 - Type - Boolean - Value - 0 - - MediaControlFadeTime - - Comment - Amount of time (in seconds) that the media control fades - Persist - 1 - Type - F32 - Value - 1.5 - - MediaControlTimeout - - Comment - Amount of time (in seconds) for media controls to fade with no mouse activity - Persist - 1 - Type - F32 - Value - 3.0 - - MediaOnAPrimUI - - Comment - Whether or not to show the "link sharing" UI - Persist - 1 - Type - Boolean - Value - 0 - - MemoryLogFrequency - - Comment - Seconds between display of Memory in log (0 for never) - Persist - 1 - Type - F32 - Value - 600.0 - - MenuAccessKeyTime - - Comment - Time (seconds) in which the menu key must be tapped to move focus to the menu bar - Persist - 1 - Type - F32 - Value - 0.25 - - MenuBarHeight - - Comment - - Persist - 0 - Type - S32 - Value - 18 - - MenuBarWidth - - Comment - - Persist - 0 - Type - S32 - Value - 410 - - MigrateCacheDirectory - - Comment - Check for old version of disk cache to migrate to current location - Persist - 1 - Type - Boolean - Value - 1 - - MiniMapPrimMaxRadius - - Comment - Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag. - Persist - 1 - Type - F32 - Value - 256.0 - - MiniMapCenter - - Comment - Sets the focal point of the minimap. (0=None, 1=Camera) - Persist - 1 - Type - S32 - Value - 1 - - MiniMapRotate - - Comment - Rotate miniature world map to avatar direction - Persist - 1 - Type - Boolean - Value - 1 - - MiniMapScale - - Comment - Miniature world map zoom level (pixels per region) - Persist - 1 - Type - F32 - Value - 128.0 - - MouseSensitivity - - Comment - Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity) - Persist - 1 - Type - F32 - Value - 3.0 - - MouseSmooth - - Comment - Smooths out motion of mouse when in mouselook mode. - Persist - 1 - Type - Boolean - Value - 0 - - MouseSun - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - MouselookBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - MoveDownBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 91 - 29 - 116 - 4 - - - MoveUpBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 91 - 54 - 116 - 29 - - - DisableWindAudio - - Comment - Disable the wind audio effect - Persist - 1 - Type - Boolean - Value - 0 - - MuteAmbient - - Comment - Ambient sound effects, such as wind noise, play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - - MuteAudio - - Comment - All audio plays at 0 volume (streaming audio still takes up bandwidth, for example) - Persist - 1 - Type - Boolean - Value - 0 - - MuteMedia - - Comment - Media plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - - MuteMusic - - Comment - Music plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - - MuteSounds - - Comment - Sound effects play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - - MuteUI - - Comment - UI sound effects play at 0 volume - Persist - 1 - Type - Boolean - Value - 0 - - MuteVoice - - Comment - Voice plays at 0 volume (streaming audio still takes up bandwidth) - Persist - 1 - Type - Boolean - Value - 0 - - MuteWhenMinimized - - Comment - Mute audio when SL window is minimized - Persist - 1 - Type - Boolean - Value - 1 - - NearMeRange - - Comment - Search radius for nearby avatars - Persist - 1 - Type - F32 - Value - 20 - - NextOwnerCopy - - Comment - Newly created objects can be copied by next owner - Persist - 1 - Type - Boolean - Value - 0 - - NextOwnerModify - - Comment - Newly created objects can be modified by next owner - Persist - 1 - Type - Boolean - Value - 0 - - NextOwnerTransfer - - Comment - Newly created objects can be resold or given away by next owner - Persist - 1 - Type - Boolean - Value - 1 - - NewCacheLocation - - Comment - Change the location of the local disk cache to this - Persist - 1 - Type - String - Value - - - NextLoginLocation - - Comment - Location to log into by default. - Persist - 1 - Type - String - Value - - - Nimble - - Comment - Disables landing and jumping delays. - Persist - 1 - Type - Boolean - Value - 0 - - NoAudio - - Comment - Disable audio playback. - Persist - 1 - Type - Boolean - Value - 0 - - NoHardwareProbe - - Comment - Disable hardware probe. - Persist - 1 - Type - Boolean - Value - 0 - - NoInventoryLibrary - - Comment - Do not request inventory library. - Persist - 1 - Type - Boolean - Value - 0 - - NoPreload - - Comment - Disable sound and image preload. - Persist - 1 - Type - Boolean - Value - 0 - - NoVerifySSLCert - - Comment - Do not verify SSL peers. - Persist - 1 - Type - Boolean - Value - 0 - - NotecardEditorRect - - Comment - Rectangle for notecard editor - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - - NotifyBoxHeight - - Comment - Height of notification messages - Persist - 1 - Type - S32 - Value - 200 - - NotifyBoxWidth - - Comment - Width of notification messages - Persist - 1 - Type - S32 - Value - 350 - - NotifyMoneyChange - - Comment - Pop up notifications for all L$ transactions - Persist - 1 - Type - Boolean - Value - 1 - - NotifyTipDuration - - Comment - Length of time that notification tips stay on screen (seconds) - Persist - 1 - Type - F32 - Value - 4.0 - - NumSessions - - Comment - Number of successful logins to Second Life - Persist - 1 - Type - S32 - Value - 0 - - NumpadControl - - Comment - How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock) - Persist - 1 - Type - S32 - Value - 0 - - OpenDebugStatAdvanced - - Comment - Expand advanced performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatBasic - - Comment - Expand basic performance stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatNet - - Comment - Expand network stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatRender - - Comment - Expand render stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatSim - - Comment - Expand simulator performance stats display - Persist - 1 - Type - Boolean - Value - 1 - - OpenDebugStatTexture - - Comment - Expand Texture performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatPhysicsDetails - - Comment - Expand Physics Details performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatSimTime - - Comment - Expand Simulator Time performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OpenDebugStatSimTimeDetails - - Comment - Expand Simulator Time Details performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - OutBandwidth - - Comment - Outgoing bandwidth throttle (bps) - Persist - 1 - Type - F32 - Value - 0.0 - - OverdrivenColor - - Comment - Color of various indicators when resident is speaking too loud. - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.0 - 0.0 - 1.0 - - - OverlayTitle - - Comment - Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces) - Persist - 1 - Type - String - Value - Set_via_OverlayTitle_in_settings.xml - - PTTCurrentlyEnabled - - Comment - Use Push to Talk mode - Persist - 0 - Type - Boolean - Value - 1 - - PacketDropPercentage - - Comment - Percentage of packets dropped by the client. - Persist - 1 - Type - F32 - Value - 0.0 - - ParcelMediaAutoPlayEnable - - Comment - Auto play parcel media when available - Persist - 1 - Type - Boolean - Value - 0 - - PerAccountSettingsFile - - Comment - Persisted client settings file name (per user). - Persist - 0 - Type - String - Value - - - PermissionsCautionEnabled - - Comment - When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission - Persist - 0 - Type - Boolean - Value - 1 - - PermissionsCautionNotifyBoxHeight - - Comment - Height of caution-style notification messages - Persist - 0 - Type - S32 - Value - 344 - - RevokePermsOnStandUp - - Comment - When enabled, revokes any permission granted to an object you don't own and from which your avatar is standing up - Persist - 1 - Type - Boolean - Value - 0 - - PermissionsManagerRect - - Comment - Rectangle for permissions manager window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - - PickerContextOpacity - - Comment - Controls overall opacity of context frustrum connecting color and texture pickers with their swatches - Persist - 1 - Type - F32 - Value - 0.34999999404 - - PicksPerSecondMouseMoving - - Comment - How often to perform hover picks while the mouse is moving (picks per second) - Persist - 1 - Type - F32 - Value - 5.0 - - PicksPerSecondMouseStationary - - Comment - How often to perform hover picks while the mouse is stationary (picks per second) - Persist - 1 - Type - F32 - Value - 0.0 - - PieMenuLineWidth - - Comment - Width of lines in pie menu display (pixels) - Persist - 1 - Type - F32 - Value - 2.5 - - PinTalkViewOpen - - Comment - Stay in IM after hitting return - Persist - 1 - Type - Boolean - Value - 1 - - PingInterpolate - - Comment - Extrapolate object position along velocity vector based on ping delay - Persist - 1 - Type - Boolean - Value - 0 - - PitchFromMousePosition - - Comment - Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom) - Persist - 1 - Type - F32 - Value - 90.0 - - PlayTypingAnim - - Comment - Your avatar plays the typing animation whenever you type in the chat bar - Persist - 1 - Type - Boolean - Value - 1 - - PlayTypingSound - - Comment - TRUE to play and hear the typing sound whenever you or another avatar types in the chat bar - Persist - 1 - Type - Boolean - Value - 1 - - PrecachingDelay - - Comment - Delay when logging in to load world before showing it (seconds) - Persist - 1 - Type - F32 - Value - 6.0 - - PreferredMaturity - - Comment - Setting for the user's preferred maturity level. - Persist - 1 - Type - U32 - Value - 13 - - PreviewAnimRect - - Comment - Rectangle for animation preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - - PreviewClassifiedRect - - Comment - Rectangle for URL preview window - Persist - 1 - Type - Rect - Value - - 0 - 530 - 420 - 0 - - - PreviewEventRect - - Comment - Rectangle for Event preview window - Persist - 1 - Type - Rect - Value - - 0 - 530 - 420 - 0 - - - PreviewLandmarkRect - - Comment - Rectangle for landmark preview window - Persist - 1 - Type - Rect - Value - - 0 - 90 - 300 - 0 - - - PreviewObjectRect - - Comment - Rectangle for object preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - - PreviewScriptRect - - Comment - Rectangle for script preview window - Persist - 1 - Type - Rect - Value - - 0 - 586 - 576 - 0 - - - SaveScriptsAsMono - - Comment - When set to TRUE, save scripts in inventory as Mono scripts instead of LSL2 - Persist - 1 - Type - Boolean - Value - 1 - - PreviewSoundRect - - Comment - Rectangle for sound preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - - PreviewTextureRect - - Comment - Rectangle for texture preview window - Persist - 1 - Type - Rect - Value - - 0 - 400 - 400 - 0 - - - PreviewURLRect - - Comment - Rectangle for URL preview window - Persist - 1 - Type - Rect - Value - - 0 - 90 - 300 - 0 - - - PreviewWearableRect - - Comment - Rectangle for wearable preview window - Persist - 1 - Type - Rect - Value - - 0 - 85 - 300 - 0 - - - ProbeHardwareOnStartup - - Comment - Query current hardware configuration on application startup - Persist - 1 - Type - Boolean - Value - 1 - - PropertiesRect - - Comment - Rectangle for inventory item properties window - Persist - 1 - Type - Rect - Value - - 0 - 320 - 350 - 0 - - - PurgeCacheOnNextStartup - - Comment - Clear local file cache next time viewer is run - Persist - 1 - Type - Boolean - Value - 0 - - PurgeCacheOnStartup - - Comment - Clear local file cache every time viewer is run - Persist - 1 - Type - Boolean - Value - 0 - - PushToTalkButton - - Comment - Which button or keyboard key is used for push-to-talk - Persist - 1 - Type - String - Value - MiddleMouse - - PushToTalkToggle - - Comment - Should the push-to-talk button behave as a toggle - Persist - 1 - Type - Boolean - Value - 0 - - QAMode - - Comment - Enable Testing Features. - Persist - 1 - Type - Boolean - Value - 0 - - QuietSnapshotsToDisk - - Comment - Take snapshots to disk without playing animation or sound - Persist - 1 - Type - Boolean - Value - 0 - - QuitAfterSeconds - - Comment - The duration allowed before quitting. - Persist - 1 - Type - F32 - Value - 0.0 - - RadioLandBrushAction - - Comment - Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert) - Persist - 1 - Type - S32 - Value - 0 - - RadioLandBrushSize - - Comment - Size of land modification brush (0 = small, 1 = medium, 2 = large) - Persist - 1 - Type - S32 - Value - 0 - - LandBrushForce - - Comment - Multiplier for land modification brush force. - Persist - 1 - Type - F32 - Value - 1.0 - - RecentItemsSortOrder - - Comment - Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 1 - - RectangleSelectInclusive - - Comment - Select objects that have at least one vertex inside selection rectangle - Persist - 1 - Type - Boolean - Value - 1 - - RegionTextureSize - - Comment - Terrain texture dimensions (power of 2) - Persist - 1 - Type - U32 - Value - 256 - - RememberPassword - - Comment - Keep password (in encrypted form) for next login - Persist - 1 - Type - Boolean - Value - 1 - - RenderAnisotropic - - Comment - Render textures using anisotropic filtering - Persist - 1 - Type - Boolean - Value - 0 - - RenderAppleUseMultGL - - Comment - Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL). - Persist - 1 - Type - Boolean - Value - 0 - - RenderAttachedLights - - Comment - Render lighted prims that are attached to avatars - Persist - 1 - Type - Boolean - Value - 1 - - RenderAttachedParticles - - Comment - Render particle systems that are attached to avatars - Persist - 1 - Type - Boolean - Value - 1 - - RenderAvatarCloth - - Comment - Controls if avatars use wavy cloth - Persist - 1 - Type - Boolean - Value - 1 - - RenderAvatarLODFactor - - Comment - Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 0.5 - - RenderAvatarMaxVisible - - Comment - Maximum number of avatars to display at any one time - Persist - 1 - Type - S32 - Value - 35 - - RenderAvatarInvisible - - Comment - Set your avatar as Invisible - Persist - 0 - Type - Boolean - Value - 0 - - RenderAvatarVP - - Comment - Use vertex programs to perform hardware skinning of avatar - Persist - 1 - Type - Boolean - Value - 1 - - RenderShadowGaussian - - Comment - Gaussian coefficients for the two shadow/SSAO blurring passes (z component unused). - Persist - 1 - Type - Vector3 - Value - - 2.0 - 2.0 - 0.0 - - - RenderShadowNearDist - - Comment - Near clip plane of shadow camera (affects precision of depth shadows). - Persist - 1 - Type - Vector3 - Value - - 256 - 256 - 256 - - - RenderShadowClipPlanes - - Comment - Near clip plane split distances for shadow map frusta. - Persist - 1 - Type - Vector3 - Value - - 4.0 - 8.0 - 24.0 - - - RenderSSAOScale - - Comment - Scaling factor for the area to sample for occluders (pixels at 1 meter away, inversely varying with distance) - Persist - 1 - Type - F32 - Value - 500.0 - - RenderSSAOMaxScale - - Comment - Maximum screen radius for sampling (pixels) - Persist - 1 - Type - U32 - Value - 60 - - RenderSSAOFactor - - Comment - Occlusion sensitivity factor for ambient occlusion (larger is more) - Persist - 1 - Type - F32 - Value - 0.30 - - RenderSSAOEffect - - Comment - Multiplier for (1) value and (2) saturation (HSV definition), for areas which are totally occluded. Blends with original color for partly-occluded areas. (Third component is unused.) - Persist - 1 - Type - Vector3 - Value - - 0.40 - 1.00 - 0.00 - - - RenderBumpmapMinDistanceSquared - - Comment - Maximum distance at which to render bumpmapped primitives (distance in meters, squared) - Persist - 1 - Type - F32 - Value - 100.0 - - RenderNormalMapScale - - Comment - Scaler applied to height map when generating normal maps - Persist - 1 - Type - F32 - Value - 128 - - RenderCubeMap - - Comment - Whether we can render the cube map or not - Persist - 1 - Type - Boolean - Value - 1 - - RenderCustomSettings - - Comment - Do you want to set the graphics settings yourself - Persist - 1 - Type - Boolean - Value - 0 - - RenderDebugGL - - Comment - Enable strict GL debugging. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDebugPipeline - - Comment - Enable strict pipeline debugging. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDebugTextureBind - - Comment - Enable texture bind performance test. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDelayCreation - - Comment - Throttle creation of drawables. - Persist - 1 - Type - Boolean - Value - 0 - - RenderAnimateRes - - Comment - Animate rezing prims. - Persist - 1 - Type - Boolean - Value - 0 - - RenderAnimateTrees - - Comment - Use GL matrix ops to animate tree branches. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDeferredAlphaSoften - - Comment - Scalar for softening alpha surfaces (for soft particles). - Persist - 1 - Type - F32 - Value - 0.75 - - RenderDeferredNoise - - Comment - Noise scalar to hide banding in deferred render. - Persist - 1 - Type - F32 - Value - 4 - - RenderDeferred - - Comment - Use deferred rendering pipeline. - Persist - 1 - Type - Boolean - Value - 0 - - RenderDeferredSunShadow - - Comment - Generate shadows from the sun. - Persist - 1 - Type - Boolean - Value - 1 - - RenderDeferredSunWash - - Comment - Amount local lights are washed out by sun. - Persist - 1 - Type - F32 - Value - 0.5 - - RenderShadowNoise - - Comment - Magnitude of noise on shadow samples. - Persist - 1 - Type - F32 - Value - -0.0001 - - RenderShadowBlurSize - - Comment - Scale of shadow softening kernel. - Persist - 1 - Type - F32 - Value - 0.7 - - RenderShadowBlurSamples - - Comment - Number of samples to take for each pass of shadow blur (value range 1-16). Actual number of samples is value * 2 - 1. - Persist - 1 - Type - U32 - Value - 5 - - RenderDynamicLOD - - Comment - Dynamically adjust level of detail. - Persist - 1 - Type - Boolean - Value - 1 - - RenderFSAASamples - - Comment - Number of samples to use for FSAA (0 = no AA). - Persist - 1 - Type - U32 - Value - 0 - - RenderFarClip - - Comment - Distance of far clip plane from camera (meters) - Persist - 1 - Type - F32 - Value - 256.0 - - SavedRenderFarClip - - Comment - Saved draw distance (used in case of logout during speed rezzing) - Persist - 1 - Type - F32 - Value - 0.0 - - SpeedRez - - Comment - Set to TRUE to increase rezzing speed via draw distance stepping - Persist - 1 - Type - Boolean - Value - 0 - - SpeedRezInterval - - Comment - Interval in seconds between each draw distance increment - Persist - 1 - Type - U32 - Value - 20 - - RenderFastAlpha - - Comment - Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces). - Persist - 1 - Type - Boolean - Value - 0 - - RenderFastUI - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - - RenderFlexTimeFactor - - Comment - Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderFogRatio - - Comment - Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance) - Persist - 1 - Type - F32 - Value - 4.0 - - RenderGamma - - Comment - Sets gamma exponent for renderer - Persist - 1 - Type - F32 - Value - 0.0 - - RenderGammaFull - - Comment - Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2. - Persist - 1 - Type - Boolean - Value - 1.0 - - RenderGlow - - Comment - Render bloom post effect. - Persist - 1 - Type - Boolean - Value - 1 - - RenderGlowIterations - - Comment - Number of times to iterate the glow (higher = wider and smoother but slower) - Persist - 1 - Type - S32 - Value - 2 - - RenderGlowLumWeights - - Comment - Weights for each color channel to be used in calculating luminance (should add up to 1.0) - Persist - 1 - Type - Vector3 - Value - - 0.299 - 0.587 - 0.114 - - - RenderGlowMaxExtractAlpha - - Comment - Max glow alpha value for brightness extraction to auto-glow. - Persist - 1 - Type - F32 - Value - 0.065 - - RenderGlowMinLuminance - - Comment - Min luminance intensity necessary to consider an object bright enough to automatically glow. - Persist - 1 - Type - F32 - Value - 2.5 - - RenderGlowResolutionPow - - Comment - Glow map resolution power of two. - Persist - 1 - Type - S32 - Value - 9 - - RenderGlowStrength - - Comment - Additive strength of glow. - Persist - 1 - Type - F32 - Value - 0.35 - - RenderGlowWarmthAmount - - Comment - Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth - Persist - 1 - Type - F32 - Value - 0.0 - - RenderGlowWarmthWeights - - Comment - Weight of each color channel used before finding the max warmth - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.5 - 0.7 - - - RenderGlowWidth - - Comment - Glow sample size (higher = wider and softer but eventually more pixelated) - Persist - 1 - Type - F32 - Value - 1.3 - - RenderGround - - Comment - Determines whether we can render the ground pool or not - Persist - 1 - Type - Boolean - Value - 1 - - RenderHUDInSnapshot - - Comment - Display HUD attachments in snapshot - Persist - 1 - Type - Boolean - Value - 0 - - RenderHUDParticles - - Comment - Display particle systems in HUD attachments (experimental) - Persist - 1 - Type - Boolean - Value - 0 - - RenderHighlightSelections - - Comment - Show selection outlines on objects - Persist - 0 - Type - Boolean - Value - 1 - - RenderHiddenSelections - - Comment - Show selection lines on objects that are behind other objects - Persist - 1 - Type - Boolean - Value - 1 - - RenderHideGroupTitle - - Comment - Don't show my group title in my name label - Persist - 1 - Type - Boolean - Value - 0 - - RenderHideGroupTitleAll - - Comment - Show group titles in name labels - Persist - 1 - Type - Boolean - Value - 0 - - RenderInitError - - Comment - Error occured while initializing GL - Persist - 1 - Type - Boolean - Value - 0 - - RenderLightRadius - - Comment - Render the radius of selected lights - Persist - 1 - Type - Boolean - Value - 0 - - RenderLightingDetail - - Comment - Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights) - Persist - 1 - Type - S32 - Value - 1 - - RenderMaxPartCount - - Comment - Maximum number of particles to display on screen - Persist - 1 - Type - S32 - Value - 4096 - - RenderMaxNodeSize - - Comment - Maximum size of a single node's vertex data (in KB). - Persist - 1 - Type - S32 - Value - 8192 - - RenderMaxVBOSize - - Comment - Maximum size of a vertex buffer (in KB). - Persist - 1 - Type - S32 - Value - 512 - - RenderName - - Comment - Controls display of names above avatars (0 = never, 1 = fade, 2 = always) - Persist - 1 - Type - S32 - Value - 2 - - RenderNameFadeDuration - - Comment - Time interval over which to fade avatar names (seconds) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderNameHideSelf - - Comment - Don't display own name above avatar - Persist - 1 - Type - Boolean - Value - 0 - - RenderNameShowTime - - Comment - Fade avatar names after specified time (seconds) - Persist - 1 - Type - F32 - Value - 10.0 - - RenderObjectBump - - Comment - Show bumpmapping on primitives - Persist - 1 - Type - Boolean - Value - 1 - - ReSit - - Comment - Sit again if unsat - Persist - 0 - Type - Boolean - Value - 0 - - SpecifiedChannel - - Comment - What the viewer identifies itself as - Persist - 1 - Type - String - Value - AscentViewer - - SpecifiedVersionMaj - - Comment - Client's Major Version - Persist - 1 - Type - U32 - Value - 1 - - SpecifiedVersionMin - - Comment - Client's Minor Version - Persist - 1 - Type - U32 - Value - 4 - - SpecifiedVersionPatch - - Comment - Client's Patch Version - Persist - 1 - Type - U32 - Value - 0 - - SpecifiedVersionBuild - - Comment - Client's Build Version - Persist - 1 - Type - U32 - Value - 100000 - - RenderQualityPerformance - - Comment - Which graphics settings you've chosen - Persist - 1 - Type - U32 - Value - 1 - - RenderReflectionDetail - - Comment - Detail of reflection render pass. - Persist - 1 - Type - S32 - Value - 2 - - RenderReflectionRes - - Comment - Reflection map resolution. - Persist - 1 - Type - S32 - Value - 64 - - RenderResolutionDivisor - - Comment - Divisor for rendering 3D scene at reduced resolution. - Persist - 1 - Type - U32 - Value - 1 - - RenderShaderLightingMaxLevel - - Comment - Max lighting level to use in the shader (class 3 is default, 2 is less lights, 1 is sun/moon only. Works around shader compiler bugs on certain platforms.) - Persist - 1 - Type - S32 - Value - 3 - - RenderShaderLODThreshold - - Comment - Fraction of draw distance defining the switch to a different shader LOD - Persist - 1 - Type - F32 - Value - 1.0 - - RenderShaderParticleThreshold - - Comment - Fraction of draw distance to not use shader on particles - Persist - 1 - Type - F32 - Value - 0.25 - - RenderSunDynamicRange - - Comment - Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ). - Persist - 1 - Type - F32 - Value - 1.0 - - RenderTerrainDetail - - Comment - Detail applied to terrain texturing (0 = none, 1 or 2 = full) - Persist - 1 - Type - S32 - Value - 2 - - RenderTerrainLODFactor - - Comment - Controls level of detail of terrain (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderTerrainScale - - Comment - Terrain detail texture scale - Persist - 1 - Type - F32 - Value - 12.0 - - RenderTextureMemoryMultiple - - Comment - Multiple of texture memory value to use (should fit: 0 < value <= 1.0) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderTreeLODFactor - - Comment - Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 0.5 - - RenderUIInSnapshot - - Comment - Display user interface in snapshot - Persist - 1 - Type - Boolean - Value - 0 - - RenderUnloadedAvatar - - Comment - Show avatars which haven't finished loading - Persist - 1 - Type - Boolean - Value - 0 - - RenderUseFBO - - Comment - Whether we want to use GL_EXT_framebuffer_objects. - Persist - 1 - Type - Boolean - Value - 0 - - RenderUseFarClip - - Comment - If false, frustum culling will ignore far clip plane. - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseImpostors - - Comment - Whether we want to use impostors for far away avatars. - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseShaderLOD - - Comment - Whether we want to have different shaders for LOD - Persist - 1 - Type - Boolean - Value - 1 - - RenderUseShaderNearParticles - - Comment - Whether we want to use shaders on near particles - Persist - 1 - Type - Boolean - Value - 0 - - RenderVBOEnable - - Comment - Use GL Vertex Buffer Objects - Persist - 1 - Type - Boolean - Value - 1 - - RenderVBOMappingDisable - - Comment - Disable VBO glMapBufferARB - Persist - 1 - Type - Boolean - Value - 1 - - RenderVolumeLODFactor - - Comment - Controls level of detail of primitives (multiplier for current screen area when calculated level of detail) - Persist - 1 - Type - F32 - Value - 1.0 - - RenderWater - - Comment - Display water - Persist - 1 - Type - Boolean - Value - 1 - - RenderWaterMipNormal - - Comment - Use mip maps for water normal map. - Persist - 1 - Type - Boolean - Value - 1 - - RenderWaterRefResolution - - Comment - Water planar reflection resolution. - Persist - 1 - Type - S32 - Value - 512 - - RenderWaterReflections - - Comment - Reflect the environment in the water. - Persist - 1 - Type - Boolean - Value - 0 - - RenderWaterVoidCulling - - Comment - Cull void water objects when off-screen. - Persist - 1 - Type - Boolean - Value - 1 - - RotateRight - - Comment - Make the agent rotate to its right. - Persist - 1 - Type - Boolean - Value - 0 - - RotationStep - - Comment - All rotations via rotation tool are constrained to multiples of this unit (degrees) - Persist - 1 - Type - F32 - Value - 1.0 - - RunBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - RunMultipleThreads - - Comment - If TRUE keep background threads active during render - Persist - 1 - Type - Boolean - Value - 1 - - SafeMode - - Comment - Reset preferences, run in safe mode. - Persist - 1 - Type - Boolean - Value - 0 - - SaveInventoryScriptsAsMono - - Comment - When editing and saving a script in inventory, configure it to compile as mono when dragged into a task - Persist - 1 - Type - Boolean - Value - 0 - - SaveMinidump - - Comment - Save minidump for developer debugging on crash - Persist - 1 - Type - Boolean - Value - 1 - - ShowMapDestinationInChat - - Comment - Show llMapDestination as slurl in chat - Persist - 1 - Type - Boolean - Value - 0 - - DisableScriptTeleportRequest - - Comment - Don't allow scripts to pop the map - Persist - 1 - Type - Boolean - Value - 0 - - DisableClickSit - - Comment - Never sit by clicking a prim - Persist - 1 - Type - Boolean - Value - 0 - - PlayIMSound - - Comment - Play sound when receiving an IM - Persist - 1 - Type - Boolean - Value - 1 - - IMSoundID - - Comment - UUID of sound to play if PlayIMSound enabled - Persist - 1 - Type - String - Value - 4c366008-65da-2e84-9b74-f58a392b94c6 - - OpenIMOnTyping - - Comment - Open IM tab when typing message received - Persist - 1 - Type - Boolean - Value - 1 - - EnableGestures - - Comment - Enables gestures - Persist - 1 - Type - Boolean - Value - 1 - - DisableAgentUpdates - - Comment - Stops regular agent updates - Persist - 0 - Type - Boolean - Value - 0 - - ScaleShowAxes - - Comment - Show indicator of selected scale axis when scaling - Persist - 1 - Type - Boolean - Value - 0 - - RectangleSelectOverlap - - Comment - Selection box works as long as it remotely touches or something - Persist - 0 - Type - Boolean - Value - 0 - - InterceptorAffectYours - - Comment - Controls whether the interceptor stops your own objects too - Persist - 1 - Type - Boolean - Value - 0 - - InterceptorRange - - Comment - Controls the range of the interceptor effect - Persist - 1 - Type - F32 - Value - 10.0 - - ScaleStretchTextures - - Comment - Stretch textures along with object when scaling - Persist - 1 - Type - Boolean - Value - 1 - - ScaleUniform - - Comment - Scale selected objects evenly about center of selection - Persist - 1 - Type - Boolean - Value - 0 - - ScriptErrorColor - - Comment - Color of script error messages - Persist - 1 - Type - Color4 - Value - - 0.8235294117 - 0.2745098039 - 0.2745098039 - 1.0 - - - ScriptErrorsAsChat - - Comment - Display script errors and warning in chat history - Persist - 1 - Type - Boolean - Value - 0 - - ScriptHelpFollowsCursor - - Comment - Scripting help window updates contents based on script editor contents under text cursor - Persist - 1 - Type - Boolean - Value - 0 - - SearchURLDefault - - Comment - URL to load for empty searches - Persist - 1 - HideFromEditor - 1 - Type - String - Value - http://search.secondlife.com/client_search.php? - - SearchURLDefaultOpenSim - - Comment - URL to load for empty OpenSim searches - Persist - 1 - HideFromEditor - 0 - Type - String - Value - http://webi.metaverseink.com/opensim/results.jsp? - - SearchURLQuery - - Comment - URL to use for searches - Persist - 1 - HideFromEditor - 1 - Type - String - Value - http://search.secondlife.com/client_search.php?q=[QUERY]&s=[COLLECTION]& - - SearchURLSuffix2 - - Comment - Parameters added to end of search queries - Persist - 1 - HideFromEditor - 1 - Type - String - Value - lang=[LANG]&mat=[MATURITY]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION] - - SelectMovableOnly - - Comment - Select only objects you can move - Persist - 1 - Type - Boolean - Value - 0 - - SelectOwnedOnly - - Comment - Select only objects you own - Persist - 1 - Type - Boolean - Value - 0 - - SelectionHighlightAlpha - - Comment - Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque) - Persist - 1 - Type - F32 - Value - 0.40000000596 - - SelectionHighlightAlphaTest - - Comment - Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels) - Persist - 1 - Type - F32 - Value - 0.1 - - SelectionHighlightThickness - - Comment - Thickness of selection highlight line (fraction of view distance) - Persist - 1 - Type - F32 - Value - 0.00999999977648 - - SelectionHighlightUAnim - - Comment - Rate at which texture animates along U direction in selection highlight line (fraction of texture per second) - Persist - 1 - Type - F32 - Value - 0.0 - - SelectionHighlightUScale - - Comment - Scale of texture display on selection highlight line (fraction of texture size) - Persist - 1 - Type - F32 - Value - 0.1 - - SelectionHighlightVAnim - - Comment - Rate at which texture animates along V direction in selection highlight line (fraction of texture per second) - Persist - 1 - Type - F32 - Value - 0.5 - - SelectionHighlightVScale - - Comment - Scale of texture display on selection highlight line (fraction of texture size) - Persist - 1 - Type - F32 - Value - 1.0 - - ServerChoice - - Comment - [DO NOT MODIFY] Controls which grid you connect to - Persist - 1 - Type - S32 - Value - 0 - - ShareWithGroup - - Comment - Newly created objects are shared with the currently active group - Persist - 1 - Type - Boolean - Value - 0 - - ShowActiveSpeakers - - Comment - Display active speakers list on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowAllObjectHoverTip - - Comment - Show descriptive tooltip when mouse hovers over non-interactive and interactive objects. - Persist - 1 - Type - Boolean - Value - 0 - - ShowAxes - - Comment - Render coordinate frame at your position - Persist - 1 - Type - Boolean - Value - 0 - - ShowBanLines - - Comment - Show in-world ban/access borders - Persist - 1 - Type - Boolean - Value - 1 - - ShowCameraControls - - Comment - Display camera controls on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowChatHistory - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowCommunicate - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowConsoleWindow - - Comment - Show log in separate OS window - Persist - 1 - Type - Boolean - Value - 0 - - ShowCrosshairs - - Comment - Display crosshairs when in mouselook mode - Persist - 1 - Type - Boolean - Value - 1 - - ShowDebugConsole - - Comment - Show log in SL window - Persist - 1 - Type - Boolean - Value - 0 - - ShowDebugStats - - Comment - Show performance stats display - Persist - 1 - Type - Boolean - Value - 0 - - ShowDirectory - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowEmptyFoldersWhenSearching - - Comment - Shows folders that do not have any visible contents when applying a filter to inventory - Persist - 1 - Type - Boolean - Value - 0 - - ShowHoverTips - - Comment - Show descriptive tooltip when mouse hovers over items in world - Persist - 1 - Type - Boolean - Value - 1 - - ShowInventory - - Comment - Open inventory window on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowLandHoverTip - - Comment - Show descriptive tooltip when mouse hovers over land - Persist - 1 - Type - Boolean - Value - 0 - - ShowLeaders - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowPGSearchAll - - Comment - Display results of search All that are flagged as PG - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureSearchAll - - Comment - Display results of search All that are flagged as mature - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultSearchAll - - Comment - Display results of search All that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGGroups - - Comment - Display results of find groups that are flagged as PG - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureGroups - - Comment - Display results of find groups that are flagged as mature - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultGroups - - Comment - Display results of find groups that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGClassifieds - - Comment - Display results of find classifieds that are flagged as PG - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureClassifieds - - Comment - Display results of find classifieds that are flagged as mature - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultClassifieds - - Comment - Display results of find classifieds that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGEvents - - Comment - Display results of find events that are flagged as PG - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureEvents - - Comment - Display results of find events that are flagged as mature - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultEvents - - Comment - Display results of find events that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGLand - - Comment - Display results of find land sales that are flagged as PG - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureLand - - Comment - Display results of find land sales that are flagged as mature - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultLand - - Comment - Display results of find land sales that are flagged as adult - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowPGSims - - Comment - Display results of find places or find popular that are in PG sims - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 1 - - ShowMatureSims - - Comment - Display results of find places or find popular that are in mature sims - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowAdultSims - - Comment - Display results of find places or find popular that are in adult sims - Persist - 1 - HideFromEditor - 1 - Type - Boolean - Value - 0 - - ShowMiniMap - - Comment - Display mini map on login - Persist - 1 - Type - Boolean - Value - 1 - - ShowMovementControls - - Comment - Display movement controls on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowNearClip - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowNewInventory - - Comment - Automatically views new notecards/textures/landmarks - Persist - 1 - Type - Boolean - Value - 1 - - ShowInInventory - - Comment - Automatically opens inventory to show accepted objects - Persist - 1 - Type - Boolean - Value - 1 - - ShowObjectUpdates - - Comment - Show when update messages are received for individual objects - Persist - 0 - Type - Boolean - Value - 0 - - ShowOverlayTitle - - Comment - Prints watermark text message on screen - Persist - 1 - Type - Boolean - Value - 0 - - ShowParcelOwners - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowPermissions - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowPropertyLines - - Comment - Show line overlay demarking property boundaries - Persist - 1 - Type - Boolean - Value - 0 - - ShowSearchBar - - Comment - Show the Search Bar in the Status Overlay - Persist - 1 - Type - Boolean - Value - 0 - - ShowStartLocation - - Comment - Display starting location menu on login screen - Persist - 1 - Type - Boolean - Value - 1 - - ShowTangentBasis - - Comment - Render normal and binormal (debugging bump mapping) - Persist - 1 - Type - Boolean - Value - 0 - - ShowToolBar - - Comment - Show toolbar at bottom of screen - Persist - 1 - Type - Boolean - Value - 1 - - ShowTools - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - ShowTutorial - - Comment - Show tutorial window on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowVoiceChannelPopup - - Comment - Controls visibility of the current voice channel popup above the voice tab - Persist - 1 - Type - Boolean - Value - 0 - - ShowVolumeSettingsPopup - - Comment - Show individual volume slider for voice, sound effects, etc - Persist - 1 - Type - Boolean - Value - 0 - - ShowWorldMap - - Comment - Display world map on login - Persist - 1 - Type - Boolean - Value - 0 - - ShowXUINames - - Comment - Display XUI Names as Tooltips - Persist - 0 - Type - Boolean - Value - 0 - - SitBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - SkyAmbientScale - - Comment - Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level) - Persist - 1 - Type - F32 - Value - 0.300000011921 - - SkyEditPresets - - Comment - Whether to be able to edit the sky defaults or not - Persist - 1 - Type - Boolean - Value - 0 - - SkyNightColorShift - - Comment - Controls moonlight color (base color applied to moon as light source) - Persist - 1 - Type - Color3 - Value - - 0.699999988079 - 0.699999988079 - 1.0 - - - SkyOverrideSimSunPosition - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - SkySunDefaultPosition - - Comment - Default position of sun in sky (direction in world coordinates) - Persist - 1 - Type - Vector3 - Value - - 1.0 - 0.0 - 0.1 - - - SkyUseClassicClouds - - Comment - Whether to use the old Second Life particle clouds or not - Persist - 1 - Type - Boolean - Value - 1 - - SlideLeftBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 20 - 54 - 45 - 29 - - - SlideRightBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 66 - 54 - 91 - 29 - - - SmallAvatarNames - - Comment - Display avatar name text in smaller font - Persist - 1 - Type - Boolean - Value - 1 - - SnapEnabled - - Comment - Enable snapping to grid - Persist - 1 - Type - Boolean - Value - 1 - - SnapMargin - - Comment - Controls maximum distance between windows before they auto-snap together (pixels) - Persist - 1 - Type - S32 - Value - 10 - - SnapToMouseCursor - - Comment - When snapping to grid, center object on nearest grid point to mouse cursor - Persist - 1 - Type - Boolean - Value - 0 - - SnapshotFormat - - Comment - Save snapshots in this format (0 = PNG, 1 = JPEG, 2 = BMP) - Persist - 1 - Type - S32 - Value - 0 - - SnapshotLocalLastResolution - - Comment - Take next local snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - - SnapshotPostcardLastResolution - - Comment - Take next postcard snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - - SnapshotQuality - - Comment - Quality setting of postcard JPEGs (0 = worst, 100 = best) - Persist - 1 - Type - S32 - Value - 75 - - SnapshotTextureLastResolution - - Comment - Take next texture snapshot at this resolution - Persist - 1 - Type - S32 - Value - 0 - - SpeakingColor - - Comment - Color of various indicators when resident is speaking on a voice channel. - Persist - 1 - Type - Color4 - Value - - 0.0 - 1.0 - 0.0 - 1.0 - - - SpeedTest - - Comment - Performance testing mode, no network - Persist - 1 - Type - Boolean - Value - 0 - - StatsAutoRun - - Comment - Play back autopilot - Persist - 1 - Type - Boolean - Value - 0 - - StatsFile - - Comment - Filename for stats logging output - Persist - 1 - Type - String - Value - fs.txt - - StatsNumRuns - - Comment - Loop autopilot playback this number of times - Persist - 1 - Type - S32 - Value - -1 - - StatsPilotFile - - Comment - Filename for stats logging autopilot path - Persist - 1 - Type - String - Value - pilot.txt - - StatsQuitAfterRuns - - Comment - Quit application after this number of autopilot playback runs - Persist - 1 - Type - Boolean - Value - 0 - - StatsSessionTrackFrameStats - - Comment - Track rendering and network statistics - Persist - 1 - Type - Boolean - Value - 0 - - StatsSummaryFile - - Comment - Filename for stats logging summary - Persist - 1 - Type - String - Value - fss.txt - - StatusBarHeight - - Comment - Height of menu/status bar at top of screen (pixels) - Persist - 1 - Type - S32 - Value - 26 - - StatusBarPad - - Comment - Spacing between popup buttons at bottom of screen (Stand up, Release Controls) - Persist - 1 - Type - S32 - Value - 10 - - SystemLanguage - - Comment - Language indicated by system settings (for UI) - Persist - 1 - Type - String - Value - en-us - - TabToTextFieldsOnly - - Comment - TAB key takes you to next text entry field, instead of next widget - Persist - 1 - Type - Boolean - Value - 0 - - TemporaryUpload - - Comment - Whether or not a upload is temporary - Persist - 0 - Type - Boolean - Value - 0 - - TerrainColorHeightRange - - Comment - Altitude range over which a given terrain texture has effect (meters) - Persist - 1 - Type - F32 - Value - 60.0 - - TerrainColorStartHeight - - Comment - Starting altitude for terrain texturing (meters) - Persist - 1 - Type - F32 - Value - 20.0 - - TextureMemory - - Comment - Amount of memory to use for textures in MB (0 = autodetect) - Persist - 1 - Type - S32 - Value - 0 - - TexturePickerRect - - Comment - Rectangle for texture picker - Persist - 1 - Type - Rect - Value - - 0 - 290 - 350 - 0 - - - TexturePickerShowFolders - - Comment - Show folders with no texures in texture picker - Persist - 1 - Type - Boolean - Value - 1 - - TexturePickerSortOrder - - Comment - Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 2 - - ThirdPersonBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - - ThrottleBandwidthKBPS - - Comment - Maximum allowable downstream bandwidth (kilo bits per second) - Persist - 1 - Type - F32 - Value - 2000.0 - - ToolHelpRect - - Comment - - Persist - 0 - Type - Rect - Value - - 8 - 178 - 75 - 162 - - - ToolTipDelay - - Comment - Seconds before displaying tooltip when mouse stops over UI element - Persist - 1 - Type - F32 - Value - 0.699999988079 - - ToolboxAutoMove - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - - ToolboxRect - - Comment - Rectangle for tools window - Persist - 1 - Type - Rect - Value - - 0 - 100 - 100 - 100 - - - TrackFocusObject - - Comment - Camera tracks last object zoomed on - Persist - 1 - Type - Boolean - Value - 1 - - TurnLeftBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 20 - 29 - 45 - 4 - - - TurnRightBtnRect - - Comment - - Persist - 0 - Type - Rect - Value - - 66 - 29 - 91 - 4 - - - TutorialURL - - Comment - URL for tutorial menu item, set automatically during login - Persist - 0 - Type - String - Value - - - TypeAheadTimeout - - Comment - Time delay before clearing type-ahead buffer in lists (seconds) - Persist - 1 - Type - F32 - Value - 1.5 - - UIAutoScale - - Comment - Keep UI scale consistent across different resolutions - Persist - 1 - Type - Boolean - Value - 1 - - UIFloaterTestBool - - Comment - Example saved setting for the test floater - Persist - 1 - Type - Boolean - Value - 0 - - UIImgBtnCloseActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - - UIImgBtnCloseInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 779e4fa3-9b13-f74a-fba9-3886fe9c86ba - - UIImgBtnClosePressedUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - - UIImgBtnForwardInUUID - - Comment - - Persist - 0 - Type - String - Value - 54197a61-f5d1-4c29-95d2-c071d08849cb - - UIImgBtnForwardOutUUID - - Comment - - Persist - 0 - Type - String - Value - a0eb4021-1b20-4a53-892d-8faa9265a6f5 - - UIImgBtnJumpLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - 9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1 - - UIImgBtnJumpLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 3c18c87e-5f50-14e2-e744-f44734aa365f - - UIImgBtnJumpRightInUUID - - Comment - - Persist - 0 - Type - String - Value - 7dabc040-ec13-2309-ddf7-4f161f6de2f4 - - UIImgBtnJumpRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - ff9a71eb-7414-4cf8-866e-a701deb7c3cf - - UIImgBtnLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - 95463c78-aaa6-464d-892d-3a805b6bb7bf - - UIImgBtnLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 13a93910-6b44-45eb-ad3a-4d1324c59bac - - UIImgBtnMinimizeActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 34c9398d-bb78-4643-9633-46a2fa3e9637 - - UIImgBtnMinimizeInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 6e72abba-1378-437f-bf7a-f0c15f3e99a3 - - UIImgBtnMinimizePressedUUID - - Comment - - Persist - 0 - Type - String - Value - 39801651-26cb-4926-af57-7af9352c273c - - UIImgBtnMoveDownInUUID - - Comment - - Persist - 0 - Type - String - Value - b92a70b9-c841-4c94-b4b3-cee9eb460d48 - - UIImgBtnMoveDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - b5abc9fa-9e62-4e03-bc33-82c4c1b6b689 - - UIImgBtnMoveUpInUUID - - Comment - - Persist - 0 - Type - String - Value - 49b4b357-e430-4b56-b9e0-05b8759c3c82 - - UIImgBtnMoveUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - f887146d-829f-4e39-9211-cf872b78f97c - - UIImgBtnPanDownInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - - UIImgBtnPanDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - - UIImgBtnPanLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - - UIImgBtnPanLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - - UIImgBtnPanRightInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - - UIImgBtnPanRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - - UIImgBtnPanUpInUUID - - Comment - - Persist - 0 - Type - String - Value - e5821134-23c0-4bd0-af06-7fa95b9fb01a - - UIImgBtnPanUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - 47a8c844-cd2a-4b1a-be01-df8b1612fe5d - - UIImgBtnRestoreActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 111b39de-8928-4690-b7b2-e17d5c960277 - - UIImgBtnRestoreInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 0eafa471-70af-4882-b8c1-40a310929744 - - UIImgBtnRestorePressedUUID - - Comment - - Persist - 0 - Type - String - Value - 90a0ed5c-2e7b-4845-9958-a64a1b30f312 - - UIImgBtnRightInUUID - - Comment - - Persist - 0 - Type - String - Value - 5e616d0d-4335-476f-9977-560bccd009da - - UIImgBtnRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 5a44fd04-f52b-4c30-8b00-4a31e27614bd - - UIImgBtnScrollDownInUUID - - Comment - - Persist - 0 - Type - String - Value - d2421bab-2eaf-4863-b8f6-5e4c52519247 - - UIImgBtnScrollDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - b4ecdecf-5c8d-44e7-b882-17a77e88ed55 - - UIImgBtnScrollLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - ea137a32-6718-4d05-9c22-7d570d27b2cd - - UIImgBtnScrollLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 43773e8d-49aa-48e0-80f3-a04715f4677a - - UIImgBtnScrollRightInUUID - - Comment - - Persist - 0 - Type - String - Value - b749de64-e903-4c3c-ac0b-25fb6fa39cb5 - - UIImgBtnScrollRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 3d700d19-e708-465d-87f2-46c8c0ee7938 - - UIImgBtnScrollUpInUUID - - Comment - - Persist - 0 - Type - String - Value - a93abdf3-27b5-4e22-a8fa-c48216cd2e3a - - UIImgBtnScrollUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - dad084d7-9a46-452a-b0ff-4b9f1cefdde9 - - UIImgBtnSlideLeftInUUID - - Comment - - Persist - 0 - Type - String - Value - 724996f5-b956-46f6-9844-4fcfce1d5e83 - - UIImgBtnSlideLeftOutUUID - - Comment - - Persist - 0 - Type - String - Value - 82476321-0374-4c26-9567-521535ab4cd7 - - UIImgBtnSlideRightInUUID - - Comment - - Persist - 0 - Type - String - Value - 7eeb57d2-3f37-454d-a729-8b217b8be443 - - UIImgBtnSlideRightOutUUID - - Comment - - Persist - 0 - Type - String - Value - 1fbe4e60-0607-44d1-a50a-032eff56ae75 - - UIImgBtnSpinDownInUUID - - Comment - - Persist - 0 - Type - String - Value - a985ac71-052f-48e6-9c33-d931c813ac92 - - UIImgBtnSpinDownOutUUID - - Comment - - Persist - 0 - Type - String - Value - b6d240dd-5602-426f-b606-bbb49a30726d - - UIImgBtnSpinUpInUUID - - Comment - - Persist - 0 - Type - String - Value - c8450082-96a0-4319-8090-d3ff900b4954 - - UIImgBtnSpinUpOutUUID - - Comment - - Persist - 0 - Type - String - Value - 56576e6e-6710-4e66-89f9-471b59122794 - - UIImgBtnTabBottomInUUID - - Comment - - Persist - 0 - Type - String - Value - c001d8fd-a869-4b6f-86a1-fdcb106df9c7 - - UIImgBtnTabBottomOutUUID - - Comment - - Persist - 0 - Type - String - Value - bf0a8779-689b-48c3-bb9a-6af546366ef4 - - UIImgBtnTabBottomPartialInUUID - - Comment - - Persist - 0 - Type - String - Value - eb0b0904-8c91-4f24-b500-1180b91140de - - UIImgBtnTabBottomPartialOutUUID - - Comment - - Persist - 0 - Type - String - Value - 8dca716c-b29c-403a-9886-91c028357d6e - - UIImgBtnTabTopInUUID - - Comment - - Persist - 0 - Type - String - Value - 16d032e8-817b-4368-8a4e-b7b947ae3889 - - UIImgBtnTabTopOutUUID - - Comment - - Persist - 0 - Type - String - Value - 1ed83f57-41cf-4052-a3b4-2e8bb78d8191 - - UIImgBtnTabTopPartialInUUID - - Comment - - Persist - 0 - Type - String - Value - 7c6c6c26-0e25-4438-89bd-30d8b8e9d704 - - UIImgBtnTabTopPartialOutUUID - - Comment - - Persist - 0 - Type - String - Value - 932ad585-0e45-4a57-aa23-4cf81beeb7b0 - - UIImgBtnTearOffActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 - - UIImgBtnTearOffInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 - - UIImgBtnTearOffPressedUUID - - Comment - - Persist - 0 - Type - String - Value - d2524c13-4ba6-af7c-e305-8ac6cc18d86a - - UIImgCheckboxActiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - cf4a2ed7-1533-4686-9dde-df9a37ddca55 - - UIImgCheckboxActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 05bb64ee-96fd-4243-b74e-f40a41bc53ba - - UIImgCheckboxInactiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - c817c642-9abd-4236-9287-ae0513fe7d2b - - UIImgCheckboxInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 7d94cb59-32a2-49bf-a516-9e5a2045f9d9 - - UIImgCreateSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 0098b015-3daf-4cfe-a72f-915369ea97c2 - - UIImgCreateUUID - - Comment - - Persist - 0 - Type - String - Value - 7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b - - UIImgCrosshairsUUID - - Comment - Image to use for crosshair display (UUID texture reference) - Persist - 1 - Type - String - Value - 6e1a3980-bf2d-4274-8970-91e60d85fb52 - - UIImgDefaultEyesUUID - - Comment - - Persist - 0 - Type - String - Value - 6522e74d-1660-4e7f-b601-6f48c1659a77 - - UIImgDefaultGlovesUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultHairUUID - - Comment - - Persist - 0 - Type - String - Value - 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b - - UIImgDefaultJacketUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultPantsUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultShirtUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultShoesUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultSkirtUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultSocksUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultAlphaUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultAlphaUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultAlphaUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDefaultUnderwearUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgDirectionArrowUUID - - Comment - - Persist - 0 - Type - String - Value - 586383e8-4d9b-4fba-9196-2b5938e79c2c - - UIImgFaceSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - b4870163-6208-42a9-9801-93133bf9a6cd - - UIImgFaceUUID - - Comment - - Persist - 0 - Type - String - Value - ce15fd63-b0b6-463c-a37d-ea6393208b3e - - UIImgFocusSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - ab6a730e-ddfd-4982-9a32-c6de3de6d31d - - UIImgFocusUUID - - Comment - - Persist - 0 - Type - String - Value - 57bc39d1-288c-4519-aea6-6d1786a5c274 - - UIImgGrabSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - c1e21504-f136-451d-b8e9-929037812f1d - - UIImgGrabUUID - - Comment - - Persist - 0 - Type - String - Value - c63f124c-6340-4fbf-b59e-0869a44adb64 - - UIImgMoveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 46f17c7b-8381-48c3-b628-6a406e060dd6 - - UIImgMoveUUID - - Comment - - Persist - 0 - Type - String - Value - 2fa5dc06-bcdd-4e09-a426-f9f262d4fa65 - - UIImgRadioActiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 52f09e07-5816-4052-953c-94c6c10479b7 - - UIImgRadioActiveUUID - - Comment - - Persist - 0 - Type - String - Value - 7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f - - UIImgRadioInactiveSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 1975db39-aa29-4251-aea0-409ac09d414d - - UIImgRadioInactiveUUID - - Comment - - Persist - 0 - Type - String - Value - 90688481-67ff-4af0-be69-4aa084bcad1e - - UIImgResizeBottomRightUUID - - Comment - - Persist - 0 - Type - String - Value - e3690e25-9690-4f6c-a745-e7dcd885285a - - UIImgRotateSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - cdfb7fde-0d13-418a-9d89-2bd91019fc95 - - UIImgRotateUUID - - Comment - - Persist - 0 - Type - String - Value - c34b1eaa-aae3-4351-b082-e26c0b636779 - - UIImgScaleSelectedUUID - - Comment - - Persist - 0 - Type - String - Value - 55aa57ef-508a-47f7-8867-85d21c5a810d - - UIImgScaleUUID - - Comment - - Persist - 0 - Type - String - Value - 88a90fef-b448-4883-9344-ecf378a60433 - - UIImgWhiteUUID - - Comment - - Persist - 0 - Type - String - Value - 5748decc-f629-461c-9a36-a35a221fe21f - - UIImgInvisibleUUID - - Comment - - Persist - 0 - Type - String - Value - 38b86f85-2575-52a9-a531-23108d8da837 - - UIScaleFactor - - Comment - Size of UI relative to default layout on 1024x768 screen - Persist - 1 - Type - F32 - Value - 1.0 - - UploadBakedTexOld - - Comment - Forces the baked texture pipeline to upload using the old method. - Persist - 1 - Type - Boolean - Value - 0 - - UseAltKeyForMenus - - Comment - Access menus via keyboard by tapping Alt - Persist - 1 - Type - Boolean - Value - 0 - - UseChatBubbles - - Comment - Show chat above avatars head in chat bubbles - Persist - 1 - Type - Boolean - Value - 0 - - UseDebugMenus - - Comment - Turns on "Debug" menu - Persist - 1 - Type - Boolean - Value - 1 - - UseDefaultColorPicker - - Comment - Use color picker supplied by operating system - Persist - 1 - Type - Boolean - Value - 0 - - UseEnergy - - Comment - - Persist - 0 - Type - Boolean - Value - 1 - - UseExternalBrowser - - Comment - Use default browser when opening web pages instead of in-world browser. - Persist - 1 - Type - Boolean - Value - 0 - - UseFreezeFrame - - Comment - Freeze time when taking snapshots. - Persist - 1 - Type - Boolean - Value - 0 - - UseInventoryLinks - - Comment - When making a new outfit, use links for no-copy items - Persist - 1 - Type - Boolean - Value - 1 - - UseOcclusion - - Comment - Enable object culling based on occlusion (coverage) by other objects - Persist - 1 - Type - Boolean - Value - 1 - - SkipReflectOcclusionUpdates - - Comment - Enable optimization that prevents occlusion updates for refelction pass - Persist - 1 - Type - Boolean - Value - 1 - - UseOutfitFolders - - Comment - When making a new outfit, use Viewer 2 outfit folders - Persist - 1 - Type - Boolean - Value - 1 - - RenderDelayVBUpdate - - Comment - Delay vertex buffer updates until just before rendering - Persist - 1 - Type - Boolean - Value - 1 - - UseNewWalkRun - - Comment - Replace standard walk/run animations with new ones. - Persist - 1 - Type - Boolean - Value - 1 - - UseCrossWalkRun - - Comment - Use opposite gender walk/run animations. - Persist - 1 - Type - Boolean - Value - 0 - - UseStartScreen - - Comment - Whether to load a start screen image or not. - Persist - 1 - Type - Boolean - Value - 1 - - UseWebPagesOnPrims - - Comment - [NOT USED] - Persist - 1 - Type - Boolean - Value - 0 - - UserConnectionPort - - Comment - Port that this client transmits on. - Persist - 1 - Type - U32 - Value - 0 - - UserLogFile - - Comment - User specified log file name. - Persist - 1 - Type - String - Value - - - UserLoginInfo - - Comment - Users loging data. - Persist - 1 - Type - LLSD - Value - - - - VFSOldSize - - Comment - [DO NOT MODIFY] Controls resizing of local file cache - Persist - 1 - Type - U32 - Value - 0 - - VFSSalt - - Comment - [DO NOT MODIFY] Controls local file caching behavior - Persist - 1 - Type - U32 - Value - 1 - - VectorizeEnable - - Comment - Enable general vector operations and data alignment. - Persist - 1 - Type - Boolean - Value - 1 - - VectorizePerfTest - - Comment - Test SSE/vectorization performance and choose fastest version. - Persist - 1 - Type - Boolean - Value - 1 - - VectorizeProcessor - - Comment - 0=Compiler Default, 1=SSE, 2=SSE2, autodetected - Persist - 0 - Type - U32 - Value - 0 - - VectorizeSkin - - Comment - Enable vector operations for avatar skinning. - Persist - 1 - Type - Boolean - Value - 1 - - VelocityInterpolate - - Comment - Extrapolate object motion from last packet based on received velocity - Persist - 1 - Type - Boolean - Value - 1 - - VerboseLogs - - Comment - Display source file and line number for each log item for debugging purposes - Persist - 1 - Type - Boolean - Value - 0 - - VersionChannelName - - Comment - Versioning Channel Name. - Persist - 1 - Type - String - Value - Ascent Viewer Release - - VertexShaderEnable - - Comment - Enable/disable all GLSL shaders (debug) - Persist - 1 - Type - Boolean - Value - 0 - - VivoxAutoPostCrashDumps - - Comment - If true, SLVoice will automatically send crash dumps directly to Vivox. - Persist - 1 - Type - Boolean - Value - 0 - - VivoxDebugLevel - - Comment - Logging level to use when launching the vivox daemon - Persist - 1 - Type - String - Value - -1 - - VivoxDebugSIPURIHostName - - Comment - Hostname portion of vivox SIP URIs (empty string for the default). - Persist - 1 - Type - String - Value - - - VivoxDebugVoiceAccountServerURI - - Comment - URI to the vivox account management server (empty string for the default). - Persist - 1 - Type - String - Value - - - VoiceCallsFriendsOnly - - Comment - Only accept voice calls from residents on your friends list - Persist - 1 - Type - Boolean - Value - 0 - - AutoDisengageMic - - Comment - Automatically turn off the microphone when ending IM calls. - Persist - 1 - Type - Boolean - Value - 1 - - VoiceEarLocation - - Comment - Location of the virtual ear for voice - Persist - 1 - Type - S32 - Value - 0 - - VoiceHost - - Comment - Client SLVoice host to connect to - Persist - 1 - Type - String - Value - 127.0.0.1 - - VoiceImageLevel0 - - Comment - Texture UUID for voice image level 0 - Persist - 1 - Type - String - Value - 041ee5a0-cb6a-9ac5-6e49-41e9320507d5 - - VoiceImageLevel1 - - Comment - Texture UUID for voice image level 1 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel2 - - Comment - Texture UUID for voice image level 2 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel3 - - Comment - Texture UUID for voice image level 3 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel4 - - Comment - Texture UUID for voice image level 4 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel5 - - Comment - Texture UUID for voice image level 5 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceImageLevel6 - - Comment - Texture UUID for voice image level 6 - Persist - 1 - Type - String - Value - 29de489d-0491-fb00-7dab-f9e686d31e83 - - VoiceInputAudioDevice - - Comment - Audio input device to use for voice - Persist - 1 - Type - String - Value - Default - - VoiceOutputAudioDevice - - Comment - Audio output device to use for voice - Persist - 1 - Type - String - Value - Default - - VoicePort - - Comment - Client SLVoice port to connect to - Persist - 1 - Type - U32 - Value - 44125 - - WLSkyDetail - - Comment - Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies. - Persist - 1 - Type - U32 - Value - 64 - - WarnAboutBadPCI - - Comment - Enables AboutBadPCI warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnAboutDirectX9 - - Comment - Enables AboutDirectX9 warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnAboutOldGraphicsDriver - - Comment - Enables AboutOldGraphicsDriver warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnAboutPCIGraphics - - Comment - Enables AboutPCIGraphics warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnBrowserLaunch - - Comment - Enables BrowserLaunch warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnDeedObject - - Comment - Enables DeedObject warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstAO - - Comment - Enables FirstAO warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstAppearance - - Comment - Enables FirstAppearance warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstAttach - - Comment - Enables FirstAttach warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstBalanceDecrease - - Comment - Enables FirstBalanceDecrease warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstBalanceIncrease - - Comment - Enables FirstBalanceIncrease warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstBuild - - Comment - Enables FirstBuild warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstDebugMenus - - Comment - Enables FirstDebugMenus warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstFlexible - - Comment - Enables FirstFlexible warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstGoTo - - Comment - Enables FirstGoTo warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstInventory - - Comment - Enables FirstInventory warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstLeftClickNoHit - - Comment - Enables FirstLeftClickNoHit warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstMap - - Comment - Enables FirstMap warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstMedia - - Comment - Enables FirstMedia warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstOverrideKeys - - Comment - Enables FirstOverrideKeys warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstSandbox - - Comment - Enables FirstSandbox warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstSculptedPrim - - Comment - Enables FirstSculptedPrim warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstSit - - Comment - Enables FirstSit warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstStreamingMusic - - Comment - Enables FirstStreamingMusic warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstStreamingVideo - - Comment - Enables FirstStreamingVideo warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstTeleport - - Comment - Enables FirstTeleport warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnFirstVoice - - Comment - Enables FirstVoice warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnNewClassified - - Comment - Enables NewClassified warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnQuickTimeInstalled - - Comment - Enables QuickTimeInstalled warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WarnReturnToOwner - - Comment - Enables ReturnToOwner warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - WatchdogEnabled - - Comment - Controls whether the thread watchdog timer is activated. - Persist - 0 - Type - Boolean - Value - 0 - - WaterEditPresets - - Comment - Whether to be able to edit the water defaults or not - Persist - 1 - Type - Boolean - Value - 0 - - WaterGLFogDensityScale - - Comment - Maps shader water fog density to gl fog density - Persist - 1 - Type - F32 - Value - 0.02 - - WaterGLFogDepthFloor - - Comment - Controls how dark water gl fog can get - Persist - 1 - Type - F32 - Value - 0.25 - - WaterGLFogDepthScale - - Comment - Controls how quickly gl fog gets dark under water - Persist - 1 - Type - F32 - Value - 50.0 - - WindLightUseAtmosShaders - - Comment - Whether to enable or disable WindLight atmospheric shaders. - Persist - 1 - Type - Boolean - Value - 1 - - WindowHeight - - Comment - SL viewer window height - Persist - 1 - Type - S32 - Value - 700 - - WindowMaximized - - Comment - SL viewer window maximized on login - Persist - 1 - Type - Boolean - Value - 0 - - WindowWidth - - Comment - SL viewer window width - Persist - 1 - Type - S32 - Value - 1000 - - WindowX - - Comment - X coordinate of lower left corner of SL viewer window, relative to primary display (pixels) - Persist - 1 - Type - S32 - Value - 10 - - WindowY - - Comment - Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels) - Persist - 1 - Type - S32 - Value - 10 - - WornItemsSortOrder - - Comment - Specifies sort key for worn inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) - Persist - 1 - Type - U32 - Value - 7 - - XferThrottle - - Comment - Maximum allowable downstream bandwidth for asset transfers (bits per second) - Persist - 1 - Type - F32 - Value - 150000.0 - - YawFromMousePosition - - Comment - Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right) - Persist - 1 - Type - F32 - Value - 90.0 - - YieldTime - - Comment - Yield some time to the local host. - Persist - 1 - Type - S32 - Value - -1 - - ZoomDirect - - Comment - Map Joystick zoom axis directly to camera zoom. - Persist - 1 - Type - Boolean - Value - 0 - - ZoomTime - - Comment - Time of transition between different camera modes (seconds) - Persist - 1 - Type - F32 - Value - 0.40000000596 - - particlesbeacon - - Comment - Beacon / Highlight particle generators - Persist - 1 - Type - Boolean - Value - 0 - - physicalbeacon - - Comment - Beacon / Highlight physical objects - Persist - 1 - Type - Boolean - Value - 1 - - renderbeacons - - Comment - Beacon / Highlight particle generators - Persist - 1 - Type - Boolean - Value - 0 - - renderhighlights - - Comment - Beacon / Highlight scripted objects with touch function - Persist - 1 - Type - Boolean - Value - 1 - - renderattachment - - Comment - Render beacons for / Highlight attached objects as well - Persist - 1 - Type - Boolean - Value - 0 - - renderbyowner - - Comment - Render beacons/highlights for objects owned by anyone (0), you (1) or others (2) - Persist - 1 - Type - U32 - Value - 0 - - invisiblesoundsbeacon - - Comment - Beacon / Highlight invisible (non-object) sound generators - Persist - 1 - Type - Boolean - Value - 0 - - scriptsbeacon - - Comment - Beacon / Highlight scripted objects - Persist - 1 - Type - Boolean - Value - 0 - - scripttouchbeacon - - Comment - Beacon / Highlight scripted objects with touch function - Persist - 1 - Type - Boolean - Value - 1 - - soundsbeacon - - Comment - Beacon / Highlight sound generators - Persist - 1 - Type - Boolean - Value - 0 - - LogTextureDownloadsToViewerLog - - Comment - Send texture download details to the viewer log - Persist - 1 - Type - Boolean - Value - 0 - - LogTextureDownloadsToSimulator - - Comment - Send a digest of texture info to the sim - Persist - 1 - Type - Boolean - Value - 0 - - TextureLoggingThreshold - - Comment - Specifies the byte threshold at which texture download data should be sent to the sim. - Persist - 1 - Type - U32 - Value - 1 - - FloaterUploadRect - - Comment - Rectangle for Uploader - Persist - 1 - Type - Rect - Value - - 500 - 450 - 850 - 400 - - - FloaterContactRect - - Comment - Rectangle for Contact Group Manager - Persist - 1 - Type - Rect - Value - - 500 - 450 - 850 - 400 - - - ContactListCollapsed - - Comment - Hide extended friend information in contact list - Persist - 1 - Type - Boolean - Value - 0 - - FloaterHexRect - - Comment - Rectangle for hex editor floater. - Persist - 1 - Type - Rect - Value - - 343 - 687 - 981 - 473 - - - HexEditorColumns - - Comment - Number of columns shown in hex editor - Persist - 1 - Type - U32 - Value - 16 - - FloaterAssetTextEditorRect - - Comment - Rectangle for asset text editor floater. - Persist - 1 - Type - Rect - Value - - 343 - 687 - 981 - 473 - - - RadarListBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - - WindEnabled - - Comment - Enable the use of wind (affects trees and flexis, among other things) - Persist - 1 - Type - Boolean - Value - 1 - - CloudsEnabled - - Comment - Render Clouds - Persist - 1 - Type - Boolean - Value - 1 - - - + + + + Include + + settings_ascent.xml + settings_ascent_coa.xml + settings_sh.xml + settings_rlv.xml + + + SpellDownloadURL + + Comment + Base url for download dictionaries + Persist + 1 + Type + String + Value + http://app.singularityviewer.org/dict/ + + SpellDisplay + + Comment + Turn on to highlight misspelled text in line edit boxes + Persist + 1 + Type + Boolean + Value + 1 + + SpellInstalled + + Comment + The list of installed dictionaries + Persist + 1 + Type + String + Value + EN_SL + + SpellBase + + Comment + The base dictionary to spell check with + Persist + 1 + Type + String + Value + English (United States of America) + + + ScriptsCanShowUI + + Comment + Allow LSL calls (such as LLMapDestination) to spawn viewer UI + Persist + 1 + Type + Boolean + Value + 1 + + FloaterObjectBackuptRect + + Comment + Rectangle for the object backup floater + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + + MediaEnableFilter + + Comment + Enable media domain filtering + Persist + 1 + Type + Boolean + Value + 0 + + MediaFilterRect + + Comment + Rectangle for Media Filter floater + Persist + 1 + Type + Rect + Value + + 0 + 100 + 100 + 100 + + + + UseServersideWindlightSettings + + Comment + Whether or not to use Windlight settings presented by the server. + Persist + 1 + Type + Boolean + Value + 1 + + + FloaterLocalbitmapbrowserRect + + Comment + LOLRectangle + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + + + + + ShowAOSitPopup + + Comment + Show AO sit popup + Persist + 1 + Type + Boolean + Value + 0 + + EnableAORemote + + Comment + Enable AO quick access remote in toolbar + Persist + 1 + Type + Boolean + Value + 0 + + + DisableInternalFlyUpAnimation + + Comment + Disables the internal hover up animation (on your local computer only). Enable if you use an AO and wear hand attachments like rings, prim nails etc. that often loose their correct position while flying. + Persist + 1 + Type + Boolean + Value + 0 + + + AOEnabled + + Comment + Turn on Animation Overrider + Persist + 1 + Type + Boolean + Value + 0 + + AOAdvanced + + Comment + Advanced options + Persist + 0 + Type + Boolean + Value + 0 + + AOSitsEnabled + + Comment + Overrides sit animations. + Persist + 1 + Type + Boolean + Value + 1 + + AONoStandsInMouselook + + Comment + Disables stand anims during mouselook + Persist + 1 + Type + Boolean + Value + 1 + + AOStandInterval + + Comment + AO stand time in seconds + Persist + 1 + Type + F32 + Value + 20 + + AOStandRandomize + + Comment + Randomize stand anims + Persist + 1 + Type + Boolean + Value + 0 + + AORect + + Comment + Rectangle for AO window + Persist + 1 + Type + Rect + Value + + 0 + 100 + 100 + 100 + + + + + ClientDefinitionsURL + + Comment + Where to fetch updated client definitions from + Persist + 1 + Type + String + Value + http://app.singularityviewer.org/client_definitions.xml + + + LastSelectedGrid + + Comment + Last grid selected from the grid pulldown + Persist + 1 + Type + String + Value + + + ShowcaseURLDefault + + Comment + URL to load for the Showcase tab in Second Life + Persist + 1 + Type + String + Value + http://secondlife.com/app/showcase/index.php? + + + CheckForGridUpdates + + Comment + Fetch list of grids from Hippo server + Persist + 1 + Type + Boolean + Value + 0 + + DefaultGrid + + Comment + Nickname of the default grid + Persist + 1 + Type + String + Value + secondlife + + + VivoxLicenseAccepted + + Comment + By setting to true, you agree to accept the Vivox license agreement at http://www.vivox.com/vivox_aup.html + Persist + 1 + Type + Boolean + Value + 0 + + + WarnFirstVoiceLicense + + Comment + Enables FirstVoiceLicense window on login + Persist + 1 + Type + Boolean + Value + 1 + + + + ShyotlRenderUseStreamVBO + + Comment + Use VBO's for stream buffers + Persist + 1 + Type + Boolean + Value + 0 + + ResetFocusOnSelfClick + + Comment + Setting this to TRUE resets your camera when you left-click your avatar + Persist + 1 + Type + Boolean + Value + 1 + + + MoyFastMiniMap + + Comment + Don't show buildings on mini-map + Persist + 1 + Type + Boolean + Value + 0 + + BeauchampFloaterGroupTitlesRect + + Comment + Rectangle for group titles window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 500 + 0 + + + OptionShowGroupNameInChatIM + + Comment + Show group name in IM notification + Persist + 1 + Type + Boolean + Value + 1 + + OptionPlayTpSound + + Comment + Play sound effect on teleport + Persist + 1 + Type + Boolean + Value + 1 + + OptionRotateCamAfterLocalTP + + Comment + Play sound effect on teleport + Persist + 1 + Type + Boolean + Value + 0 + + OptionOffsetTPByAgentHeight + + Comment + Play sound effect on teleport + Persist + 1 + Type + Boolean + Value + 1 + + InventorySortOrder + + Comment + Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Type + U32 + Value + 3 + + Blacklist.Settings + + Comment + List for blacklisting assets DO NOT EDIT DIRECTLY use the floater + Persist + 1 + Type + LLSD + Value + + + + + LinksForChattingObjects + + Comment + Show links for chatting objects (0=no, 1=for others' objects, 2=for all objects) + Persist + 1 + Type + U32 + Value + 0 + + DisablePointAtAndBeam + + Comment + Disable pointing at objects and the pointat beam + Persist + 1 + Type + Boolean + Value + 1 + + PrivateLookAt + + Comment + When TRUE, do not disclose what we are looking at + Persist + 1 + Type + Boolean + Value + 0 + + ShowSelectionBeam + + Comment + Show selection particle beam when selecting or interacting with objects. + Persist + 1 + Type + Boolean + Value + 1 + + BroadcastViewerEffects + + Comment + Broadcast Viewer Effects + Persist + 1 + Type + Boolean + Value + 0 + + EmeraldUseProperArc + + Comment + Enables/Disables a fixed ARC counter + Persist + 1 + Type + Boolean + Value + 0 + + EmeraldBoobMass + + Comment + Mass of boobs. + Persist + 1 + Type + F32 + Value + 54.0 + + EmeraldBoobHardness + + Comment + Hardness (dampening) of boobs. + Persist + 1 + Type + F32 + Value + 51 + + EmeraldBreastPhysicsToggle + + Comment + Enables/Disables breast physics + Persist + 1 + Type + Boolean + Value + 1 + + EmeraldBreastSportsBra + + Comment + allows disabling the physics for 1 av, in case their outfit looks wrong with it on + Persist + 1 + Type + Boolean + Value + 0 + + EmeraldBoobVelMax + + Comment + Max amount of velocity boobs can have + Persist + 1 + Type + F32 + Value + 64 + + EmeraldBoobFriction + + Comment + Internal friction (brings boobs to rest). Shouldn't ever be above 1. + Persist + 1 + Type + F32 + Value + 80 + + EmeraldBoobVelMin + + Comment + Friction Fraction of FPS (used to keep friction uniform through FPS change). + Persist + 1 + Type + F32 + Value + 24 + + EmeraldBoobXYInfluence + + Comment + Amount of influence along the X and Y planes. + Persist + 1 + Type + F32 + Value + 0.1 + + wlfAdvSettingsPopup + + Comment + Show Windlight popup + Persist + 0 + Type + Boolean + Value + 1 + + WoLfVerticalIMTabs + + Comment + Vertical IM Tabs + Persist + 1 + Type + Boolean + Value + 1 + + + AgentChatColor + + Comment + Color of chat messages from other residents + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + IsCOA + 1 + + BackgroundChatColor + + Comment + Color of chat bubble background + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.0 + 1.0 + + IsCOA + 1 + + EffectColor + + Comment + Particle effects color + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + IsCOA + 1 + + IMChatColor + + Comment + Color of instant messages from other residents + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + IsCOA + 1 + + llOwnerSayChatColor + + Comment + Color of chat messages from objects only visible to the owner + Persist + 1 + Type + Color4 + Value + + 0.990000009537 + 0.990000009537 + 0.689999997616 + 1.0 + + IsCOA + 1 + + ObjectChatColor + + Comment + Color of chat messages from objects + Persist + 1 + Type + Color4 + Value + + 0.699999988079 + 0.899999976158 + 0.699999988079 + 1 + + IsCOA + 1 + + SkinCurrent + + Comment + The currently selected skin. + Persist + 1 + Type + String + Value + dark + IsCOA + 1 + + SystemChatColor + + Comment + Color of chat messages from SL System + Persist + 1 + Type + Color4 + Value + + 0.800000011921 + 1.0 + 1.0 + 1.0 + + IsCOA + 1 + + UISndAlert + + Comment + Sound file for alerts (uuid for sound asset) + Persist + 1 + Type + String + Value + ed124764-705d-d497-167a-182cd9fa2e6c + IsCOA + 1 + + UISndBadKeystroke + + Comment + Sound file for invalid keystroke (uuid for sound asset) + Persist + 1 + Type + String + Value + 2ca849ba-2885-4bc3-90ef-d4987a5b983a + IsCOA + 1 + + UISndClick + + Comment + Sound file for mouse click (uuid for sound asset) + Persist + 1 + Type + String + Value + 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 + IsCOA + 1 + + UISndClickRelease + + Comment + Sound file for mouse button release (uuid for sound asset) + Persist + 1 + Type + String + Value + 4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6 + IsCOA + 1 + + UISndDebugSpamToggle + + Comment + Log UI sound effects as they are played + Persist + 1 + Type + Boolean + Value + 0 + IsCOA + 1 + + UISndHealthReductionF + + Comment + Sound file for female pain (uuid for sound asset) + Persist + 1 + Type + String + Value + 219c5d93-6c09-31c5-fb3f-c5fe7495c115 + IsCOA + 1 + + UISndHealthReductionM + + Comment + Sound file for male pain (uuid for sound asset) + Persist + 1 + Type + String + Value + e057c244-5768-1056-c37e-1537454eeb62 + IsCOA + 1 + + UISndHealthReductionThreshold + + Comment + Amount of health reduction required to trigger "pain" sound + Persist + 1 + Type + F32 + Value + 10.0 + IsCOA + 1 + + UISndInvalidOp + + Comment + Sound file for invalid operations (uuid for sound asset) + Persist + 1 + Type + String + Value + 4174f859-0d3d-c517-c424-72923dc21f65 + IsCOA + 1 + + UISndMoneyChangeDown + + Comment + Sound file for L$ balance increase (uuid for sound asset) + Persist + 1 + Type + String + Value + 104974e3-dfda-428b-99ee-b0d4e748d3a3 + IsCOA + 1 + + UISndMoneyChangeThreshold + + Comment + Amount of change in L$ balance required to trigger "money" sound + Persist + 1 + Type + F32 + Value + 50.0 + IsCOA + 1 + + UISndMoneyChangeUp + + Comment + Sound file for L$ balance decrease(uuid for sound asset) + Persist + 1 + Type + String + Value + 77a018af-098e-c037-51a6-178f05877c6f + IsCOA + 1 + + UISndNewIncomingIMSession + + Comment + Sound file for new instant message session(uuid for sound asset) + Persist + 1 + Type + String + Value + 67cc2844-00f3-2b3c-b991-6418d01e1bb7 + IsCOA + 1 + + UISndObjectCreate + + Comment + Sound file for object creation (uuid for sound asset) + Persist + 1 + Type + String + Value + f4a0660f-5446-dea2-80b7-6482a082803c + IsCOA + 1 + + UISndObjectDelete + + Comment + Sound file for object deletion (uuid for sound asset) + Persist + 1 + Type + String + Value + 0cb7b00a-4c10-6948-84de-a93c09af2ba9 + IsCOA + 1 + + UISndObjectRezIn + + Comment + Sound file for rezzing objects (uuid for sound asset) + Persist + 1 + Type + String + Value + 3c8fc726-1fd6-862d-fa01-16c5b2568db6 + IsCOA + 1 + + UISndObjectRezOut + + Comment + Sound file for derezzing objects (uuid for sound asset) + Persist + 1 + Type + String + Value + 00000000-0000-0000-0000-000000000000 + IsCOA + 1 + + UISndPieMenuAppear + + Comment + Sound file for opening pie menu (uuid for sound asset) + Persist + 1 + Type + String + Value + 8eaed61f-92ff-6485-de83-4dcc938a478e + IsCOA + 1 + + UISndPieMenuHide + + Comment + Sound file for closing pie menu (uuid for sound asset) + Persist + 1 + Type + String + Value + 00000000-0000-0000-0000-000000000000 + IsCOA + 1 + + UISndPieMenuSliceHighlight0 + + Comment + Sound file for selecting pie menu item 0 (uuid for sound asset) + Persist + 1 + Type + String + Value + d9f73cf8-17b4-6f7a-1565-7951226c305d + IsCOA + 1 + + UISndPieMenuSliceHighlight1 + + Comment + Sound file for selecting pie menu item 1 (uuid for sound asset) + Persist + 1 + Type + String + Value + f6ba9816-dcaf-f755-7b67-51b31b6233e5 + IsCOA + 1 + + UISndPieMenuSliceHighlight2 + + Comment + Sound file for selecting pie menu item 2 (uuid for sound asset) + Persist + 1 + Type + String + Value + 7aff2265-d05b-8b72-63c7-dbf96dc2f21f + IsCOA + 1 + + UISndPieMenuSliceHighlight3 + + Comment + Sound file for selecting pie menu item 3 (uuid for sound asset) + Persist + 1 + Type + String + Value + 09b2184e-8601-44e2-afbb-ce37434b8ba1 + IsCOA + 1 + + UISndPieMenuSliceHighlight4 + + Comment + Sound file for selecting pie menu item 4 (uuid for sound asset) + Persist + 1 + Type + String + Value + bbe4c7fc-7044-b05e-7b89-36924a67593c + IsCOA + 1 + + UISndPieMenuSliceHighlight5 + + Comment + Sound file for selecting pie menu item 5 (uuid for sound asset) + Persist + 1 + Type + String + Value + d166039b-b4f5-c2ec-4911-c85c727b016c + IsCOA + 1 + + UISndPieMenuSliceHighlight6 + + Comment + Sound file for selecting pie menu item 6 (uuid for sound asset) + Persist + 1 + Type + String + Value + 242af82b-43c2-9a3b-e108-3b0c7e384981 + IsCOA + 1 + + UISndPieMenuSliceHighlight7 + + Comment + Sound file for selecting pie menu item 7 (uuid for sound asset) + Persist + 1 + Type + String + Value + c1f334fb-a5be-8fe7-22b3-29631c21cf0b + IsCOA + 1 + + UISndSnapshot + + Comment + Sound file for taking a snapshot (uuid for sound asset) + Persist + 1 + Type + String + Value + 3d09f582-3851-c0e0-f5ba-277ac5c73fb4 + IsCOA + 1 + + UISndStartIM + + Comment + Sound file for starting a new IM session (uuid for sound asset) + Persist + 1 + Type + String + Value + c825dfbc-9827-7e02-6507-3713d18916c1 + IsCOA + 1 + + UISndTeleportOut + + Comment + Sound file for teleporting (uuid for sound asset) + Persist + 1 + Type + String + Value + d7a9a565-a013-2a69-797d-5332baa1a947 + IsCOA + 1 + + UISndTyping + + Comment + Sound file for starting to type a chat message (uuid for sound asset) + Persist + 1 + Type + String + Value + 5e191c7b-8996-9ced-a177-b2ac32bfea06 + IsCOA + 1 + + UISndWindowClose + + Comment + Sound file for closing a window (uuid for sound asset) + Persist + 1 + Type + String + Value + 2c346eda-b60c-ab33-1119-b8941916a499 + IsCOA + 1 + + UISndWindowOpen + + Comment + Sound file for opening a window (uuid for sound asset) + Persist + 1 + Type + String + Value + c80260ba-41fd-8a46-768a-6bf236360e3a + IsCOA + 1 + + UserChatColor + + Comment + Color of your chat messages + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + IsCOA + 1 + + + AFKTimeout + + Comment + Time before automatically setting AFK (away from keyboard) mode (seconds) + Persist + 1 + Type + F32 + Value + 300.0 + + AdvanceSnapshot + + Comment + Display advanced parameter settings in snaphot interface + Persist + 1 + Type + Boolean + Value + 0 + + AlertedUnsupportedHardware + + Comment + Set if there's unsupported hardware and we've already done a notification. + Persist + 1 + Type + Boolean + Value + 0 + + AllowIdleAFK + + Comment + Automatically set AFK (away from keyboard) mode when idle + Persist + 1 + Type + Boolean + Value + 1 + + AllowMultipleViewers + + Comment + Allow multiple viewers. + Persist + 1 + Type + Boolean + Value + 1 + + AllowTapTapHoldRun + + Comment + Tapping a direction key twice and holding it down makes avatar run + Persist + 1 + Type + Boolean + Value + 1 + + AnimateTextures + + Comment + Enable texture animation (debug) + Persist + 1 + Type + Boolean + Value + 1 + + AnimationDebug + + Comment + Show active animations in a bubble above avatars head + Persist + 1 + Type + Boolean + Value + 0 + + PreviewAnimInWorld + + Comment + Play animation preview in-world when uploading + Persist + 1 + Type + Boolean + Value + 0 + + AppearanceCameraMovement + + Comment + When entering appearance editing mode, camera zooms in on currently selected portion of avatar + Persist + 1 + Type + Boolean + Value + 1 + + ApplyColorImmediately + + Comment + Preview selections in color picker immediately + Persist + 1 + Type + Boolean + Value + 1 + + ApplyTextureImmediately + + Comment + Preview selections in texture picker immediately + Persist + 1 + Type + Boolean + Value + 1 + + ArrowKeysMoveAvatar + + Comment + While cursor is in chat entry box, arrow keys still control your avatar + Persist + 1 + Type + Boolean + Value + 1 + + AskedAboutCrashReports + + Comment + Turns off dialog asking if you want to enable crash reporting + Persist + 1 + Type + Boolean + Value + 0 + + AuctionShowFence + + Comment + When auctioning land, include parcel boundary marker in snapshot + Persist + 1 + Type + Boolean + Value + 1 + + AudioLevelAmbient + + Comment + Audio level of environment sounds + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelDoppler + + Comment + Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect) + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelMaster + + Comment + Master audio level, or overall volume + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelMedia + + Comment + Audio level of Quicktime movies + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelMic + + Comment + Audio level of microphone input + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelMusic + + Comment + Audio level of streaming music + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelRolloff + + Comment + Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff) + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelSFX + + Comment + Audio level of in-world sound effects + Persist + 1 + Type + F32 + Value + 1.0 + + AudioLevelUI + + Comment + Audio level of UI sound effects + Persist + 1 + Type + F32 + Value + 0.5 + + AudioLevelVoice + + Comment + Audio level of voice chat + Persist + 1 + Type + F32 + Value + 0.5 + + AudioStreamingMusic + + Comment + Enable streaming audio + Persist + 1 + Type + Boolean + Value + 1 + + AudioStreamingVideo + + Comment + Enable streaming video + Persist + 1 + Type + Boolean + Value + 0 + + AuditTexture + + Comment + Enable texture auditting. + Persist + 1 + Type + Boolean + Value + 0 + + AutoAcceptNewInventory + + Comment + Automatically accept new notecards/textures/landmarks + Persist + 1 + Type + Boolean + Value + 0 + + AutoLeveling + + Comment + Keep Flycam level. + Persist + 1 + Type + Boolean + Value + 1 + + AutoLoadWebProfiles + + Comment + Automatically load ALL profile webpages without asking first. + Persist + 1 + Type + Boolean + Value + 0 + + AutoLogin + + Comment + Login automatically using last username/password combination + Persist + 0 + Type + Boolean + Value + 0 + + AutoMimeDiscovery + + Comment + Enable viewer mime type discovery of media URLs + Persist + 1 + Type + Boolean + Value + 0 + + AutoPilotLocksCamera + + Comment + Keep camera position locked when avatar walks to selected position + Persist + 1 + Type + Boolean + Value + 0 + + AutoSnapshot + + Comment + Update snapshot when camera stops moving, or any parameter changes + Persist + 1 + Type + Boolean + Value + 0 + + AutomaticFly + + Comment + Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only) + Persist + 1 + Type + Boolean + Value + 1 + + AvatarAxisDeadZone0 + + Comment + Avatar axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone1 + + Comment + Avatar axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone2 + + Comment + Avatar axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone3 + + Comment + Avatar axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone4 + + Comment + Avatar axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisDeadZone5 + + Comment + Avatar axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + AvatarAxisScale0 + + Comment + Avatar axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale1 + + Comment + Avatar axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale2 + + Comment + Avatar axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale3 + + Comment + Avatar axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale4 + + Comment + Avatar axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarAxisScale5 + + Comment + Avatar axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + AvatarBacklight + + Comment + Add rim lighting to avatar rendering to approximate shininess of skin + Persist + 1 + Type + Boolean + Value + 1 + + AvatarFeathering + + Comment + Avatar feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + + AvatarPickerSortOrder + + Comment + Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 2 + + AvatarSex + + Comment + + Persist + 0 + Type + U32 + Value + 0 + + BackgroundYieldTime + + Comment + Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds) + Persist + 1 + Type + S32 + Value + 40 + + FloaterBlacklistRect + + Comment + LOLRectangle + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + + BackwardBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 45 + 29 + 66 + 4 + + + BasicHelpRect + + Comment + Rectangle for help window + Persist + 1 + Type + Rect + Value + + 0 + 404 + 467 + 0 + + + BeaconAlwaysOn + + Comment + Beacons / highlighting always on + Persist + 1 + Type + Boolean + Value + 0 + + BrowserHomePage + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + http://www.singularityviewer.org + + BrowserCookiesEnabled + + Comment + Enable Cookes in WebKit + Persist + 1 + Type + Boolean + Value + 1 + + BrowserPluginsEnabled + + Comment + Enable Mozilla Plug-Ins in WebKit + Persist + 1 + Type + Boolean + Value + 1 + + BrowserJavascriptEnabled + + Comment + Enable JavaScript execution in WebKit + Persist + 1 + Type + Boolean + Value + 1 + + PluginAttachDebuggerToPlugins + + Comment + TODO: understand what this actually does -.-sg + Persist + 1 + Type + Boolean + Value + 0 + + BlockAvatarAppearanceMessages + + Comment + Ignore's appearance messages (for simulating Ruth) + Persist + 1 + Type + Boolean + Value + 0 + + BrowserProxyAddress + + Comment + Address for the Web Proxy + Persist + 1 + Type + String + Value + + + BrowserProxyEnabled + + Comment + Use Web Proxy + Persist + 1 + Type + Boolean + Value + 0 + + BrowserProxyExclusions + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + + + BrowserProxyPort + + Comment + Port for Web Proxy + Persist + 1 + Type + S32 + Value + 3128 + + BrowserProxySocks45 + + Comment + [NOT USED] + Persist + 1 + Type + S32 + Value + 5 + + Socks5ProxyEnabled + + Comment + Use Socks5 Proxy + Persist + 1 + Type + Boolean + Value + 0 + + Socks5HttpProxyType + + Comment + Proxy type to use for HTTP operations + Persist + 1 + Type + String + Value + None + + Socks5ProxyHost + + Comment + Socks 5 Proxy Host + Persist + 1 + Type + String + Value + + + Socks5ProxyPort + + Comment + Socks 5 Proxy Port + Persist + 1 + Type + U32 + Value + 1080 + + Socks5Username + + Comment + Socks 5 Username + Persist + 1 + Type + String + Value + + + Socks5Password + + Comment + Socks 5 Password + Persist + 1 + Type + String + Value + + + Socks5AuthType + + Comment + Selected Auth mechanism for Socks5 + Persist + 1 + Type + String + Value + None + + BuildAxisDeadZone0 + + Comment + Build axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone1 + + Comment + Build axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone2 + + Comment + Build axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone3 + + Comment + Build axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone4 + + Comment + Build axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisDeadZone5 + + Comment + Build axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + BuildAxisScale0 + + Comment + Build axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale1 + + Comment + Build axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale2 + + Comment + Build axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale3 + + Comment + Build axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale4 + + Comment + Build axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildAxisScale5 + + Comment + Build axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + BuildBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + BuildFeathering + + Comment + Build feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + + BulkChangeIncludeAnimations + + Comment + Bulk permission changes affect animations + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeAnimations + + Comment + Bulk permission changes affect animations + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeAnimations + + Comment + Bulk permission changes affect animations + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeAnimations + + Comment + Bulk permission changes affect animations + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeBodyParts + + Comment + Bulk permission changes affect body parts + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeClothing + + Comment + Bulk permission changes affect clothing + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeGestures + + Comment + Bulk permission changes affect gestures + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeLandmarks + + Comment + Bulk permission changes affect landmarks + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeNotecards + + Comment + Bulk permission changes affect notecards + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeObjects + + Comment + Bulk permission changes affect objects + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeScripts + + Comment + Bulk permission changes affect scripts + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeSounds + + Comment + Bulk permission changes affect sounds + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeIncludeTextures + + Comment + Bulk permission changes affect textures + Persist + 1 + Type + Boolean + Value + 1 + + BulkChangeEveryoneCopy + + Comment + Bulk changed objects can be copied by everyone + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeNextOwnerCopy + + Comment + Bulk changed objects can be copied by next owner + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeNextOwnerModify + + Comment + Bulk changed objects can be modified by next owner + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeNextOwnerTransfer + + Comment + Bulk changed objects can be resold or given away by next owner + Persist + 1 + Type + Boolean + Value + 0 + + BulkChangeShareWithGroup + + Comment + Bulk changed objects are shared with the currently active group + Persist + 1 + Type + Boolean + Value + 0 + + ButtonFlashCount + + Comment + Number of flashes after which flashing buttons stay lit up + Persist + 1 + Type + S32 + Value + 8 + + ButtonFlashRate + + Comment + Frequency at which buttons flash (hz) + Persist + 1 + Type + F32 + Value + 1.25 + + ButtonHPad + + Comment + Default horizontal spacing between buttons (pixels) + Persist + 1 + Type + S32 + Value + 10 + + ButtonHeight + + Comment + Default height for normal buttons (pixels) + Persist + 1 + Type + S32 + Value + 20 + + ButtonHeightSmall + + Comment + Default height for small buttons (pixels) + Persist + 1 + Type + S32 + Value + 16 + + ButtonVPad + + Comment + Default vertical spacing between buttons (pixels) + Persist + 1 + Type + S32 + Value + 1 + + CacheLocation + + Comment + Controls the location of the local disk cache + Persist + 1 + Type + String + Value + + + CacheSize + + Comment + Controls amount of hard drive space reserved for local file caching in MB + Persist + 1 + Type + U32 + Value + 500 + + CacheValidateCounter + + Comment + Used to distribute cache validation + Persist + 1 + Type + U32 + Value + 0 + + CameraMouseWheelZoom + + Comment + Camera zooms in and out with mousewheel + Persist + 1 + Type + Boolean + Value + 1 + + CameraAngle + + Comment + Camera field of view angle (Radians) + Persist + 1 + Type + F32 + Value + 1.047197551 + + CameraOffset + + Comment + Render with camera offset from view frustum (rendering debug) + Persist + 1 + Type + Boolean + Value + 0 + + CameraOffsetBuild + + Comment + Default camera position relative to focus point when entering build mode + Persist + 1 + Type + Vector3 + Value + + -6.0 + 0.0 + 6.0 + + + CameraOffsetDefault + + Comment + Default camera offset from avatar + Persist + 1 + Type + Vector3 + Value + + -3.0 + 0.0 + 0.75 + + + CameraOffsetScale + + Comment + Scales the default offset + Persist + 1 + Type + F32 + Value + 1.0 + + CameraPosOnLogout + + Comment + Camera position when last logged out (global coordinates) + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + CameraPositionSmoothing + + Comment + Smooths camera position over time + Persist + 1 + Type + F32 + Value + 1.0 + + ChatBarStealsFocus + + Comment + Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus + Persist + 1 + Type + Boolean + Value + 1 + + ChatBubbleOpacity + + Comment + Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.5 + + ChatFontSize + + Comment + Size of chat text in chat console (0 = small, 1 = big) + Persist + 1 + Type + S32 + Value + 1 + + ChatFullWidth + + Comment + Chat console takes up full width of SL window + Persist + 1 + Type + Boolean + Value + 1 + + ChatHistoryTornOff + + Comment + Show chat history window separately from Communicate window. + Persist + 1 + Type + Boolean + Value + 0 + + ChatOnlineNotification + + Comment + Provide notifications for when friend log on and off of SL + Persist + 1 + Type + Boolean + Value + 1 + + HideNotificationsInChat + + Comment + Do not echo/log notifications in chat + Persist + 1 + Type + Boolean + Value + 0 + + ChatPersistTime + + Comment + Time for which chat stays visible in console (seconds) + Persist + 1 + Type + F32 + Value + 20.0 + + ChatShowTimestamps + + Comment + Show timestamps in chat + Persist + 1 + Type + Boolean + Value + 1 + + ChatSpacing + + Comment + Add extra vertical spacing between local chat lines + Persist + 1 + Type + S32 + Value + 0 + + ChatVisible + + Comment + Chat bar is visible + Persist + 1 + Type + Boolean + Value + 1 + + ChatterboxRect + + Comment + Rectangle for chatterbox window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 350 + 0 + + + CheesyBeacon + + Comment + Enable cheesy beacon effects + Persist + 1 + Type + Boolean + Value + 0 + + ClientSettingsFile + + Comment + Persisted client settings file name (per install). + Persist + 0 + Type + String + Value + + + CloseChatOnReturn + + Comment + Close chat after hitting return + Persist + 1 + Type + Boolean + Value + 0 + + CloseSnapshotOnKeep + + Comment + Close snapshot window after saving snapshot + Persist + 1 + Type + Boolean + Value + 1 + + CmdLineDisableVoice + + Comment + Disable Voice. + Persist + 0 + Type + Boolean + Value + 0 + + CmdLineAgentURI + + Comment + URL of agent host to connect to in Agent Domain. + Persist + 0 + Type + String + Value + + + CmdLineGridChoice + + Comment + The user's grid choice or ip address. + Persist + 0 + Type + String + Value + + + CmdLineHelperURI + + Comment + Command line specified helper web CGI prefix to use. + Persist + 0 + Type + String + Value + + + CmdLineLoginURI + + Comment + Command line specified login server and CGI prefix to use. + Persist + 0 + Type + LLSD + Value + + + + + CmdLineRegionURI + + Comment + URL of region to connect to through Agent Domain. + Persist + 0 + Type + String + Value + + + ColorPaletteEntry01 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.0 + 1.0 + + + ColorPaletteEntry02 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 0.5 + 1.0 + + + ColorPaletteEntry03 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.0 + 0.0 + 1.0 + + + ColorPaletteEntry04 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 0.0 + 1.0 + + + ColorPaletteEntry05 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 0.0 + 1.0 + + + ColorPaletteEntry06 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 0.5 + 1.0 + + + ColorPaletteEntry07 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 0.5 + 1.0 + + + ColorPaletteEntry08 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.0 + 0.5 + 1.0 + + + ColorPaletteEntry09 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 0.0 + 1.0 + + + ColorPaletteEntry10 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.25 + 0.25 + 1.0 + + + ColorPaletteEntry11 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.5 + 1.0 + 1.0 + + + ColorPaletteEntry12 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.25 + 0.5 + 1.0 + + + ColorPaletteEntry13 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.0 + 1.0 + 1.0 + + + ColorPaletteEntry14 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.25 + 0.0 + 1.0 + + + ColorPaletteEntry15 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + ColorPaletteEntry16 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + ColorPaletteEntry17 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + ColorPaletteEntry18 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.75 + 0.75 + 0.75 + 1.0 + + + ColorPaletteEntry19 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.0 + 1.0 + + + ColorPaletteEntry20 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 0.0 + 1.0 + + + ColorPaletteEntry21 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.0 + 1.0 + + + ColorPaletteEntry22 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 1.0 + 1.0 + + + ColorPaletteEntry23 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 1.0 + 1.0 + + + ColorPaletteEntry24 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 1.0 + 1.0 + + + ColorPaletteEntry25 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 0.5 + 1.0 + + + ColorPaletteEntry26 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.5 + 1.0 + + + ColorPaletteEntry27 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 1.0 + 1.0 + 1.0 + + + ColorPaletteEntry28 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 0.5 + 0.5 + 1.0 + 1.0 + + + ColorPaletteEntry29 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.5 + 1.0 + + + ColorPaletteEntry30 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.5 + 0.0 + 1.0 + + + ColorPaletteEntry31 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + ColorPaletteEntry32 + + Comment + Color picker palette entry + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 1.0 + 1.0 + + + ColumnHeaderDropDownDelay + + Comment + Time in seconds of mouse click before column header shows sort options list + Persist + 1 + Type + F32 + Value + 0.300000011921 + + CompileOutputRect + + Comment + Rectangle for script Recompile Everything output window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 300 + 0 + + + ConnectAsGod + + Comment + Log in a god if you have god access. + Persist + 1 + Type + Boolean + Value + 0 + + ConnectionPort + + Comment + Custom connection port number + Persist + 1 + Type + U32 + Value + 13000 + + ConnectionPortEnabled + + Comment + Use the custom connection port? + Persist + 1 + Type + Boolean + Value + 0 + + ConsoleBackgroundOpacity + + Comment + Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.700 + + ConsoleBufferSize + + Comment + Size of chat console history (lines of chat) + Persist + 1 + Type + S32 + Value + 40 + + ConsoleMaxLines + + Comment + Max number of lines of chat text visible in console. + Persist + 1 + Type + S32 + Value + 40 + + ContactsTornOff + + Comment + Show contacts window separately from Communicate window. + Persist + 1 + Type + Boolean + Value + 0 + + CookiesEnabled + + Comment + Accept cookies from Web sites? + Persist + 1 + Type + Boolean + Value + 1 + + CreateToolCopyCenters + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + + CreateToolCopyRotates + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + CreateToolCopySelection + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + CreateToolKeepSelected + + Comment + After using create tool, keep the create tool active + Persist + 1 + Type + Boolean + Value + 0 + + Cursor3D + + Comment + Tread Joystick values as absolute positions (not deltas). + Persist + 1 + Type + Boolean + Value + 1 + + CustomServer + + Comment + Specifies IP address or hostname of grid to which you connect + Persist + 1 + Type + String + Value + + + DebugBeaconLineWidth + + Comment + Size of lines for Debug Beacons + Persist + 1 + Type + S32 + Value + 1 + + DebugInventoryFilters + + Comment + Turn on debugging display for inventory filtering + Persist + 1 + Type + Boolean + Value + 0 + + DebugPermissions + + Comment + Log permissions for selected inventory items + Persist + 1 + Type + Boolean + Value + 0 + + DebugPluginDisableTimeout + + Comment + Disable the code which watches for plugins that are crashed or hung + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowColor + + Comment + Show color under cursor + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowRenderInfo + + Comment + Show depth buffer contents + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowRenderMatrices + + Comment + Display values of current view and projection matrices. + Persist + 1 + Type + Boolean + Value + 0 + + DebugShowTime + + Comment + Show depth buffer contents + Persist + 1 + Type + Boolean + Value + 0 + + DebugStatModeFPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeBandwidth + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePacketLoss + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatMode + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeKTrisDrawnFr + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeKTrisDrawnSec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTotalObjs + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeNewObjs + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTextureCount + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeRawCount + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeGLMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeFormattedMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeRawMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeBoundMem + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePacketsIn + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePacketsOut + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTexture + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeAsset + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeLayers + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeActualIn + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeActualOut + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeVFSPendingOps + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeTimeDialation + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimFPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePhysicsFPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModePinnedObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeLowLODObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeMemoryAllocated + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeAgentUpdatesSec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeMainAgents + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeChildAgents + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimActiveObjects + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimActiveScripts + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimScriptEvents + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimInPPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimOutPPS + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimPendingDownloads + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + SimPendingUploads + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimTotalUnackedBytes + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimFrameMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimNetMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimOtherMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimAgentMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimImagesMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimScriptMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSpareMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsStepMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsShapeUpdateMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSimPhysicsOtherMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimSleepMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugStatModeSimPumpIOMsec + + Comment + Mode of stat in Statistics floater + Persist + 1 + Type + S32 + Value + -1 + + DebugViews + + Comment + Display debugging info for views. + Persist + 1 + Type + Boolean + Value + 0 + + DebugWindowProc + + Comment + Log windows messages + Persist + 1 + Type + Boolean + Value + 0 + + DefaultObjectTexture + + Comment + Texture used as 'Default' in texture picker. (UUID texture reference) + Persist + 1 + Type + String + Value + 89556747-24cb-43ed-920b-47caed15465f + + DisableCameraConstraints + + Comment + Disable the normal bounds put on the camera by avatar position + Persist + 1 + Type + Boolean + Value + 0 + + DisableRendering + + Comment + Disable GL rendering and GUI (load testing) + Persist + 1 + Type + Boolean + Value + 0 + + DisableVerticalSync + + Comment + Update frames as fast as possible (FALSE = update frames between display scans) + Persist + 1 + Type + Boolean + Value + 1 + + DisplayAvatarAgentTarget + + Comment + Show avatar positioning locators (animation debug) + Persist + 1 + Type + Boolean + Value + 0 + + DisplayChat + + Comment + Display Latest Chat message on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayDebug + + Comment + Display Network Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayDebugConsole + + Comment + Display Console Debug Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayIM + + Comment + Display Latest IM message on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayLinden + + Comment + Display Account Information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayRegion + + Comment + Display Location information on LCD + Persist + 1 + Type + Boolean + Value + 1 + + DisplayTimecode + + Comment + Display timecode on screen + Persist + 1 + Type + Boolean + Value + 0 + + Disregard128DefaultDrawDistance + + Comment + Whether to use the auto default to 128 draw distance + Persist + 1 + Type + Boolean + Value + 1 + + Disregard96DefaultDrawDistance + + Comment + Whether to use the auto default to 96 draw distance + Persist + 1 + Type + Boolean + Value + 1 + + DoubleClickAutoPilot + + Comment + Enable double-click auto pilot + Persist + 1 + Type + Boolean + Value + 0 + + DoubleClickTeleport + + Comment + Enable double-click to teleport where allowed + Persist + 1 + Type + Boolean + Value + 0 + + DoubleClickTeleportMiniMap + + Comment + Enable double-click-teleport for the mini-map + Persist + 1 + Type + Boolean + Value + 0 + + DragAndDropToolTipDelay + + Comment + Seconds before displaying tooltip when performing drag and drop operation + Persist + 1 + Type + F32 + Value + 0.10000000149 + + DropShadowButton + + Comment + Drop shadow width for buttons (pixels) + Persist + 1 + Type + S32 + Value + 2 + + DropShadowFloater + + Comment + Drop shadow width for floaters (pixels) + Persist + 1 + Type + S32 + Value + 5 + + DropShadowSlider + + Comment + Drop shadow width for sliders (pixels) + Persist + 1 + Type + S32 + Value + 3 + + DropShadowTooltip + + Comment + Drop shadow width for tooltips (pixels) + Persist + 1 + Type + S32 + Value + 4 + + DynamicCameraStrength + + Comment + Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity) + Persist + 1 + Type + F32 + Value + 2.0 + + EditCameraMovement + + Comment + When entering build mode, camera moves up above avatar + Persist + 1 + Type + Boolean + Value + 0 + + EditLinkedParts + + Comment + Select individual parts of linked objects + Persist + 0 + Type + Boolean + Value + 0 + + DecimalsForTools + + Comment + Number of decimals for the edit tool position, size and rotation settings (0 to 5) + Persist + 1 + Type + U32 + Value + 5 + + EffectScriptChatParticles + + Comment + 1 = normal behavior, 0 = disable display of swirling lights when scripts communicate + Persist + 1 + Type + Boolean + Value + 1 + + EnableRippleWater + + Comment + Whether to use ripple water shader or not + Persist + 1 + Type + Boolean + Value + 1 + + EnableVoiceChat + + Comment + Enable talking to other residents with a microphone + Persist + 1 + Type + Boolean + Value + 0 + + EnergyFromTop + + Comment + + Persist + 0 + Type + S32 + Value + 20 + + EnergyHeight + + Comment + + Persist + 0 + Type + S32 + Value + 40 + + EnergyWidth + + Comment + + Persist + 0 + Type + S32 + Value + 175 + + EveryoneCopy + + Comment + Everyone can copy the newly created objects + Persist + 1 + Type + Boolean + Value + 0 + + FPSLogFrequency + + Comment + Seconds between display of FPS in log (0 for never) + Persist + 1 + Type + F32 + Value + 60.0 + + FPSLogFrequency + + Comment + Seconds between display of FPS in log (0 for never) + Persist + 1 + Type + F32 + Value + 10.0 + + FilterItemsPerFrame + + Comment + Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed) + Persist + 1 + Type + S32 + Value + 500 + + FindLandArea + + Comment + Enables filtering of land search results by area + Persist + 1 + Type + Boolean + Value + 0 + + FindLandPrice + + Comment + Enables filtering of land search results by price + Persist + 1 + Type + Boolean + Value + 1 + + FindLandType + + Comment + Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale") + Persist + 1 + Type + String + Value + All + + FindPeopleOnline + + Comment + Limits people search to only users who are logged on + Persist + 1 + Type + Boolean + Value + 1 + + FindPlacesPictures + + Comment + Display only results of find places that have pictures + Persist + 1 + Type + Boolean + Value + 1 + + FirstLoginThisInstall + + Comment + Specifies that you have not successfully logged in since you installed the latest update + Persist + 1 + Type + Boolean + Value + 1 + + FirstName + + Comment + Login first name + Persist + 1 + Type + String + Value + + + FirstPersonAvatarVisible + + Comment + Display avatar and attachments below neck while in mouselook + Persist + 1 + Type + Boolean + Value + 0 + + FirstPersonBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + FirstRunThisInstall + + Comment + Specifies that you have not run the viewer since you installed the latest update + Persist + 1 + Type + Boolean + Value + 1 + + FixedWeather + + Comment + Weather effects do not change over time + Persist + 1 + Type + Boolean + Value + 0 + + LongDateFormat + + Comment + Long date format to use + Persist + 1 + Type + String + Value + %A %d %B %Y + + ShortDateFormat + + Comment + Short date format to use + Persist + 1 + Type + String + Value + %Y-%m-%d + + ShortTimeFormat + + Comment + Short time format (hours and minutes) to use + Persist + 1 + Type + String + Value + %H:%M + + LongTimeFormat + + Comment + Long time format (hours, minutes and seconds) to use + Persist + 1 + Type + String + Value + %H:%M:%S + + TimestampFormat + + Comment + Timestamp format to use + Persist + 1 + Type + String + Value + %a %d %b %Y %H:%M:%S + + SecondsInChatAndIMs + + Comment + TRUE to add seconds to timestamps for IM and chat + Persist + 1 + Type + Boolean + Value + 0 + + FloaterAboutRect + + Comment + Rectangle for About window + Persist + 1 + Type + Rect + Value + + 0 + 440 + 470 + 0 + + + FloaterActiveSpeakersRect + + Comment + Rectangle for active speakers window + Persist + 1 + Type + Rect + Value + + 0 + 300 + 250 + 0 + + + FloaterActiveSpeakersSortAscending + + Comment + Whether to sort up or down + Persist + 1 + Type + Boolean + Value + 1 + + FloaterActiveSpeakersSortColumn + + Comment + Column name to sort on + Persist + 1 + Type + String + Value + speaking_status + + FloaterAreaSearchRect + + Comment + Rectangle for the area search floater + Persist + 1 + Type + Rect + Value + + 0 + 400 + 200 + 0 + + + FloaterAdvancedSkyRect + + Comment + Rectangle for Advanced Sky Editor + Persist + 1 + Type + Rect + Value + + 0 + 220 + 700 + 0 + + + FloaterAdvancedWaterRect + + Comment + Rectangle for Advanced Water Editor + Persist + 1 + Type + Rect + Value + + 0 + 240 + 700 + 0 + + + FloaterAudioVolumeRect + + Comment + Rectangle for Audio Volume window + Persist + 1 + Type + Rect + Value + + 0 + 440 + 470 + 0 + + + FloaterBeaconsRect + + Comment + Rectangle for beacon and highlight controls + Persist + 1 + Type + Rect + Value + + 200 + 250 + 250 + 200 + + + FloaterBuildOptionsRect + + Comment + Rectangle for build options window. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterVFSRect + + Comment + Rectangle for local assets window. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterBumpRect + + Comment + Rectangle for Bumps/Hits window + Persist + 1 + Type + Rect + Value + + 0 + 180 + 400 + 0 + + + FloaterBuyContentsRect + + Comment + Rectangle for Buy Contents window + Persist + 1 + Type + Rect + Value + + 0 + 250 + 300 + 0 + + + FloaterBuyRect + + Comment + Rectangle for buy window + Persist + 1 + Type + Rect + Value + + 0 + 250 + 300 + 0 + + + FloaterCameraRect3 + + Comment + Rectangle for camera control window + Persist + 1 + Type + Rect + Value + + 0 + 64 + 176 + 0 + + + FloaterChatRect + + Comment + Rectangle for chat history + Persist + 1 + Type + Rect + Value + + 0 + 172 + 500 + 0 + + + FloaterClothingRect + + Comment + Rectangle for clothing window + Persist + 1 + Type + Rect + Value + + 0 + 480 + 320 + 0 + + + FloaterContactsRect + + Comment + Rectangle for chat history + Persist + 1 + Type + Rect + Value + + 0 + 390 + 395 + 0 + + + FloaterCustomizeAppearanceRect + + Comment + Rectangle for avatar customization window + Persist + 1 + Type + Rect + Value + + 0 + 540 + 494 + 0 + + + FloaterDayCycleRect + + Comment + Rectangle for Day Cycle Editor + Persist + 1 + Type + Rect + Value + + 0 + 646 + 275 + 0 + + + FloaterEnvRect + + Comment + Rectangle for Environment Editor + Persist + 1 + Type + Rect + Value + + 0 + 150 + 600 + 0 + + + FloaterFindRect2 + + Comment + Rectangle for Find window + Persist + 1 + Type + Rect + Value + + 0 + 570 + 780 + 0 + + + FloaterFriendsRect + + Comment + Rectangle for friends window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 250 + 0 + + + FloaterGestureRect2 + + Comment + Rectangle for gestures window + Persist + 1 + Type + Rect + Value + + 0 + 465 + 350 + 0 + + + FloaterHUDRect2 + + Comment + Rectangle for HUD Floater window + Persist + 1 + Type + Rect + Value + + + 0 + 292 + 362 + 0 + + + FloaterHtmlRect + + Comment + Rectangle for HTML window + Persist + 1 + Type + Rect + Value + + 100 + 460 + 370 + 100 + + + FloaterIMRect + + Comment + Rectangle for IM window + Persist + 1 + Type + Rect + Value + + 0 + 160 + 500 + 0 + + + FloaterInspectRect + + Comment + Rectangle for Object Inspect window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + + FloaterInventoryRect + + Comment + Rectangle for inventory window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 300 + 0 + + + FloaterJoystickRect + + Comment + Rectangle for joystick controls window. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterLagMeter + + Comment + Rectangle for lag meter + Persist + 1 + Type + Rect + Value + + 0 + 142 + 350 + 0 + + + ShowRadar + + Comment + Show the radar floater + Persist + 1 + Type + Boolean + Value + 0 + + FloaterRadarRect + + Comment + Rectangle for Radar + Persist + 1 + Type + Rect + Value + + 0 + 400 + 200 + 0 + + + RadarKeepOpen + + Comment + Keeps radar updates running in background + Persist + 1 + Type + Boolean + Value + 0 + + RadarUpdateRate + + Comment + Radar update rate (0 = high, 1 = medium, 2 = low) + Persist + 1 + Type + U32 + Value + 1 + + RadarAlertSim + + Comment + Whether the radar emits chat alerts for avatars entering/exiting sim + Persist + 1 + Type + Boolean + Value + 0 + + RadarAlertDraw + + Comment + Whether the radar emits chat alerts for avatars entering/exiting draw distance + Persist + 1 + Type + Boolean + Value + 0 + + RadarAlertShoutRange + + Comment + Whether the radar emits chat alerts for avatars entering/exiting shout range + Persist + 1 + Type + Boolean + Value + 0 + + RadarAlertChatRange + + Comment + Whether the radar emits chat alerts for avatars entering/exiting chat range + Persist + 1 + Type + Boolean + Value + 1 + + RadarChatAlerts + + Comment + Whether the radar emits chat alerts regarding the status of avatars it displays + Persist + 1 + Type + Boolean + Value + 0 + + RadarChatKeys + + Comment + Enable private chat alerts for avatars entering the region + Persist + 1 + Type + Boolean + Value + 0 + + FloaterLandRect5 + + Comment + Rectangle for About Land window + Persist + 1 + Type + Rect + Value + + 0 + 370 + 460 + 0 + + + FloaterLandmarkRect + + Comment + Rectangle for landmark picker + Persist + 1 + Type + Rect + Value + + 0 + 290 + 310 + 0 + + + FloaterMediaRect + + Comment + Rectangle for media browser window + Persist + 1 + Type + Rect + Value + + 16 + 650 + 600 + 128 + + + FloaterMiniMapRect + + Comment + Rectangle for world map + Persist + 1 + Type + Rect + Value + + 0 + 225 + 200 + 0 + + + FloaterMoveRect2 + + Comment + Rectangle for avatar control window + Persist + 1 + Type + Rect + Value + + 0 + 58 + 135 + 0 + + + FloaterMuteRect3 + + Comment + Rectangle for mute window + Persist + 1 + Type + Rect + Value + + 0 + 300 + 300 + 0 + + + FloaterObjectIMInfo + + Comment + Rectangle for floater object im info windows + Persist + 1 + Type + Rect + Value + + 0 + 300 + 300 + 0 + + + FloaterOpenObjectRect + + Comment + Rectangle for Open Object window + Persist + 1 + Type + Rect + Value + + 0 + 350 + 300 + 0 + + + FloaterPayRectB + + Comment + Rectangle for pay window + Persist + 1 + Type + Rect + Value + + 0 + 150 + 400 + 0 + + + FloaterPermPrefsRect + + Comment + Rectangle for initial permissions preferences + Persist + 1 + Type + Rect + Value + + 200 + 250 + 250 + 200 + + + FloaterRegionInfo + + Comment + Rectangle for region info window + Persist + 1 + Type + Rect + Value + + 0 + 512 + 480 + 0 + + + FloaterScriptDebugRect + + Comment + Rectangle for Script Error/Debug window + Persist + 1 + Type + Rect + Value + + 0 + 130 + 450 + 0 + + + FloaterSnapshotRect + + Comment + Rectangle for snapshot window + Persist + 1 + Type + Rect + Value + + 0 + 200 + 200 + 400 + + + FloaterSoundsRect + + Comment + Rectangle for sounds log floater. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterSoundsLogAvatars + + Comment + Show SoundTriggers/gestures played by agents in the log. Also includes collision sounds if enabled + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsLogObjects + + Comment + Show sounds played by objects in the log. Also includes collision sounds if enabled + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsLogCollisions + + Comment + Don't filter out default collision sounds in the log + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsLogRepeats + + Comment + Only show one entry for each unique asset ID in the log + Persist + 1 + Type + Boolean + Value + 1 + + FloaterStatisticsRect + + Comment + Rectangle for chat history + Persist + 1 + Type + Rect + Value + + 0 + 400 + 250 + 0 + + + FloaterTeleportHistoryRect + + Comment + Rectangle for teleport history window + Persist + 1 + Type + Rect + Value + + 20 + 20 + 470 + 200 + + + FloaterViewBottom + + Comment + [DO NOT MODIFY] Controls layout of floating windows within SL window + Persist + 1 + Type + S32 + Value + -1 + + FloaterWorldMapRect2 + + Comment + Rectangle for world map window + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterAORect + + Comment + Rectangle for AO editor. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterAvatarsRect + + Comment + Rectangle for avatar radar. + Persist + 1 + Type + Rect + Value + + 200 + 905 + 396 + 734 + + + FloaterInterceptorRect + + Comment + Rectangle for interceptor floater. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterKeyToolRect + + Comment + Rectangle for KeyTool floater. + Persist + 1 + Type + Rect + Value + + 439 + 759 + 593 + 443 + + + KeyToolAutomaticOpen + + Comment + Automatically open KeyTool results + Persist + 1 + Type + Boolean + Value + 1 + + KeyToolAutomaticClose + + Comment + Automatically close KeyTool floater when a result is found + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsRect + + Comment + Rectangle for sounds log floater. + Persist + 1 + Type + Rect + Value + + 0 + 0 + 0 + 0 + + + FloaterSoundsLogAvatars + + Comment + Show SoundTriggers/gestures played by agents in the log. Also includes collision sounds if enabled + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsLogObjects + + Comment + Show sounds played by objects in the log. Also includes collision sounds if enabled + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsLogCollisions + + Comment + Don't filter out default collision sounds in the log + Persist + 1 + Type + Boolean + Value + 1 + + FloaterSoundsLogRepeats + + Comment + Only show one entry for each unique asset ID in the log + Persist + 1 + Type + Boolean + Value + 1 + + FlyBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + AlwaysAllowFly + + Comment + Ignore parcel/region setting that blocks flying + Persist + 1 + Type + Boolean + Value + 1 + + FlycamAbsolute + + Comment + Treat Flycam values as absolute positions (not deltas). + Persist + 1 + Type + Boolean + Value + 0 + + FlycamAxisDeadZone0 + + Comment + Flycam axis 0 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone1 + + Comment + Flycam axis 1 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone2 + + Comment + Flycam axis 2 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone3 + + Comment + Flycam axis 3 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone4 + + Comment + Flycam axis 4 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone5 + + Comment + Flycam axis 5 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisDeadZone6 + + Comment + Flycam axis 6 dead zone. + Persist + 1 + Type + F32 + Value + 0.1 + + FlycamAxisScale0 + + Comment + Flycam axis 0 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale1 + + Comment + Flycam axis 1 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale2 + + Comment + Flycam axis 2 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale3 + + Comment + Flycam axis 3 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale4 + + Comment + Flycam axis 4 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale5 + + Comment + Flycam axis 5 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamAxisScale6 + + Comment + Flycam axis 6 scaler. + Persist + 1 + Type + F32 + Value + 1.0 + + FlycamFeathering + + Comment + Flycam feathering (less is softer) + Persist + 1 + Type + F32 + Value + 16.0 + + FlycamZoomDirect + + Comment + Map flycam zoom axis directly to camera zoom. + Persist + 1 + Type + Boolean + Value + 0 + + FlyingAtExit + + Comment + Was flying when last logged out, so fly when logging in + Persist + 1 + Type + Boolean + Value + 0 + + FocusOffsetDefault + + Comment + Default focus point offset relative to avatar (x-axis is forward) + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.0 + 1.0 + + + FocusPosOnLogout + + Comment + Camera focus point when last logged out (global coordinates) + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + FolderAutoOpenDelay + + Comment + Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop + Persist + 1 + Type + F32 + Value + 0.75 + + FolderLoadingMessageWaitTime + + Comment + Seconds to wait before showing the LOADING... text in folder views + Persist + 1 + Type + F32 + Value + 0.5 + + FontMonospace + + Comment + Name of monospace font that definitely exists (Truetype file name) + Persist + 0 + Type + String + Value + DejaVuSansMono.ttf + + FontSansSerif + + Comment + Name of primary sans-serif font that definitely exists (Truetype file name) + Persist + 0 + Type + String + Value + DroidSans.ttf + + FontSansSerifBundledFallback + + Comment + Name of secondary sans-serif font that definitely exists (Truetype file name) + Persist + 0 + Type + String + Value + DejaVuSansCondensed.ttf + + FontSansSerifBold + + Comment + Name of bold font (Truetype file name) + Persist + 0 + Type + String + Value + DroidSans-Bold.ttf + + FontSansSerifFallback + + Comment + Name of sans-serif font (Truetype file name) + Persist + 0 + Type + String + Value + + + FontSansSerifFallbackScale + + Comment + Scale of fallback font relative to huge font (fraction of huge font size) + Persist + 1 + Type + F32 + Value + 1.00 + + FontScreenDPI + + Comment + Font resolution, higher is bigger (pixels per inch) + Persist + 1 + Type + F32 + Value + 96.0 + + FontSizeHuge + + Comment + Size of huge font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 14.0 + + FontSizeLarge + + Comment + Size of large font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 11.0 + + FontSizeMedium + + Comment + Size of medium font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 9.5 + + FontSizeMonospace + + Comment + Size of monospaced font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 9.0 + + FontSizeSmall + + Comment + Size of small font (points, or 1/72 of an inch) + Persist + 1 + Type + F32 + Value + 8.5 + + ForceNotecardDragCargoPermissive + + Comment + For testing what does and does not work when using HTTPS upload + Persist + 1 + Type + Boolean + Value + 0 + + ForceNotecardDragCargoAcceptance + + Comment + For testing what does and does not work when using HTTPS upload + Persist + 1 + Type + Boolean + Value + 0 + + ForceShowGrid + + Comment + Always show grid dropdown on login screen + Persist + 1 + Type + Boolean + Value + 0 + + ForceMandatoryUpdate + + Comment + For QA: On next startup, forces the auto-updater to run + Persist + 1 + Type + Boolean + Value + 0 + + ForwardBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 45 + 54 + 66 + 29 + + + FreezeTime + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + FullScreen + + Comment + Run SL in fullscreen mode + Persist + 1 + Type + Boolean + Value + 0 + + FullScreenAspectRatio + + Comment + Aspect ratio of fullscreen display (width / height) + Persist + 1 + Type + F32 + Value + 1.33329999447 + + FullScreenAutoDetectAspectRatio + + Comment + Automatically detect proper aspect ratio for fullscreen display + Persist + 1 + Type + Boolean + Value + 1 + + FullScreenHeight + + Comment + Fullscreen resolution in height + Persist + 1 + Type + S32 + Value + 768 + + FullScreenWidth + + Comment + Fullscreen resolution in width + Persist + 1 + Type + S32 + Value + 1024 + + GridCrossSections + + Comment + Highlight cross sections of prims with grid manipulation plane. + Persist + 1 + Type + Boolean + Value + 0 + + GridDrawSize + + Comment + Visible extent of 2D snap grid (meters) + Persist + 1 + Type + F32 + Value + 12.0 + + GridMode + + Comment + Snap grid reference frame (0 = world, 1 = local, 2 = reference object) + Persist + 1 + Type + S32 + Value + 0 + + GridOpacity + + Comment + Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.699999988079 + + GridResolution + + Comment + Size of single grid step (meters) + Persist + 1 + Type + F32 + Value + 0.5 + + GridSubUnit + + Comment + Display fractional grid steps, relative to grid size + Persist + 1 + Type + Boolean + Value + 0 + + GridSubdivision + + Comment + Maximum number of times to divide single snap grid unit when GridSubUnit is true + Persist + 1 + Type + S32 + Value + 32 + + GroupNotifyBoxHeight + + Comment + Height of group notice messages + Persist + 1 + Type + S32 + Value + 260 + + GroupNotifyBoxWidth + + Comment + Width of group notice messages + Persist + 1 + Type + S32 + Value + 400 + + HTMLLinkColor + + Comment + Color of hyperlinks + Persist + 1 + Type + Color4 + Value + + 0.600000023842 + 0.600000023842 + 1.0 + 1.0 + + + HelpHomeURL + + Comment + URL of initial help page + Persist + 1 + Type + String + Value + help/index.html + + HelpLastVisitedURL + + Comment + URL of last help page, will be shown next time help is accessed + Persist + 1 + Type + String + Value + help/index.html + + HighResSnapshot + + Comment + Double resolution of snapshot from current window resolution + Persist + 1 + Type + Boolean + Value + 0 + + HtmlFindRect + + Comment + Rectangle for HTML find window + Persist + 1 + Type + Rect + Value + + 16 + 650 + 600 + 128 + + + HtmlHelpLastPage + + Comment + Last URL visited via help system + Persist + 1 + Type + String + Value + + + HtmlHelpRect + + Comment + Rectangle for HTML help window + Persist + 1 + Type + Rect + Value + + 16 + 650 + 600 + 128 + + + HtmlReleaseMessage + + Comment + Rectangle for HTML Release Message Floater window + Persist + 1 + Type + Rect + Value + + 46 + 520 + 400 + 128 + + + IMInChatConsole + + Comment + Copy IM into chat console + Persist + 1 + Type + Boolean + Value + 1 + + IMInChatHistory + + Comment + Copy IM into chat history + Persist + 1 + Type + Boolean + Value + 0 + + IMShowTimestamps + + Comment + Show timestamps in IM + Persist + 1 + Type + Boolean + Value + 1 + + IgnorePixelDepth + + Comment + Ignore pixel depth settings. + Persist + 1 + Type + Boolean + Value + 0 + + ImagePipelineUseHTTP + + Comment + If TRUE use HTTP GET to fetch textures from the server + Persist + 1 + Type + Boolean + Value + 1 + + InBandwidth + + Comment + Incoming bandwidth throttle (bps) + Persist + 1 + Type + F32 + Value + 0.0 + + InstallLanguage + + Comment + Language passed from installer (for UI) + Persist + 1 + Type + String + Value + en-us + + FetchInventoryOnLogin + + Comment + Automatically fetch the inventory in the background after login + Persist + 1 + Type + Boolean + Value + 1 + + InventoryAutoOpenDelay + + Comment + Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop + Persist + 1 + Type + F32 + Value + 1.0 + + InventorySortOrder + + Comment + Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 7 + + InvertMouse + + Comment + When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up) + Persist + 1 + Type + Boolean + Value + 0 + + JoystickAvatarEnabled + + Comment + Enables the Joystick to control Avatar movement. + Persist + 1 + Type + Boolean + Value + 1 + + JoystickAxis0 + + Comment + Flycam hardware axis mapping for internal axis 0 ([0, 5]). + Persist + 1 + Type + S32 + Value + 1 + + JoystickAxis1 + + Comment + Flycam hardware axis mapping for internal axis 1 ([0, 5]). + Persist + 1 + Type + S32 + Value + 0 + + JoystickAxis2 + + Comment + Flycam hardware axis mapping for internal axis 2 ([0, 5]). + Persist + 1 + Type + S32 + Value + 2 + + JoystickAxis3 + + Comment + Flycam hardware axis mapping for internal axis 3 ([0, 5]). + Persist + 1 + Type + S32 + Value + 4 + + JoystickAxis4 + + Comment + Flycam hardware axis mapping for internal axis 4 ([0, 5]). + Persist + 1 + Type + S32 + Value + 3 + + JoystickAxis5 + + Comment + Flycam hardware axis mapping for internal axis 5 ([0, 5]). + Persist + 1 + Type + S32 + Value + 5 + + JoystickAxis6 + + Comment + Flycam hardware axis mapping for internal axis 6 ([0, 5]). + Persist + 1 + Type + S32 + Value + -1 + + JoystickBuildEnabled + + Comment + Enables the Joystick to move edited objects. + Persist + 1 + Type + Boolean + Value + 0 + + JoystickEnabled + + Comment + Enables Joystick Input. + Persist + 1 + Type + Boolean + Value + 0 + + JoystickFlycamEnabled + + Comment + Enables the Joystick to control the flycam. + Persist + 0 + Type + Boolean + Value + 1 + + JoystickInitialized + + Comment + Whether or not a joystick has been detected and initiailized. + Persist + 1 + Type + String + Value + + + JoystickRunThreshold + + Comment + Input threshold to initiate running + Persist + 1 + Type + F32 + Value + 0.25 + + KeepAspectForSnapshot + + Comment + Use full window when taking snapshot, regardless of requested image size + Persist + 1 + Type + Boolean + Value + 1 + + LandBrushSize + + Comment + Size of affected region when using teraform tool + Persist + 1 + Type + F32 + Value + 2.0 + + LCDDestination + + Comment + Which LCD to use + Persist + 1 + Type + S32 + Value + 0 + + LSLFindCaseInsensitivity + + Comment + Use case insensitivity when searching in LSL editor + Persist + 1 + Type + Boolean + Value + 0 + + LSLHelpRect + + Comment + Rectangle for LSL help window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + + LSLHelpURL + + Comment + URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword + Persist + 1 + Type + String + Value + http://wiki.secondlife.com/wiki/[LSL_STRING] + + LagMeterShrunk + + Comment + Last large/small state for lag meter + Persist + 1 + Type + Boolean + Value + 0 + + Language + + Comment + Language specifier (for UI) + Persist + 1 + Type + String + Value + default + + LanguageIsPublic + + Comment + Let other residents see our language information + Persist + 1 + Type + Boolean + Value + 1 + + TranslateLanguage + + Comment + Translate Language specifier + Persist + 1 + Type + String + Value + default + + TranslateChat + + Comment + Translate incoming chat messages + Persist + 1 + Type + Boolean + Value + 0 + + LastFeatureVersion + + Comment + [DO NOT MODIFY] Version number for tracking hardware changes + Persist + 1 + Type + S32 + Value + 0 + + LastFindPanel + + Comment + Controls which find operation appears by default when clicking "Find" button + Persist + 1 + Type + String + Value + find_all_panel + + LastName + + Comment + Login last name + Persist + 1 + Type + String + Value + + + LastPrefTab + + Comment + Last selected tab in preferences window + Persist + 1 + Type + S32 + Value + 0 + + LastRunVersion + + Comment + Version number of last instance of the viewer that you ran + Persist + 1 + Type + String + Value + 0.0.0 + + LastSnapshotToEmailHeight + + Comment + The height of the last email snapshot, in px + Persist + 1 + Type + S32 + Value + 768 + + LastSnapshotToEmailWidth + + Comment + The width of the last email snapshot, in px + Persist + 1 + Type + S32 + Value + 1024 + + LastSnapshotToDiskHeight + + Comment + The height of the last disk snapshot, in px + Persist + 1 + Type + S32 + Value + 768 + + LastSnapshotToDiskWidth + + Comment + The width of the last disk snapshot, in px + Persist + 1 + Type + S32 + Value + 1024 + + LastSnapshotToInventoryHeight + + Comment + The height of the last texture snapshot, in px + Persist + 1 + Type + S32 + Value + 512 + + LastSnapshotToInventoryWidth + + Comment + The width of the last texture snapshot, in px + Persist + 1 + Type + S32 + Value + 512 + + LastSnapshotType + + Comment + Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image) + Persist + 1 + Type + S32 + Value + 0 + + LeftClickShowMenu + + Comment + Left click opens pie menu (FALSE = left click touches or grabs object) + Persist + 1 + Type + Boolean + Value + 0 + + LegacyMultiAttachmentSupport + + Comment + Converts legacy "secondary attachment points" to multi-attachments for other avatars + Persist + 1 + Type + Boolean + Value + 1 + + LimitDragDistance + + Comment + Limit translation of object via translate tool + Persist + 1 + Type + Boolean + Value + 1 + + LimitSelectDistance + + Comment + Disallow selection of objects beyond max select distance + Persist + 1 + Type + Boolean + Value + 0 + + LipSyncAah + + Comment + Aah (jaw opening) babble loop + Persist + 1 + Type + String + Value + 257998776531013446642343 + + LipSyncAahPowerTransfer + + Comment + Transfer curve for Voice Interface power to aah lip sync amplitude + Persist + 1 + Type + String + Value + 0000123456789 + + LipSyncEnabled + + Comment + 0 disable lip-sync, 1 enable babble loop + Persist + 1 + Type + Boolean + Value + 1 + + LipSyncOoh + + Comment + Ooh (mouth width) babble loop + Persist + 1 + Type + String + Value + 1247898743223344444443200000 + + LipSyncOohAahRate + + Comment + Rate to babble Ooh and Aah (/sec) + Persist + 1 + Type + F32 + Value + 24.0 + + LipSyncOohPowerTransfer + + Comment + Transfer curve for Voice Interface power to ooh lip sync amplitude + Persist + 1 + Type + String + Value + 0012345566778899 + + LocalCacheVersion + + Comment + Version number of cache + Persist + 1 + Type + S32 + Value + 0 + + LogMessages + + Comment + Log network traffic + Persist + 1 + Type + Boolean + Value + 0 + + LoginAsGod + + Comment + Attempt to login with god powers (Linden accounts only) + Persist + 1 + Type + Boolean + Value + 0 + + LoginLastLocation + + Comment + Login at same location you last logged out + Persist + 1 + Type + Boolean + Value + 1 + + LoginPage + + Comment + Login authentication page. + Persist + 1 + Type + String + Value + + + LosslessJ2CUpload + + Comment + Use lossless compression for small image uploads + Persist + 1 + Type + Boolean + Value + 0 + + MainloopTimeoutDefault + + Comment + Timeout duration for mainloop lock detection, in seconds. + Persist + 1 + Type + F32 + Value + 20.0 + + MapServerURL + + Comment + World map URL template for locating map tiles + Persist + 0 + Type + String + Value + http://map.secondlife.com.s3.amazonaws.com/ + + UseWebMapTiles + + Comment + Use web map tiles whenever possible + Persist + 1 + Type + Boolean + Value + 1 + + MapOverlayIndex + + Comment + Currently selected world map type + Persist + 1 + Type + S32 + Value + 0 + + MapScale + + Comment + World map zoom level (pixels per region) + Persist + 1 + Type + F32 + Value + 128.0 + + MapShowAgentCount + + Comment + Show number of agents next to region names on world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowPGEvents + + Comment + Show PG events on world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowMatureEvents + + Comment + Show mature events on world map + Persist + 1 + Type + Boolean + Value + 0 + + MapShowAdultEvents + + Comment + Show adult events on world map + Persist + 1 + Type + Boolean + Value + 0 + + MapShowInfohubs + + Comment + Show infohubs on the world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowLandForSale + + Comment + Show land for sale on world map + Persist + 1 + Type + Boolean + Value + 0 + + MapShowPeople + + Comment + Show other users on world map + Persist + 1 + Type + Boolean + Value + 1 + + MapShowTelehubs + + Comment + Show telehubs on world map + Persist + 1 + Type + Boolean + Value + 1 + + Marker + + Comment + [NOT USED] + Persist + 1 + Type + String + Value + + + MaxDragDistance + + Comment + Maximum allowed translation distance in a single operation of translate tool (meters from start point) + Persist + 1 + Type + F32 + Value + 48.0 + + MaxSelectDistance + + Comment + Maximum allowed selection distance (meters from avatar) + Persist + 1 + Type + F32 + Value + 64.0 + + MeanCollisionBump + + Comment + You have experienced an abuse of being bumped by an object or avatar + Persist + 1 + Type + Boolean + Value + 0 + + MeanCollisionPhysical + + Comment + You have experienced an abuse from a physical object + Persist + 1 + Type + Boolean + Value + 0 + + MeanCollisionPushObject + + Comment + You have experienced an abuse of being pushed by a scripted object + Persist + 1 + Type + Boolean + Value + 0 + + MeanCollisionScripted + + Comment + You have experienced an abuse from a scripted object + Persist + 1 + Type + Boolean + Value + 0 + + MeanCollisionSelected + + Comment + You have experienced an abuse of being pushed via a selected object + Persist + 1 + Type + Boolean + Value + 0 + + MediaControlFadeTime + + Comment + Amount of time (in seconds) that the media control fades + Persist + 1 + Type + F32 + Value + 1.5 + + MediaControlTimeout + + Comment + Amount of time (in seconds) for media controls to fade with no mouse activity + Persist + 1 + Type + F32 + Value + 3.0 + + MediaOnAPrimUI + + Comment + Whether or not to show the "link sharing" UI + Persist + 1 + Type + Boolean + Value + 0 + + MemoryLogFrequency + + Comment + Seconds between display of Memory in log (0 for never) + Persist + 1 + Type + F32 + Value + 600.0 + + MenuAccessKeyTime + + Comment + Time (seconds) in which the menu key must be tapped to move focus to the menu bar + Persist + 1 + Type + F32 + Value + 0.25 + + MenuBarHeight + + Comment + + Persist + 0 + Type + S32 + Value + 18 + + MenuBarWidth + + Comment + + Persist + 0 + Type + S32 + Value + 410 + + MigrateCacheDirectory + + Comment + Check for old version of disk cache to migrate to current location + Persist + 1 + Type + Boolean + Value + 1 + + MiniMapPrimMaxRadius + + Comment + Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag. + Persist + 1 + Type + F32 + Value + 256.0 + + MiniMapCenter + + Comment + Sets the focal point of the minimap. (0=None, 1=Camera) + Persist + 1 + Type + S32 + Value + 1 + + MiniMapRotate + + Comment + Rotate miniature world map to avatar direction + Persist + 1 + Type + Boolean + Value + 1 + + MiniMapScale + + Comment + Miniature world map zoom level (pixels per region) + Persist + 1 + Type + F32 + Value + 128.0 + + MouseSensitivity + + Comment + Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity) + Persist + 1 + Type + F32 + Value + 3.0 + + MouseSmooth + + Comment + Smooths out motion of mouse when in mouselook mode. + Persist + 1 + Type + Boolean + Value + 0 + + MouseSun + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + MouselookBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + MoveDownBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 91 + 29 + 116 + 4 + + + MoveUpBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 91 + 54 + 116 + 29 + + + DisableWindAudio + + Comment + Disable the wind audio effect + Persist + 1 + Type + Boolean + Value + 0 + + MuteAmbient + + Comment + Ambient sound effects, such as wind noise, play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + + MuteAudio + + Comment + All audio plays at 0 volume (streaming audio still takes up bandwidth, for example) + Persist + 1 + Type + Boolean + Value + 0 + + MuteMedia + + Comment + Media plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + + MuteMusic + + Comment + Music plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + + MuteSounds + + Comment + Sound effects play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + + MuteUI + + Comment + UI sound effects play at 0 volume + Persist + 1 + Type + Boolean + Value + 0 + + MuteVoice + + Comment + Voice plays at 0 volume (streaming audio still takes up bandwidth) + Persist + 1 + Type + Boolean + Value + 0 + + MuteWhenMinimized + + Comment + Mute audio when SL window is minimized + Persist + 1 + Type + Boolean + Value + 1 + + NearMeRange + + Comment + Search radius for nearby avatars + Persist + 1 + Type + F32 + Value + 20 + + NextOwnerCopy + + Comment + Newly created objects can be copied by next owner + Persist + 1 + Type + Boolean + Value + 0 + + NextOwnerModify + + Comment + Newly created objects can be modified by next owner + Persist + 1 + Type + Boolean + Value + 0 + + NextOwnerTransfer + + Comment + Newly created objects can be resold or given away by next owner + Persist + 1 + Type + Boolean + Value + 1 + + NewCacheLocation + + Comment + Change the location of the local disk cache to this + Persist + 1 + Type + String + Value + + + NextLoginLocation + + Comment + Location to log into by default. + Persist + 1 + Type + String + Value + + + Nimble + + Comment + Disables landing and jumping delays. + Persist + 1 + Type + Boolean + Value + 0 + + NoAudio + + Comment + Disable audio playback. + Persist + 1 + Type + Boolean + Value + 0 + + NoHardwareProbe + + Comment + Disable hardware probe. + Persist + 1 + Type + Boolean + Value + 0 + + NoInventoryLibrary + + Comment + Do not request inventory library. + Persist + 1 + Type + Boolean + Value + 0 + + NoPreload + + Comment + Disable sound and image preload. + Persist + 1 + Type + Boolean + Value + 0 + + NoVerifySSLCert + + Comment + Do not verify SSL peers. + Persist + 1 + Type + Boolean + Value + 0 + + NotecardEditorRect + + Comment + Rectangle for notecard editor + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + + NotifyBoxHeight + + Comment + Height of notification messages + Persist + 1 + Type + S32 + Value + 200 + + NotifyBoxWidth + + Comment + Width of notification messages + Persist + 1 + Type + S32 + Value + 350 + + NotifyMoneyChange + + Comment + Pop up notifications for all L$ transactions + Persist + 1 + Type + Boolean + Value + 1 + + NotifyTipDuration + + Comment + Length of time that notification tips stay on screen (seconds) + Persist + 1 + Type + F32 + Value + 4.0 + + NumSessions + + Comment + Number of successful logins to Second Life + Persist + 1 + Type + S32 + Value + 0 + + NumpadControl + + Comment + How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock) + Persist + 1 + Type + S32 + Value + 0 + + OpenDebugStatAdvanced + + Comment + Expand advanced performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatBasic + + Comment + Expand basic performance stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatNet + + Comment + Expand network stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatRender + + Comment + Expand render stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatSim + + Comment + Expand simulator performance stats display + Persist + 1 + Type + Boolean + Value + 1 + + OpenDebugStatTexture + + Comment + Expand Texture performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatPhysicsDetails + + Comment + Expand Physics Details performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatSimTime + + Comment + Expand Simulator Time performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OpenDebugStatSimTimeDetails + + Comment + Expand Simulator Time Details performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + OutBandwidth + + Comment + Outgoing bandwidth throttle (bps) + Persist + 1 + Type + F32 + Value + 0.0 + + OverdrivenColor + + Comment + Color of various indicators when resident is speaking too loud. + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.0 + 1.0 + + + OverlayTitle + + Comment + Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces) + Persist + 1 + Type + String + Value + Set_via_OverlayTitle_in_settings.xml + + PTTCurrentlyEnabled + + Comment + Use Push to Talk mode + Persist + 0 + Type + Boolean + Value + 1 + + PacketDropPercentage + + Comment + Percentage of packets dropped by the client. + Persist + 1 + Type + F32 + Value + 0.0 + + ParcelMediaAutoPlayEnable + + Comment + Auto play parcel media when available + Persist + 1 + Type + Boolean + Value + 0 + + PerAccountSettingsFile + + Comment + Persisted client settings file name (per user). + Persist + 0 + Type + String + Value + + + PermissionsCautionEnabled + + Comment + When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission + Persist + 0 + Type + Boolean + Value + 1 + + PermissionsCautionNotifyBoxHeight + + Comment + Height of caution-style notification messages + Persist + 0 + Type + S32 + Value + 344 + + RevokePermsOnStandUp + + Comment + When enabled, revokes any permission granted to an object you don't own and from which your avatar is standing up + Persist + 1 + Type + Boolean + Value + 0 + + PermissionsManagerRect + + Comment + Rectangle for permissions manager window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + + PickerContextOpacity + + Comment + Controls overall opacity of context frustrum connecting color and texture pickers with their swatches + Persist + 1 + Type + F32 + Value + 0.34999999404 + + PicksPerSecondMouseMoving + + Comment + How often to perform hover picks while the mouse is moving (picks per second) + Persist + 1 + Type + F32 + Value + 5.0 + + PicksPerSecondMouseStationary + + Comment + How often to perform hover picks while the mouse is stationary (picks per second) + Persist + 1 + Type + F32 + Value + 0.0 + + PieMenuLineWidth + + Comment + Width of lines in pie menu display (pixels) + Persist + 1 + Type + F32 + Value + 2.5 + + PinTalkViewOpen + + Comment + Stay in IM after hitting return + Persist + 1 + Type + Boolean + Value + 1 + + PingInterpolate + + Comment + Extrapolate object position along velocity vector based on ping delay + Persist + 1 + Type + Boolean + Value + 0 + + PitchFromMousePosition + + Comment + Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom) + Persist + 1 + Type + F32 + Value + 90.0 + + PlayTypingAnim + + Comment + Your avatar plays the typing animation whenever you type in the chat bar + Persist + 1 + Type + Boolean + Value + 1 + + PlayTypingSound + + Comment + TRUE to play and hear the typing sound whenever you or another avatar types in the chat bar + Persist + 1 + Type + Boolean + Value + 1 + + PrecachingDelay + + Comment + Delay when logging in to load world before showing it (seconds) + Persist + 1 + Type + F32 + Value + 6.0 + + PreferredMaturity + + Comment + Setting for the user's preferred maturity level. + Persist + 1 + Type + U32 + Value + 13 + + PreviewAnimRect + + Comment + Rectangle for animation preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + + PreviewClassifiedRect + + Comment + Rectangle for URL preview window + Persist + 1 + Type + Rect + Value + + 0 + 530 + 420 + 0 + + + PreviewEventRect + + Comment + Rectangle for Event preview window + Persist + 1 + Type + Rect + Value + + 0 + 530 + 420 + 0 + + + PreviewLandmarkRect + + Comment + Rectangle for landmark preview window + Persist + 1 + Type + Rect + Value + + 0 + 90 + 300 + 0 + + + PreviewObjectRect + + Comment + Rectangle for object preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + + PreviewScriptRect + + Comment + Rectangle for script preview window + Persist + 1 + Type + Rect + Value + + 0 + 586 + 576 + 0 + + + SaveScriptsAsMono + + Comment + When set to TRUE, save scripts in inventory as Mono scripts instead of LSL2 + Persist + 1 + Type + Boolean + Value + 1 + + PreviewSoundRect + + Comment + Rectangle for sound preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + + PreviewTextureRect + + Comment + Rectangle for texture preview window + Persist + 1 + Type + Rect + Value + + 0 + 400 + 400 + 0 + + + PreviewURLRect + + Comment + Rectangle for URL preview window + Persist + 1 + Type + Rect + Value + + 0 + 90 + 300 + 0 + + + PreviewWearableRect + + Comment + Rectangle for wearable preview window + Persist + 1 + Type + Rect + Value + + 0 + 85 + 300 + 0 + + + ProbeHardwareOnStartup + + Comment + Query current hardware configuration on application startup + Persist + 1 + Type + Boolean + Value + 1 + + PropertiesRect + + Comment + Rectangle for inventory item properties window + Persist + 1 + Type + Rect + Value + + 0 + 320 + 350 + 0 + + + PurgeCacheOnNextStartup + + Comment + Clear local file cache next time viewer is run + Persist + 1 + Type + Boolean + Value + 0 + + PurgeCacheOnStartup + + Comment + Clear local file cache every time viewer is run + Persist + 1 + Type + Boolean + Value + 0 + + PushToTalkButton + + Comment + Which button or keyboard key is used for push-to-talk + Persist + 1 + Type + String + Value + MiddleMouse + + PushToTalkToggle + + Comment + Should the push-to-talk button behave as a toggle + Persist + 1 + Type + Boolean + Value + 0 + + QAMode + + Comment + Enable Testing Features. + Persist + 1 + Type + Boolean + Value + 0 + + QuietSnapshotsToDisk + + Comment + Take snapshots to disk without playing animation or sound + Persist + 1 + Type + Boolean + Value + 0 + + QuitAfterSeconds + + Comment + The duration allowed before quitting. + Persist + 1 + Type + F32 + Value + 0.0 + + RadioLandBrushAction + + Comment + Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert) + Persist + 1 + Type + S32 + Value + 0 + + RadioLandBrushSize + + Comment + Size of land modification brush (0 = small, 1 = medium, 2 = large) + Persist + 1 + Type + S32 + Value + 0 + + LandBrushForce + + Comment + Multiplier for land modification brush force. + Persist + 1 + Type + F32 + Value + 1.0 + + RecentItemsSortOrder + + Comment + Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 1 + + RectangleSelectInclusive + + Comment + Select objects that have at least one vertex inside selection rectangle + Persist + 1 + Type + Boolean + Value + 1 + + RegionTextureSize + + Comment + Terrain texture dimensions (power of 2) + Persist + 1 + Type + U32 + Value + 256 + + RememberPassword + + Comment + Keep password (in encrypted form) for next login + Persist + 1 + Type + Boolean + Value + 1 + + RenderAnisotropic + + Comment + Render textures using anisotropic filtering + Persist + 1 + Type + Boolean + Value + 0 + + RenderAppleUseMultGL + + Comment + Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL). + Persist + 1 + Type + Boolean + Value + 0 + + RenderAttachedLights + + Comment + Render lighted prims that are attached to avatars + Persist + 1 + Type + Boolean + Value + 1 + + RenderAttachedParticles + + Comment + Render particle systems that are attached to avatars + Persist + 1 + Type + Boolean + Value + 1 + + RenderAvatarCloth + + Comment + Controls if avatars use wavy cloth + Persist + 1 + Type + Boolean + Value + 1 + + RenderAvatarLODFactor + + Comment + Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 0.5 + + RenderAvatarMaxVisible + + Comment + Maximum number of avatars to display at any one time + Persist + 1 + Type + S32 + Value + 35 + + RenderAvatarInvisible + + Comment + Set your avatar as Invisible + Persist + 0 + Type + Boolean + Value + 0 + + RenderAvatarVP + + Comment + Use vertex programs to perform hardware skinning of avatar + Persist + 1 + Type + Boolean + Value + 1 + + RenderShadowGaussian + + Comment + Gaussian coefficients for the two shadow/SSAO blurring passes (z component unused). + Persist + 1 + Type + Vector3 + Value + + 2.0 + 2.0 + 0.0 + + + RenderShadowNearDist + + Comment + Near clip plane of shadow camera (affects precision of depth shadows). + Persist + 1 + Type + Vector3 + Value + + 256 + 256 + 256 + + + RenderShadowClipPlanes + + Comment + Near clip plane split distances for shadow map frusta. + Persist + 1 + Type + Vector3 + Value + + 4.0 + 8.0 + 24.0 + + + RenderSSAOScale + + Comment + Scaling factor for the area to sample for occluders (pixels at 1 meter away, inversely varying with distance) + Persist + 1 + Type + F32 + Value + 500.0 + + RenderSSAOMaxScale + + Comment + Maximum screen radius for sampling (pixels) + Persist + 1 + Type + U32 + Value + 60 + + RenderSSAOFactor + + Comment + Occlusion sensitivity factor for ambient occlusion (larger is more) + Persist + 1 + Type + F32 + Value + 0.30 + + RenderSSAOEffect + + Comment + Multiplier for (1) value and (2) saturation (HSV definition), for areas which are totally occluded. Blends with original color for partly-occluded areas. (Third component is unused.) + Persist + 1 + Type + Vector3 + Value + + 0.40 + 1.00 + 0.00 + + + RenderBumpmapMinDistanceSquared + + Comment + Maximum distance at which to render bumpmapped primitives (distance in meters, squared) + Persist + 1 + Type + F32 + Value + 100.0 + + RenderNormalMapScale + + Comment + Scaler applied to height map when generating normal maps + Persist + 1 + Type + F32 + Value + 128 + + RenderCubeMap + + Comment + Whether we can render the cube map or not + Persist + 1 + Type + Boolean + Value + 1 + + RenderCustomSettings + + Comment + Do you want to set the graphics settings yourself + Persist + 1 + Type + Boolean + Value + 0 + + RenderDebugGL + + Comment + Enable strict GL debugging. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDebugPipeline + + Comment + Enable strict pipeline debugging. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDebugTextureBind + + Comment + Enable texture bind performance test. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDelayCreation + + Comment + Throttle creation of drawables. + Persist + 1 + Type + Boolean + Value + 0 + + RenderAnimateRes + + Comment + Animate rezing prims. + Persist + 1 + Type + Boolean + Value + 0 + + RenderAnimateTrees + + Comment + Use GL matrix ops to animate tree branches. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDeferredAlphaSoften + + Comment + Scalar for softening alpha surfaces (for soft particles). + Persist + 1 + Type + F32 + Value + 0.75 + + RenderDeferredNoise + + Comment + Noise scalar to hide banding in deferred render. + Persist + 1 + Type + F32 + Value + 4 + + RenderDeferred + + Comment + Use deferred rendering pipeline. + Persist + 1 + Type + Boolean + Value + 0 + + RenderDeferredSunShadow + + Comment + Generate shadows from the sun. + Persist + 1 + Type + Boolean + Value + 1 + + RenderDeferredSunWash + + Comment + Amount local lights are washed out by sun. + Persist + 1 + Type + F32 + Value + 0.5 + + RenderShadowNoise + + Comment + Magnitude of noise on shadow samples. + Persist + 1 + Type + F32 + Value + -0.0001 + + RenderShadowBlurSize + + Comment + Scale of shadow softening kernel. + Persist + 1 + Type + F32 + Value + 0.7 + + RenderShadowBlurSamples + + Comment + Number of samples to take for each pass of shadow blur (value range 1-16). Actual number of samples is value * 2 - 1. + Persist + 1 + Type + U32 + Value + 5 + + RenderDynamicLOD + + Comment + Dynamically adjust level of detail. + Persist + 1 + Type + Boolean + Value + 1 + + RenderFSAASamples + + Comment + Number of samples to use for FSAA (0 = no AA). + Persist + 1 + Type + U32 + Value + 0 + + RenderFarClip + + Comment + Distance of far clip plane from camera (meters) + Persist + 1 + Type + F32 + Value + 256.0 + + SavedRenderFarClip + + Comment + Saved draw distance (used in case of logout during speed rezzing) + Persist + 1 + Type + F32 + Value + 0.0 + + SpeedRez + + Comment + Set to TRUE to increase rezzing speed via draw distance stepping + Persist + 1 + Type + Boolean + Value + 0 + + SpeedRezInterval + + Comment + Interval in seconds between each draw distance increment + Persist + 1 + Type + U32 + Value + 20 + + RenderFastAlpha + + Comment + Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces). + Persist + 1 + Type + Boolean + Value + 0 + + RenderFastUI + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + + RenderFlexTimeFactor + + Comment + Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderFogRatio + + Comment + Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance) + Persist + 1 + Type + F32 + Value + 4.0 + + RenderGamma + + Comment + Sets gamma exponent for renderer + Persist + 1 + Type + F32 + Value + 0.0 + + RenderGammaFull + + Comment + Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2. + Persist + 1 + Type + Boolean + Value + 1.0 + + RenderGlow + + Comment + Render bloom post effect. + Persist + 1 + Type + Boolean + Value + 1 + + RenderGlowIterations + + Comment + Number of times to iterate the glow (higher = wider and smoother but slower) + Persist + 1 + Type + S32 + Value + 2 + + RenderGlowLumWeights + + Comment + Weights for each color channel to be used in calculating luminance (should add up to 1.0) + Persist + 1 + Type + Vector3 + Value + + 0.299 + 0.587 + 0.114 + + + RenderGlowMaxExtractAlpha + + Comment + Max glow alpha value for brightness extraction to auto-glow. + Persist + 1 + Type + F32 + Value + 0.065 + + RenderGlowMinLuminance + + Comment + Min luminance intensity necessary to consider an object bright enough to automatically glow. + Persist + 1 + Type + F32 + Value + 2.5 + + RenderGlowResolutionPow + + Comment + Glow map resolution power of two. + Persist + 1 + Type + S32 + Value + 9 + + RenderGlowStrength + + Comment + Additive strength of glow. + Persist + 1 + Type + F32 + Value + 0.35 + + RenderGlowWarmthAmount + + Comment + Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth + Persist + 1 + Type + F32 + Value + 0.0 + + RenderGlowWarmthWeights + + Comment + Weight of each color channel used before finding the max warmth + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.5 + 0.7 + + + RenderGlowWidth + + Comment + Glow sample size (higher = wider and softer but eventually more pixelated) + Persist + 1 + Type + F32 + Value + 1.3 + + RenderGround + + Comment + Determines whether we can render the ground pool or not + Persist + 1 + Type + Boolean + Value + 1 + + RenderHUDInSnapshot + + Comment + Display HUD attachments in snapshot + Persist + 1 + Type + Boolean + Value + 0 + + RenderHUDParticles + + Comment + Display particle systems in HUD attachments (experimental) + Persist + 1 + Type + Boolean + Value + 0 + + RenderHighlightSelections + + Comment + Show selection outlines on objects + Persist + 0 + Type + Boolean + Value + 1 + + RenderHiddenSelections + + Comment + Show selection lines on objects that are behind other objects + Persist + 1 + Type + Boolean + Value + 1 + + RenderHideGroupTitle + + Comment + Don't show my group title in my name label + Persist + 1 + Type + Boolean + Value + 0 + + RenderHideGroupTitleAll + + Comment + Show group titles in name labels + Persist + 1 + Type + Boolean + Value + 0 + + RenderInitError + + Comment + Error occured while initializing GL + Persist + 1 + Type + Boolean + Value + 0 + + RenderLightRadius + + Comment + Render the radius of selected lights + Persist + 1 + Type + Boolean + Value + 0 + + RenderLightingDetail + + Comment + Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights) + Persist + 1 + Type + S32 + Value + 1 + + RenderMaxPartCount + + Comment + Maximum number of particles to display on screen + Persist + 1 + Type + S32 + Value + 4096 + + RenderMaxNodeSize + + Comment + Maximum size of a single node's vertex data (in KB). + Persist + 1 + Type + S32 + Value + 8192 + + RenderMaxVBOSize + + Comment + Maximum size of a vertex buffer (in KB). + Persist + 1 + Type + S32 + Value + 512 + + RenderName + + Comment + Controls display of names above avatars (0 = never, 1 = fade, 2 = always) + Persist + 1 + Type + S32 + Value + 2 + + RenderNameFadeDuration + + Comment + Time interval over which to fade avatar names (seconds) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderNameHideSelf + + Comment + Don't display own name above avatar + Persist + 1 + Type + Boolean + Value + 0 + + RenderNameShowTime + + Comment + Fade avatar names after specified time (seconds) + Persist + 1 + Type + F32 + Value + 10.0 + + RenderObjectBump + + Comment + Show bumpmapping on primitives + Persist + 1 + Type + Boolean + Value + 1 + + ReSit + + Comment + Sit again if unsat + Persist + 0 + Type + Boolean + Value + 0 + + SpecifiedChannel + + Comment + What the viewer identifies itself as + Persist + 1 + Type + String + Value + AscentViewer + + SpecifiedVersionMaj + + Comment + Client's Major Version + Persist + 1 + Type + U32 + Value + 1 + + SpecifiedVersionMin + + Comment + Client's Minor Version + Persist + 1 + Type + U32 + Value + 4 + + SpecifiedVersionPatch + + Comment + Client's Patch Version + Persist + 1 + Type + U32 + Value + 0 + + SpecifiedVersionBuild + + Comment + Client's Build Version + Persist + 1 + Type + U32 + Value + 100000 + + RenderQualityPerformance + + Comment + Which graphics settings you've chosen + Persist + 1 + Type + U32 + Value + 1 + + RenderReflectionDetail + + Comment + Detail of reflection render pass. + Persist + 1 + Type + S32 + Value + 2 + + RenderReflectionRes + + Comment + Reflection map resolution. + Persist + 1 + Type + S32 + Value + 64 + + RenderResolutionDivisor + + Comment + Divisor for rendering 3D scene at reduced resolution. + Persist + 1 + Type + U32 + Value + 1 + + RenderShaderLightingMaxLevel + + Comment + Max lighting level to use in the shader (class 3 is default, 2 is less lights, 1 is sun/moon only. Works around shader compiler bugs on certain platforms.) + Persist + 1 + Type + S32 + Value + 3 + + RenderShaderLODThreshold + + Comment + Fraction of draw distance defining the switch to a different shader LOD + Persist + 1 + Type + F32 + Value + 1.0 + + RenderShaderParticleThreshold + + Comment + Fraction of draw distance to not use shader on particles + Persist + 1 + Type + F32 + Value + 0.25 + + RenderSunDynamicRange + + Comment + Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ). + Persist + 1 + Type + F32 + Value + 1.0 + + RenderTerrainDetail + + Comment + Detail applied to terrain texturing (0 = none, 1 or 2 = full) + Persist + 1 + Type + S32 + Value + 2 + + RenderTerrainLODFactor + + Comment + Controls level of detail of terrain (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderTerrainScale + + Comment + Terrain detail texture scale + Persist + 1 + Type + F32 + Value + 12.0 + + RenderTextureMemoryMultiple + + Comment + Multiple of texture memory value to use (should fit: 0 < value <= 1.0) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderTreeLODFactor + + Comment + Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 0.5 + + RenderUIInSnapshot + + Comment + Display user interface in snapshot + Persist + 1 + Type + Boolean + Value + 0 + + RenderUnloadedAvatar + + Comment + Show avatars which haven't finished loading + Persist + 1 + Type + Boolean + Value + 0 + + RenderUseFBO + + Comment + Whether we want to use GL_EXT_framebuffer_objects. + Persist + 1 + Type + Boolean + Value + 0 + + RenderUseFarClip + + Comment + If false, frustum culling will ignore far clip plane. + Persist + 1 + Type + Boolean + Value + 1 + + RenderUseImpostors + + Comment + Whether we want to use impostors for far away avatars. + Persist + 1 + Type + Boolean + Value + 1 + + RenderUseShaderLOD + + Comment + Whether we want to have different shaders for LOD + Persist + 1 + Type + Boolean + Value + 1 + + RenderUseShaderNearParticles + + Comment + Whether we want to use shaders on near particles + Persist + 1 + Type + Boolean + Value + 0 + + RenderVBOEnable + + Comment + Use GL Vertex Buffer Objects + Persist + 1 + Type + Boolean + Value + 1 + + RenderVBOMappingDisable + + Comment + Disable VBO glMapBufferARB + Persist + 1 + Type + Boolean + Value + 1 + + RenderVolumeLODFactor + + Comment + Controls level of detail of primitives (multiplier for current screen area when calculated level of detail) + Persist + 1 + Type + F32 + Value + 1.0 + + RenderWater + + Comment + Display water + Persist + 1 + Type + Boolean + Value + 1 + + RenderWaterMipNormal + + Comment + Use mip maps for water normal map. + Persist + 1 + Type + Boolean + Value + 1 + + RenderWaterRefResolution + + Comment + Water planar reflection resolution. + Persist + 1 + Type + S32 + Value + 512 + + RenderWaterReflections + + Comment + Reflect the environment in the water. + Persist + 1 + Type + Boolean + Value + 0 + + RenderWaterVoidCulling + + Comment + Cull void water objects when off-screen. + Persist + 1 + Type + Boolean + Value + 1 + + RotateRight + + Comment + Make the agent rotate to its right. + Persist + 1 + Type + Boolean + Value + 0 + + RotationStep + + Comment + All rotations via rotation tool are constrained to multiples of this unit (degrees) + Persist + 1 + Type + F32 + Value + 1.0 + + RunBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + RunMultipleThreads + + Comment + If TRUE keep background threads active during render + Persist + 1 + Type + Boolean + Value + 1 + + SafeMode + + Comment + Reset preferences, run in safe mode. + Persist + 1 + Type + Boolean + Value + 0 + + SaveInventoryScriptsAsMono + + Comment + When editing and saving a script in inventory, configure it to compile as mono when dragged into a task + Persist + 1 + Type + Boolean + Value + 0 + + SaveMinidump + + Comment + Save minidump for developer debugging on crash + Persist + 1 + Type + Boolean + Value + 1 + + ShowMapDestinationInChat + + Comment + Show llMapDestination as slurl in chat + Persist + 1 + Type + Boolean + Value + 0 + + DisableScriptTeleportRequest + + Comment + Don't allow scripts to pop the map + Persist + 1 + Type + Boolean + Value + 0 + + DisableClickSit + + Comment + Never sit by clicking a prim + Persist + 1 + Type + Boolean + Value + 0 + + PlayIMSound + + Comment + Play sound when receiving an IM + Persist + 1 + Type + Boolean + Value + 1 + + IMSoundID + + Comment + UUID of sound to play if PlayIMSound enabled + Persist + 1 + Type + String + Value + 4c366008-65da-2e84-9b74-f58a392b94c6 + + OpenIMOnTyping + + Comment + Open IM tab when typing message received + Persist + 1 + Type + Boolean + Value + 1 + + EnableGestures + + Comment + Enables gestures + Persist + 1 + Type + Boolean + Value + 1 + + DisableAgentUpdates + + Comment + Stops regular agent updates + Persist + 0 + Type + Boolean + Value + 0 + + ScaleShowAxes + + Comment + Show indicator of selected scale axis when scaling + Persist + 1 + Type + Boolean + Value + 0 + + RectangleSelectOverlap + + Comment + Selection box works as long as it remotely touches or something + Persist + 0 + Type + Boolean + Value + 0 + + InterceptorAffectYours + + Comment + Controls whether the interceptor stops your own objects too + Persist + 1 + Type + Boolean + Value + 0 + + InterceptorRange + + Comment + Controls the range of the interceptor effect + Persist + 1 + Type + F32 + Value + 10.0 + + ScaleStretchTextures + + Comment + Stretch textures along with object when scaling + Persist + 1 + Type + Boolean + Value + 1 + + ScaleUniform + + Comment + Scale selected objects evenly about center of selection + Persist + 1 + Type + Boolean + Value + 0 + + ScriptErrorColor + + Comment + Color of script error messages + Persist + 1 + Type + Color4 + Value + + 0.8235294117 + 0.2745098039 + 0.2745098039 + 1.0 + + + ScriptErrorsAsChat + + Comment + Display script errors and warning in chat history + Persist + 1 + Type + Boolean + Value + 0 + + ScriptHelpFollowsCursor + + Comment + Scripting help window updates contents based on script editor contents under text cursor + Persist + 1 + Type + Boolean + Value + 0 + + SearchURLDefault + + Comment + URL to load for empty searches + Persist + 1 + HideFromEditor + 1 + Type + String + Value + http://search.secondlife.com/client_search.php? + + SearchURLDefaultOpenSim + + Comment + URL to load for empty OpenSim searches + Persist + 1 + HideFromEditor + 0 + Type + String + Value + http://webi.metaverseink.com/opensim/results.jsp? + + SearchURLQuery + + Comment + URL to use for searches + Persist + 1 + HideFromEditor + 1 + Type + String + Value + http://search.secondlife.com/client_search.php?q=[QUERY]&s=[COLLECTION]& + + SearchURLSuffix2 + + Comment + Parameters added to end of search queries + Persist + 1 + HideFromEditor + 1 + Type + String + Value + lang=[LANG]&mat=[MATURITY]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION] + + SelectMovableOnly + + Comment + Select only objects you can move + Persist + 1 + Type + Boolean + Value + 0 + + SelectOwnedOnly + + Comment + Select only objects you own + Persist + 1 + Type + Boolean + Value + 0 + + SelectionHighlightAlpha + + Comment + Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque) + Persist + 1 + Type + F32 + Value + 0.40000000596 + + SelectionHighlightAlphaTest + + Comment + Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels) + Persist + 1 + Type + F32 + Value + 0.1 + + SelectionHighlightThickness + + Comment + Thickness of selection highlight line (fraction of view distance) + Persist + 1 + Type + F32 + Value + 0.00999999977648 + + SelectionHighlightUAnim + + Comment + Rate at which texture animates along U direction in selection highlight line (fraction of texture per second) + Persist + 1 + Type + F32 + Value + 0.0 + + SelectionHighlightUScale + + Comment + Scale of texture display on selection highlight line (fraction of texture size) + Persist + 1 + Type + F32 + Value + 0.1 + + SelectionHighlightVAnim + + Comment + Rate at which texture animates along V direction in selection highlight line (fraction of texture per second) + Persist + 1 + Type + F32 + Value + 0.5 + + SelectionHighlightVScale + + Comment + Scale of texture display on selection highlight line (fraction of texture size) + Persist + 1 + Type + F32 + Value + 1.0 + + ServerChoice + + Comment + [DO NOT MODIFY] Controls which grid you connect to + Persist + 1 + Type + S32 + Value + 0 + + ShareWithGroup + + Comment + Newly created objects are shared with the currently active group + Persist + 1 + Type + Boolean + Value + 0 + + ShowActiveSpeakers + + Comment + Display active speakers list on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowAllObjectHoverTip + + Comment + Show descriptive tooltip when mouse hovers over non-interactive and interactive objects. + Persist + 1 + Type + Boolean + Value + 0 + + ShowAxes + + Comment + Render coordinate frame at your position + Persist + 1 + Type + Boolean + Value + 0 + + ShowBanLines + + Comment + Show in-world ban/access borders + Persist + 1 + Type + Boolean + Value + 1 + + ShowCameraControls + + Comment + Display camera controls on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowChatHistory + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowCommunicate + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowConsoleWindow + + Comment + Show log in separate OS window + Persist + 1 + Type + Boolean + Value + 0 + + ShowCrosshairs + + Comment + Display crosshairs when in mouselook mode + Persist + 1 + Type + Boolean + Value + 1 + + ShowDebugConsole + + Comment + Show log in SL window + Persist + 1 + Type + Boolean + Value + 0 + + ShowDebugStats + + Comment + Show performance stats display + Persist + 1 + Type + Boolean + Value + 0 + + ShowDirectory + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowEmptyFoldersWhenSearching + + Comment + Shows folders that do not have any visible contents when applying a filter to inventory + Persist + 1 + Type + Boolean + Value + 0 + + ShowHoverTips + + Comment + Show descriptive tooltip when mouse hovers over items in world + Persist + 1 + Type + Boolean + Value + 1 + + ShowInventory + + Comment + Open inventory window on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowLandHoverTip + + Comment + Show descriptive tooltip when mouse hovers over land + Persist + 1 + Type + Boolean + Value + 0 + + ShowLeaders + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowPGSearchAll + + Comment + Display results of search All that are flagged as PG + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureSearchAll + + Comment + Display results of search All that are flagged as mature + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultSearchAll + + Comment + Display results of search All that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGGroups + + Comment + Display results of find groups that are flagged as PG + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureGroups + + Comment + Display results of find groups that are flagged as mature + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultGroups + + Comment + Display results of find groups that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGClassifieds + + Comment + Display results of find classifieds that are flagged as PG + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureClassifieds + + Comment + Display results of find classifieds that are flagged as mature + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultClassifieds + + Comment + Display results of find classifieds that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGEvents + + Comment + Display results of find events that are flagged as PG + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureEvents + + Comment + Display results of find events that are flagged as mature + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultEvents + + Comment + Display results of find events that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGLand + + Comment + Display results of find land sales that are flagged as PG + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureLand + + Comment + Display results of find land sales that are flagged as mature + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultLand + + Comment + Display results of find land sales that are flagged as adult + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowPGSims + + Comment + Display results of find places or find popular that are in PG sims + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 1 + + ShowMatureSims + + Comment + Display results of find places or find popular that are in mature sims + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowAdultSims + + Comment + Display results of find places or find popular that are in adult sims + Persist + 1 + HideFromEditor + 1 + Type + Boolean + Value + 0 + + ShowMiniMap + + Comment + Display mini map on login + Persist + 1 + Type + Boolean + Value + 1 + + ShowMovementControls + + Comment + Display movement controls on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowNearClip + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowNewInventory + + Comment + Automatically views new notecards/textures/landmarks + Persist + 1 + Type + Boolean + Value + 1 + + ShowInInventory + + Comment + Automatically opens inventory to show accepted objects + Persist + 1 + Type + Boolean + Value + 1 + + ShowObjectUpdates + + Comment + Show when update messages are received for individual objects + Persist + 0 + Type + Boolean + Value + 0 + + ShowOverlayTitle + + Comment + Prints watermark text message on screen + Persist + 1 + Type + Boolean + Value + 0 + + ShowParcelOwners + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowPermissions + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowPropertyLines + + Comment + Show line overlay demarking property boundaries + Persist + 1 + Type + Boolean + Value + 0 + + ShowSearchBar + + Comment + Show the Search Bar in the Status Overlay + Persist + 1 + Type + Boolean + Value + 0 + + ShowStartLocation + + Comment + Display starting location menu on login screen + Persist + 1 + Type + Boolean + Value + 1 + + ShowTangentBasis + + Comment + Render normal and binormal (debugging bump mapping) + Persist + 1 + Type + Boolean + Value + 0 + + ShowToolBar + + Comment + Show toolbar at bottom of screen + Persist + 1 + Type + Boolean + Value + 1 + + ShowTools + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + ShowTutorial + + Comment + Show tutorial window on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowVoiceChannelPopup + + Comment + Controls visibility of the current voice channel popup above the voice tab + Persist + 1 + Type + Boolean + Value + 0 + + ShowVolumeSettingsPopup + + Comment + Show individual volume slider for voice, sound effects, etc + Persist + 1 + Type + Boolean + Value + 0 + + ShowWorldMap + + Comment + Display world map on login + Persist + 1 + Type + Boolean + Value + 0 + + ShowXUINames + + Comment + Display XUI Names as Tooltips + Persist + 0 + Type + Boolean + Value + 0 + + SitBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + SkyAmbientScale + + Comment + Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level) + Persist + 1 + Type + F32 + Value + 0.300000011921 + + SkyEditPresets + + Comment + Whether to be able to edit the sky defaults or not + Persist + 1 + Type + Boolean + Value + 0 + + SkyNightColorShift + + Comment + Controls moonlight color (base color applied to moon as light source) + Persist + 1 + Type + Color3 + Value + + 0.699999988079 + 0.699999988079 + 1.0 + + + SkyOverrideSimSunPosition + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + SkySunDefaultPosition + + Comment + Default position of sun in sky (direction in world coordinates) + Persist + 1 + Type + Vector3 + Value + + 1.0 + 0.0 + 0.1 + + + SkyUseClassicClouds + + Comment + Whether to use the old Second Life particle clouds or not + Persist + 1 + Type + Boolean + Value + 1 + + SlideLeftBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 20 + 54 + 45 + 29 + + + SlideRightBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 66 + 54 + 91 + 29 + + + SmallAvatarNames + + Comment + Display avatar name text in smaller font + Persist + 1 + Type + Boolean + Value + 1 + + SnapEnabled + + Comment + Enable snapping to grid + Persist + 1 + Type + Boolean + Value + 1 + + SnapMargin + + Comment + Controls maximum distance between windows before they auto-snap together (pixels) + Persist + 1 + Type + S32 + Value + 10 + + SnapToMouseCursor + + Comment + When snapping to grid, center object on nearest grid point to mouse cursor + Persist + 1 + Type + Boolean + Value + 0 + + SnapshotFormat + + Comment + Save snapshots in this format (0 = PNG, 1 = JPEG, 2 = BMP) + Persist + 1 + Type + S32 + Value + 0 + + SnapshotLocalLastResolution + + Comment + Take next local snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + + SnapshotPostcardLastResolution + + Comment + Take next postcard snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + + SnapshotQuality + + Comment + Quality setting of postcard JPEGs (0 = worst, 100 = best) + Persist + 1 + Type + S32 + Value + 75 + + SnapshotTextureLastResolution + + Comment + Take next texture snapshot at this resolution + Persist + 1 + Type + S32 + Value + 0 + + SpeakingColor + + Comment + Color of various indicators when resident is speaking on a voice channel. + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.0 + 1.0 + + + SpeedTest + + Comment + Performance testing mode, no network + Persist + 1 + Type + Boolean + Value + 0 + + StatsAutoRun + + Comment + Play back autopilot + Persist + 1 + Type + Boolean + Value + 0 + + StatsFile + + Comment + Filename for stats logging output + Persist + 1 + Type + String + Value + fs.txt + + StatsNumRuns + + Comment + Loop autopilot playback this number of times + Persist + 1 + Type + S32 + Value + -1 + + StatsPilotFile + + Comment + Filename for stats logging autopilot path + Persist + 1 + Type + String + Value + pilot.txt + + StatsQuitAfterRuns + + Comment + Quit application after this number of autopilot playback runs + Persist + 1 + Type + Boolean + Value + 0 + + StatsSessionTrackFrameStats + + Comment + Track rendering and network statistics + Persist + 1 + Type + Boolean + Value + 0 + + StatsSummaryFile + + Comment + Filename for stats logging summary + Persist + 1 + Type + String + Value + fss.txt + + StatusBarHeight + + Comment + Height of menu/status bar at top of screen (pixels) + Persist + 1 + Type + S32 + Value + 26 + + StatusBarPad + + Comment + Spacing between popup buttons at bottom of screen (Stand up, Release Controls) + Persist + 1 + Type + S32 + Value + 10 + + SystemLanguage + + Comment + Language indicated by system settings (for UI) + Persist + 1 + Type + String + Value + en-us + + TabToTextFieldsOnly + + Comment + TAB key takes you to next text entry field, instead of next widget + Persist + 1 + Type + Boolean + Value + 0 + + TemporaryUpload + + Comment + Whether or not a upload is temporary + Persist + 0 + Type + Boolean + Value + 0 + + TerrainColorHeightRange + + Comment + Altitude range over which a given terrain texture has effect (meters) + Persist + 1 + Type + F32 + Value + 60.0 + + TerrainColorStartHeight + + Comment + Starting altitude for terrain texturing (meters) + Persist + 1 + Type + F32 + Value + 20.0 + + TextureMemory + + Comment + Amount of memory to use for textures in MB (0 = autodetect) + Persist + 1 + Type + S32 + Value + 0 + + TexturePickerRect + + Comment + Rectangle for texture picker + Persist + 1 + Type + Rect + Value + + 0 + 290 + 350 + 0 + + + TexturePickerShowFolders + + Comment + Show folders with no texures in texture picker + Persist + 1 + Type + Boolean + Value + 1 + + TexturePickerSortOrder + + Comment + Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 2 + + ThirdPersonBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + + ThrottleBandwidthKBPS + + Comment + Maximum allowable downstream bandwidth (kilo bits per second) + Persist + 1 + Type + F32 + Value + 2000.0 + + ToolHelpRect + + Comment + + Persist + 0 + Type + Rect + Value + + 8 + 178 + 75 + 162 + + + ToolTipDelay + + Comment + Seconds before displaying tooltip when mouse stops over UI element + Persist + 1 + Type + F32 + Value + 0.699999988079 + + ToolboxAutoMove + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + + ToolboxRect + + Comment + Rectangle for tools window + Persist + 1 + Type + Rect + Value + + 0 + 100 + 100 + 100 + + + TrackFocusObject + + Comment + Camera tracks last object zoomed on + Persist + 1 + Type + Boolean + Value + 1 + + TurnLeftBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 20 + 29 + 45 + 4 + + + TurnRightBtnRect + + Comment + + Persist + 0 + Type + Rect + Value + + 66 + 29 + 91 + 4 + + + TutorialURL + + Comment + URL for tutorial menu item, set automatically during login + Persist + 0 + Type + String + Value + + + TypeAheadTimeout + + Comment + Time delay before clearing type-ahead buffer in lists (seconds) + Persist + 1 + Type + F32 + Value + 1.5 + + UIAutoScale + + Comment + Keep UI scale consistent across different resolutions + Persist + 1 + Type + Boolean + Value + 1 + + UIFloaterTestBool + + Comment + Example saved setting for the test floater + Persist + 1 + Type + Boolean + Value + 0 + + UIImgBtnCloseActiveUUID + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + + UIImgBtnCloseInactiveUUID + + Comment + + Persist + 0 + Type + String + Value + 779e4fa3-9b13-f74a-fba9-3886fe9c86ba + + UIImgBtnClosePressedUUID + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + + UIImgBtnForwardInUUID + + Comment + + Persist + 0 + Type + String + Value + 54197a61-f5d1-4c29-95d2-c071d08849cb + + UIImgBtnForwardOutUUID + + Comment + + Persist + 0 + Type + String + Value + a0eb4021-1b20-4a53-892d-8faa9265a6f5 + + UIImgBtnJumpLeftInUUID + + Comment + + Persist + 0 + Type + String + Value + 9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1 + + UIImgBtnJumpLeftOutUUID + + Comment + + Persist + 0 + Type + String + Value + 3c18c87e-5f50-14e2-e744-f44734aa365f + + UIImgBtnJumpRightInUUID + + Comment + + Persist + 0 + Type + String + Value + 7dabc040-ec13-2309-ddf7-4f161f6de2f4 + + UIImgBtnJumpRightOutUUID + + Comment + + Persist + 0 + Type + String + Value + ff9a71eb-7414-4cf8-866e-a701deb7c3cf + + UIImgBtnLeftInUUID + + Comment + + Persist + 0 + Type + String + Value + 95463c78-aaa6-464d-892d-3a805b6bb7bf + + UIImgBtnLeftOutUUID + + Comment + + Persist + 0 + Type + String + Value + 13a93910-6b44-45eb-ad3a-4d1324c59bac + + UIImgBtnMinimizeActiveUUID + + Comment + + Persist + 0 + Type + String + Value + 34c9398d-bb78-4643-9633-46a2fa3e9637 + + UIImgBtnMinimizeInactiveUUID + + Comment + + Persist + 0 + Type + String + Value + 6e72abba-1378-437f-bf7a-f0c15f3e99a3 + + UIImgBtnMinimizePressedUUID + + Comment + + Persist + 0 + Type + String + Value + 39801651-26cb-4926-af57-7af9352c273c + + UIImgBtnMoveDownInUUID + + Comment + + Persist + 0 + Type + String + Value + b92a70b9-c841-4c94-b4b3-cee9eb460d48 + + UIImgBtnMoveDownOutUUID + + Comment + + Persist + 0 + Type + String + Value + b5abc9fa-9e62-4e03-bc33-82c4c1b6b689 + + UIImgBtnMoveUpInUUID + + Comment + + Persist + 0 + Type + String + Value + 49b4b357-e430-4b56-b9e0-05b8759c3c82 + + UIImgBtnMoveUpOutUUID + + Comment + + Persist + 0 + Type + String + Value + f887146d-829f-4e39-9211-cf872b78f97c + + UIImgBtnPanDownInUUID + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + + UIImgBtnPanDownOutUUID + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + + UIImgBtnPanLeftInUUID + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + + UIImgBtnPanLeftOutUUID + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + + UIImgBtnPanRightInUUID + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + + UIImgBtnPanRightOutUUID + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + + UIImgBtnPanUpInUUID + + Comment + + Persist + 0 + Type + String + Value + e5821134-23c0-4bd0-af06-7fa95b9fb01a + + UIImgBtnPanUpOutUUID + + Comment + + Persist + 0 + Type + String + Value + 47a8c844-cd2a-4b1a-be01-df8b1612fe5d + + UIImgBtnRestoreActiveUUID + + Comment + + Persist + 0 + Type + String + Value + 111b39de-8928-4690-b7b2-e17d5c960277 + + UIImgBtnRestoreInactiveUUID + + Comment + + Persist + 0 + Type + String + Value + 0eafa471-70af-4882-b8c1-40a310929744 + + UIImgBtnRestorePressedUUID + + Comment + + Persist + 0 + Type + String + Value + 90a0ed5c-2e7b-4845-9958-a64a1b30f312 + + UIImgBtnRightInUUID + + Comment + + Persist + 0 + Type + String + Value + 5e616d0d-4335-476f-9977-560bccd009da + + UIImgBtnRightOutUUID + + Comment + + Persist + 0 + Type + String + Value + 5a44fd04-f52b-4c30-8b00-4a31e27614bd + + UIImgBtnScrollDownInUUID + + Comment + + Persist + 0 + Type + String + Value + d2421bab-2eaf-4863-b8f6-5e4c52519247 + + UIImgBtnScrollDownOutUUID + + Comment + + Persist + 0 + Type + String + Value + b4ecdecf-5c8d-44e7-b882-17a77e88ed55 + + UIImgBtnScrollLeftInUUID + + Comment + + Persist + 0 + Type + String + Value + ea137a32-6718-4d05-9c22-7d570d27b2cd + + UIImgBtnScrollLeftOutUUID + + Comment + + Persist + 0 + Type + String + Value + 43773e8d-49aa-48e0-80f3-a04715f4677a + + UIImgBtnScrollRightInUUID + + Comment + + Persist + 0 + Type + String + Value + b749de64-e903-4c3c-ac0b-25fb6fa39cb5 + + UIImgBtnScrollRightOutUUID + + Comment + + Persist + 0 + Type + String + Value + 3d700d19-e708-465d-87f2-46c8c0ee7938 + + UIImgBtnScrollUpInUUID + + Comment + + Persist + 0 + Type + String + Value + a93abdf3-27b5-4e22-a8fa-c48216cd2e3a + + UIImgBtnScrollUpOutUUID + + Comment + + Persist + 0 + Type + String + Value + dad084d7-9a46-452a-b0ff-4b9f1cefdde9 + + UIImgBtnSlideLeftInUUID + + Comment + + Persist + 0 + Type + String + Value + 724996f5-b956-46f6-9844-4fcfce1d5e83 + + UIImgBtnSlideLeftOutUUID + + Comment + + Persist + 0 + Type + String + Value + 82476321-0374-4c26-9567-521535ab4cd7 + + UIImgBtnSlideRightInUUID + + Comment + + Persist + 0 + Type + String + Value + 7eeb57d2-3f37-454d-a729-8b217b8be443 + + UIImgBtnSlideRightOutUUID + + Comment + + Persist + 0 + Type + String + Value + 1fbe4e60-0607-44d1-a50a-032eff56ae75 + + UIImgBtnSpinDownInUUID + + Comment + + Persist + 0 + Type + String + Value + a985ac71-052f-48e6-9c33-d931c813ac92 + + UIImgBtnSpinDownOutUUID + + Comment + + Persist + 0 + Type + String + Value + b6d240dd-5602-426f-b606-bbb49a30726d + + UIImgBtnSpinUpInUUID + + Comment + + Persist + 0 + Type + String + Value + c8450082-96a0-4319-8090-d3ff900b4954 + + UIImgBtnSpinUpOutUUID + + Comment + + Persist + 0 + Type + String + Value + 56576e6e-6710-4e66-89f9-471b59122794 + + UIImgBtnTabBottomInUUID + + Comment + + Persist + 0 + Type + String + Value + c001d8fd-a869-4b6f-86a1-fdcb106df9c7 + + UIImgBtnTabBottomOutUUID + + Comment + + Persist + 0 + Type + String + Value + bf0a8779-689b-48c3-bb9a-6af546366ef4 + + UIImgBtnTabBottomPartialInUUID + + Comment + + Persist + 0 + Type + String + Value + eb0b0904-8c91-4f24-b500-1180b91140de + + UIImgBtnTabBottomPartialOutUUID + + Comment + + Persist + 0 + Type + String + Value + 8dca716c-b29c-403a-9886-91c028357d6e + + UIImgBtnTabTopInUUID + + Comment + + Persist + 0 + Type + String + Value + 16d032e8-817b-4368-8a4e-b7b947ae3889 + + UIImgBtnTabTopOutUUID + + Comment + + Persist + 0 + Type + String + Value + 1ed83f57-41cf-4052-a3b4-2e8bb78d8191 + + UIImgBtnTabTopPartialInUUID + + Comment + + Persist + 0 + Type + String + Value + 7c6c6c26-0e25-4438-89bd-30d8b8e9d704 + + UIImgBtnTabTopPartialOutUUID + + Comment + + Persist + 0 + Type + String + Value + 932ad585-0e45-4a57-aa23-4cf81beeb7b0 + + UIImgBtnTearOffActiveUUID + + Comment + + Persist + 0 + Type + String + Value + 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 + + UIImgBtnTearOffInactiveUUID + + Comment + + Persist + 0 + Type + String + Value + 74e1a96f-4833-a24d-a1bb-1bce1468b0e7 + + UIImgBtnTearOffPressedUUID + + Comment + + Persist + 0 + Type + String + Value + d2524c13-4ba6-af7c-e305-8ac6cc18d86a + + UIImgCheckboxActiveSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + cf4a2ed7-1533-4686-9dde-df9a37ddca55 + + UIImgCheckboxActiveUUID + + Comment + + Persist + 0 + Type + String + Value + 05bb64ee-96fd-4243-b74e-f40a41bc53ba + + UIImgCheckboxInactiveSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + c817c642-9abd-4236-9287-ae0513fe7d2b + + UIImgCheckboxInactiveUUID + + Comment + + Persist + 0 + Type + String + Value + 7d94cb59-32a2-49bf-a516-9e5a2045f9d9 + + UIImgCreateSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + 0098b015-3daf-4cfe-a72f-915369ea97c2 + + UIImgCreateUUID + + Comment + + Persist + 0 + Type + String + Value + 7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b + + UIImgCrosshairsUUID + + Comment + Image to use for crosshair display (UUID texture reference) + Persist + 1 + Type + String + Value + 6e1a3980-bf2d-4274-8970-91e60d85fb52 + + UIImgDefaultEyesUUID + + Comment + + Persist + 0 + Type + String + Value + 6522e74d-1660-4e7f-b601-6f48c1659a77 + + UIImgDefaultGlovesUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultHairUUID + + Comment + + Persist + 0 + Type + String + Value + 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b + + UIImgDefaultJacketUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultPantsUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultShirtUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultShoesUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultSkirtUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultSocksUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultAlphaUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultAlphaUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultAlphaUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDefaultUnderwearUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgDirectionArrowUUID + + Comment + + Persist + 0 + Type + String + Value + 586383e8-4d9b-4fba-9196-2b5938e79c2c + + UIImgFaceSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + b4870163-6208-42a9-9801-93133bf9a6cd + + UIImgFaceUUID + + Comment + + Persist + 0 + Type + String + Value + ce15fd63-b0b6-463c-a37d-ea6393208b3e + + UIImgFocusSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + ab6a730e-ddfd-4982-9a32-c6de3de6d31d + + UIImgFocusUUID + + Comment + + Persist + 0 + Type + String + Value + 57bc39d1-288c-4519-aea6-6d1786a5c274 + + UIImgGrabSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + c1e21504-f136-451d-b8e9-929037812f1d + + UIImgGrabUUID + + Comment + + Persist + 0 + Type + String + Value + c63f124c-6340-4fbf-b59e-0869a44adb64 + + UIImgMoveSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + 46f17c7b-8381-48c3-b628-6a406e060dd6 + + UIImgMoveUUID + + Comment + + Persist + 0 + Type + String + Value + 2fa5dc06-bcdd-4e09-a426-f9f262d4fa65 + + UIImgRadioActiveSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + 52f09e07-5816-4052-953c-94c6c10479b7 + + UIImgRadioActiveUUID + + Comment + + Persist + 0 + Type + String + Value + 7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f + + UIImgRadioInactiveSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + 1975db39-aa29-4251-aea0-409ac09d414d + + UIImgRadioInactiveUUID + + Comment + + Persist + 0 + Type + String + Value + 90688481-67ff-4af0-be69-4aa084bcad1e + + UIImgResizeBottomRightUUID + + Comment + + Persist + 0 + Type + String + Value + e3690e25-9690-4f6c-a745-e7dcd885285a + + UIImgRotateSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + cdfb7fde-0d13-418a-9d89-2bd91019fc95 + + UIImgRotateUUID + + Comment + + Persist + 0 + Type + String + Value + c34b1eaa-aae3-4351-b082-e26c0b636779 + + UIImgScaleSelectedUUID + + Comment + + Persist + 0 + Type + String + Value + 55aa57ef-508a-47f7-8867-85d21c5a810d + + UIImgScaleUUID + + Comment + + Persist + 0 + Type + String + Value + 88a90fef-b448-4883-9344-ecf378a60433 + + UIImgWhiteUUID + + Comment + + Persist + 0 + Type + String + Value + 5748decc-f629-461c-9a36-a35a221fe21f + + UIImgInvisibleUUID + + Comment + + Persist + 0 + Type + String + Value + 38b86f85-2575-52a9-a531-23108d8da837 + + UIScaleFactor + + Comment + Size of UI relative to default layout on 1024x768 screen + Persist + 1 + Type + F32 + Value + 1.0 + + UploadBakedTexOld + + Comment + Forces the baked texture pipeline to upload using the old method. + Persist + 1 + Type + Boolean + Value + 0 + + UseAltKeyForMenus + + Comment + Access menus via keyboard by tapping Alt + Persist + 1 + Type + Boolean + Value + 0 + + UseChatBubbles + + Comment + Show chat above avatars head in chat bubbles + Persist + 1 + Type + Boolean + Value + 0 + + UseDebugMenus + + Comment + Turns on "Debug" menu + Persist + 1 + Type + Boolean + Value + 1 + + UseDefaultColorPicker + + Comment + Use color picker supplied by operating system + Persist + 1 + Type + Boolean + Value + 0 + + UseEnergy + + Comment + + Persist + 0 + Type + Boolean + Value + 1 + + UseExternalBrowser + + Comment + Use default browser when opening web pages instead of in-world browser. + Persist + 1 + Type + Boolean + Value + 0 + + UseFreezeFrame + + Comment + Freeze time when taking snapshots. + Persist + 1 + Type + Boolean + Value + 0 + + UseInventoryLinks + + Comment + When making a new outfit, use links for no-copy items + Persist + 1 + Type + Boolean + Value + 1 + + UseOcclusion + + Comment + Enable object culling based on occlusion (coverage) by other objects + Persist + 1 + Type + Boolean + Value + 1 + + SkipReflectOcclusionUpdates + + Comment + Enable optimization that prevents occlusion updates for refelction pass + Persist + 1 + Type + Boolean + Value + 1 + + UseOutfitFolders + + Comment + When making a new outfit, use Viewer 2 outfit folders + Persist + 1 + Type + Boolean + Value + 1 + + RenderDelayVBUpdate + + Comment + Delay vertex buffer updates until just before rendering + Persist + 1 + Type + Boolean + Value + 1 + + UseNewWalkRun + + Comment + Replace standard walk/run animations with new ones. + Persist + 1 + Type + Boolean + Value + 1 + + UseCrossWalkRun + + Comment + Use opposite gender walk/run animations. + Persist + 1 + Type + Boolean + Value + 0 + + UseStartScreen + + Comment + Whether to load a start screen image or not. + Persist + 1 + Type + Boolean + Value + 1 + + UseWebPagesOnPrims + + Comment + [NOT USED] + Persist + 1 + Type + Boolean + Value + 0 + + UserConnectionPort + + Comment + Port that this client transmits on. + Persist + 1 + Type + U32 + Value + 0 + + UserLogFile + + Comment + User specified log file name. + Persist + 1 + Type + String + Value + + + UserLoginInfo + + Comment + Users loging data. + Persist + 1 + Type + LLSD + Value + + + + VFSOldSize + + Comment + [DO NOT MODIFY] Controls resizing of local file cache + Persist + 1 + Type + U32 + Value + 0 + + VFSSalt + + Comment + [DO NOT MODIFY] Controls local file caching behavior + Persist + 1 + Type + U32 + Value + 1 + + VectorizeEnable + + Comment + Enable general vector operations and data alignment. + Persist + 1 + Type + Boolean + Value + 1 + + VectorizePerfTest + + Comment + Test SSE/vectorization performance and choose fastest version. + Persist + 1 + Type + Boolean + Value + 1 + + VectorizeProcessor + + Comment + 0=Compiler Default, 1=SSE, 2=SSE2, autodetected + Persist + 0 + Type + U32 + Value + 0 + + VectorizeSkin + + Comment + Enable vector operations for avatar skinning. + Persist + 1 + Type + Boolean + Value + 1 + + VelocityInterpolate + + Comment + Extrapolate object motion from last packet based on received velocity + Persist + 1 + Type + Boolean + Value + 1 + + VerboseLogs + + Comment + Display source file and line number for each log item for debugging purposes + Persist + 1 + Type + Boolean + Value + 0 + + VersionChannelName + + Comment + Versioning Channel Name. + Persist + 1 + Type + String + Value + Ascent Viewer Release + + VertexShaderEnable + + Comment + Enable/disable all GLSL shaders (debug) + Persist + 1 + Type + Boolean + Value + 0 + + VivoxAutoPostCrashDumps + + Comment + If true, SLVoice will automatically send crash dumps directly to Vivox. + Persist + 1 + Type + Boolean + Value + 0 + + VivoxDebugLevel + + Comment + Logging level to use when launching the vivox daemon + Persist + 1 + Type + String + Value + -1 + + VivoxDebugSIPURIHostName + + Comment + Hostname portion of vivox SIP URIs (empty string for the default). + Persist + 1 + Type + String + Value + + + VivoxDebugVoiceAccountServerURI + + Comment + URI to the vivox account management server (empty string for the default). + Persist + 1 + Type + String + Value + + + VoiceCallsFriendsOnly + + Comment + Only accept voice calls from residents on your friends list + Persist + 1 + Type + Boolean + Value + 0 + + AutoDisengageMic + + Comment + Automatically turn off the microphone when ending IM calls. + Persist + 1 + Type + Boolean + Value + 1 + + VoiceEarLocation + + Comment + Location of the virtual ear for voice + Persist + 1 + Type + S32 + Value + 0 + + VoiceHost + + Comment + Client SLVoice host to connect to + Persist + 1 + Type + String + Value + 127.0.0.1 + + VoiceImageLevel0 + + Comment + Texture UUID for voice image level 0 + Persist + 1 + Type + String + Value + 041ee5a0-cb6a-9ac5-6e49-41e9320507d5 + + VoiceImageLevel1 + + Comment + Texture UUID for voice image level 1 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel2 + + Comment + Texture UUID for voice image level 2 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel3 + + Comment + Texture UUID for voice image level 3 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel4 + + Comment + Texture UUID for voice image level 4 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel5 + + Comment + Texture UUID for voice image level 5 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceImageLevel6 + + Comment + Texture UUID for voice image level 6 + Persist + 1 + Type + String + Value + 29de489d-0491-fb00-7dab-f9e686d31e83 + + VoiceInputAudioDevice + + Comment + Audio input device to use for voice + Persist + 1 + Type + String + Value + Default + + VoiceOutputAudioDevice + + Comment + Audio output device to use for voice + Persist + 1 + Type + String + Value + Default + + VoicePort + + Comment + Client SLVoice port to connect to + Persist + 1 + Type + U32 + Value + 44125 + + WLSkyDetail + + Comment + Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies. + Persist + 1 + Type + U32 + Value + 64 + + WarnAboutBadPCI + + Comment + Enables AboutBadPCI warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnAboutDirectX9 + + Comment + Enables AboutDirectX9 warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnAboutOldGraphicsDriver + + Comment + Enables AboutOldGraphicsDriver warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnAboutPCIGraphics + + Comment + Enables AboutPCIGraphics warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnBrowserLaunch + + Comment + Enables BrowserLaunch warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnDeedObject + + Comment + Enables DeedObject warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstAO + + Comment + Enables FirstAO warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstAppearance + + Comment + Enables FirstAppearance warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstAttach + + Comment + Enables FirstAttach warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstBalanceDecrease + + Comment + Enables FirstBalanceDecrease warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstBalanceIncrease + + Comment + Enables FirstBalanceIncrease warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstBuild + + Comment + Enables FirstBuild warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstDebugMenus + + Comment + Enables FirstDebugMenus warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstFlexible + + Comment + Enables FirstFlexible warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstGoTo + + Comment + Enables FirstGoTo warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstInventory + + Comment + Enables FirstInventory warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstLeftClickNoHit + + Comment + Enables FirstLeftClickNoHit warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstMap + + Comment + Enables FirstMap warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstMedia + + Comment + Enables FirstMedia warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstOverrideKeys + + Comment + Enables FirstOverrideKeys warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstSandbox + + Comment + Enables FirstSandbox warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstSculptedPrim + + Comment + Enables FirstSculptedPrim warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstSit + + Comment + Enables FirstSit warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstStreamingMusic + + Comment + Enables FirstStreamingMusic warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstStreamingVideo + + Comment + Enables FirstStreamingVideo warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstTeleport + + Comment + Enables FirstTeleport warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnFirstVoice + + Comment + Enables FirstVoice warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnNewClassified + + Comment + Enables NewClassified warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnQuickTimeInstalled + + Comment + Enables QuickTimeInstalled warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WarnReturnToOwner + + Comment + Enables ReturnToOwner warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + WatchdogEnabled + + Comment + Controls whether the thread watchdog timer is activated. + Persist + 0 + Type + Boolean + Value + 0 + + WaterEditPresets + + Comment + Whether to be able to edit the water defaults or not + Persist + 1 + Type + Boolean + Value + 0 + + WaterGLFogDensityScale + + Comment + Maps shader water fog density to gl fog density + Persist + 1 + Type + F32 + Value + 0.02 + + WaterGLFogDepthFloor + + Comment + Controls how dark water gl fog can get + Persist + 1 + Type + F32 + Value + 0.25 + + WaterGLFogDepthScale + + Comment + Controls how quickly gl fog gets dark under water + Persist + 1 + Type + F32 + Value + 50.0 + + WindLightUseAtmosShaders + + Comment + Whether to enable or disable WindLight atmospheric shaders. + Persist + 1 + Type + Boolean + Value + 1 + + WindowHeight + + Comment + SL viewer window height + Persist + 1 + Type + S32 + Value + 700 + + WindowMaximized + + Comment + SL viewer window maximized on login + Persist + 1 + Type + Boolean + Value + 0 + + WindowWidth + + Comment + SL viewer window width + Persist + 1 + Type + S32 + Value + 1000 + + WindowX + + Comment + X coordinate of lower left corner of SL viewer window, relative to primary display (pixels) + Persist + 1 + Type + S32 + Value + 10 + + WindowY + + Comment + Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels) + Persist + 1 + Type + S32 + Value + 10 + + WornItemsSortOrder + + Comment + Specifies sort key for worn inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top) + Persist + 1 + Type + U32 + Value + 7 + + XferThrottle + + Comment + Maximum allowable downstream bandwidth for asset transfers (bits per second) + Persist + 1 + Type + F32 + Value + 150000.0 + + YawFromMousePosition + + Comment + Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right) + Persist + 1 + Type + F32 + Value + 90.0 + + YieldTime + + Comment + Yield some time to the local host. + Persist + 1 + Type + S32 + Value + -1 + + ZoomDirect + + Comment + Map Joystick zoom axis directly to camera zoom. + Persist + 1 + Type + Boolean + Value + 0 + + ZoomTime + + Comment + Time of transition between different camera modes (seconds) + Persist + 1 + Type + F32 + Value + 0.40000000596 + + particlesbeacon + + Comment + Beacon / Highlight particle generators + Persist + 1 + Type + Boolean + Value + 0 + + physicalbeacon + + Comment + Beacon / Highlight physical objects + Persist + 1 + Type + Boolean + Value + 1 + + renderbeacons + + Comment + Beacon / Highlight particle generators + Persist + 1 + Type + Boolean + Value + 0 + + renderhighlights + + Comment + Beacon / Highlight scripted objects with touch function + Persist + 1 + Type + Boolean + Value + 1 + + renderattachment + + Comment + Render beacons for / Highlight attached objects as well + Persist + 1 + Type + Boolean + Value + 0 + + renderbyowner + + Comment + Render beacons/highlights for objects owned by anyone (0), you (1) or others (2) + Persist + 1 + Type + U32 + Value + 0 + + invisiblesoundsbeacon + + Comment + Beacon / Highlight invisible (non-object) sound generators + Persist + 1 + Type + Boolean + Value + 0 + + scriptsbeacon + + Comment + Beacon / Highlight scripted objects + Persist + 1 + Type + Boolean + Value + 0 + + scripttouchbeacon + + Comment + Beacon / Highlight scripted objects with touch function + Persist + 1 + Type + Boolean + Value + 1 + + soundsbeacon + + Comment + Beacon / Highlight sound generators + Persist + 1 + Type + Boolean + Value + 0 + + LogTextureDownloadsToViewerLog + + Comment + Send texture download details to the viewer log + Persist + 1 + Type + Boolean + Value + 0 + + LogTextureDownloadsToSimulator + + Comment + Send a digest of texture info to the sim + Persist + 1 + Type + Boolean + Value + 0 + + TextureLoggingThreshold + + Comment + Specifies the byte threshold at which texture download data should be sent to the sim. + Persist + 1 + Type + U32 + Value + 1 + + FloaterUploadRect + + Comment + Rectangle for Uploader + Persist + 1 + Type + Rect + Value + + 500 + 450 + 850 + 400 + + + FloaterContactRect + + Comment + Rectangle for Contact Group Manager + Persist + 1 + Type + Rect + Value + + 500 + 450 + 850 + 400 + + + ContactListCollapsed + + Comment + Hide extended friend information in contact list + Persist + 1 + Type + Boolean + Value + 0 + + FloaterHexRect + + Comment + Rectangle for hex editor floater. + Persist + 1 + Type + Rect + Value + + 343 + 687 + 981 + 473 + + + HexEditorColumns + + Comment + Number of columns shown in hex editor + Persist + 1 + Type + U32 + Value + 16 + + FloaterAssetTextEditorRect + + Comment + Rectangle for asset text editor floater. + Persist + 1 + Type + Rect + Value + + 343 + 687 + 981 + 473 + + + RadarListBtnState + + Comment + + Persist + 0 + Type + Boolean + Value + 0 + + WindEnabled + + Comment + Enable the use of wind (affects trees and flexis, among other things) + Persist + 1 + Type + Boolean + Value + 1 + + CloudsEnabled + + Comment + Render Clouds + Persist + 1 + Type + Boolean + Value + 1 + + + diff --git a/indra/newview/app_settings/settings_ascent.xml b/indra/newview/app_settings/settings_ascent.xml index fa6f2731c..86811ae6d 100644 --- a/indra/newview/app_settings/settings_ascent.xml +++ b/indra/newview/app_settings/settings_ascent.xml @@ -1,769 +1,769 @@ - - - - - - SianaRenderOmitBlankVBO - - Comment - Optimization: omit prefilling VBOs with zeroes. Default: OFF - Persist - 1 - Type - Boolean - Value - 0 - - SianaUnsitOnCamReset - - Comment - Make avatar stand up when camera is reset to 3rd Person View - Persist - 1 - Type - Boolean - Value - 0 - - PhoenixNameSystem - - Comment - Use Display Names instead of Legacy Names. 0 = Old Style, 1 = Display Names and Username, 2 = Displayname only - Persist - 2 - Type - S32 - Value - 1 - - AscentPowerfulWizard - - Comment - User is a bad enough dude. - Persist - 1 - Type - Boolean - Value - 0 - - AscentUpdateTagsOnLoad - - Comment - Allowed client to update client definitions file. - Persist - 1 - Type - Boolean - Value - 0 - - AscentUploadSettings - - Comment - Settings for upload browser - Type - LLSD - Value - - ActivePath - None - - - AscentActiveDayCycle - - Comment - Day cycle currently in use - Persist - 1 - Type - String - Value - Default - - AscentAutoCloseOOC - - Comment - Auto-close OOC chat (i.e. add \"))\" if not found and \"((\" was used) - Persist - 1 - Type - Boolean - Value - 0 - - AscentAllowMUpose - - Comment - Allow MU* pose style in chat and IM (with ':' as a synonymous to '/me ') - Persist - 1 - Type - Boolean - Value - 0 - - AscentStoreSettingsPerAccount - - Comment - Toggles whether to save certain settings per-account, rather than per-install. - Persist - 0 - Type - Boolean - Value - 0 - - AscentDataSeparator - - Comment - This separates data bits from each other - May be used in multiple locations - Persist - 1 - Type - String - Value - :: - - AscentHideTypingNotification - - Comment - Keep those jerks guessing by hiding your "____ is typing..." message. - Persist - 0 - Type - Boolean - Value - 1 - - AscentShowSelfTag - - Comment - Show your own tag - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowSelfTagColor - - Comment - Show your own tag - Persist - 1 - Type - Boolean - Value - 1 - - AscentAlwaysRezInGroup - - Comment - Always rez under the owned land group - Persist - 1 - Type - Boolean - Value - 1 - - AscentDisableLogoutScreens - - Comment - Disable logout screen progress bar - Persist - 1 - Type - Boolean - Value - 0 - - AscentDisableTeleportScreens - - Comment - Disable teleport screens - Persist - 1 - Type - Boolean - Value - 0 - - AscentShowLookAt - - Comment - Show Others' Lookat points - Persist - 1 - Type - Boolean - Value - 0 - - AscentUseStatusColors - - Comment - Show special colors for statuses like Friend, Linden, so on - Persist - 1 - Type - Boolean - Value - 0 - - AscentAvatarXModifier - - Comment - Avatar position modifier (X) - Persist - 1 - Type - F32 - Value - 0.0 - - AscentAvatarYModifier - - Comment - Avatar position modifier (Y) - Persist - 1 - Type - F32 - Value - 0.0 - - AscentAvatarZModifier - - Comment - Avatar position modifier (Z) - Persist - 1 - Type - F32 - Value - 0.0 - - AscentUseSystemFolder - - Comment - Enables the System folder for setting and non-permanent asset storage. - Persist - 1 - Type - Boolean - Value - 0 - - AscentSystemTemporary - - Comment - When enabled, temporary uploads are put in the System Asset folder (if System Folder exists). - Persist - 1 - Type - Boolean - Value - 0 - - AscentShowFriendsTag - - Comment - Show friends client tags as (Friend), and colorize them specially. - Persist - 1 - Type - Boolean - Value - 1 - - AscentUseTag - - Comment - Broadcast client tag - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowIdleTime - - Comment - Show client tags for others. - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowOthersTag - - Comment - Show client tags for others. - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowOthersTagColor - - Comment - Show avatar names in the color of their client. - Persist - 1 - Type - Boolean - Value - 1 - - AscentBuildAlwaysEnabled - - Comment - Show build option regardless of whether you can (May not mean you can actually build there) - Persist - 1 - Type - Boolean - Value - 1 - - AscentDisableMinZoomDist - - Comment - Allows much closer camera zooming. - Persist - 1 - Type - Boolean - Value - 1 - - AscentFlyAlwaysEnabled - - Comment - Always allow fly (Does actually always allow flight) - Persist - 1 - Type - Boolean - Value - 0 - - AscentDisplayTotalScriptJumps - - Comment - Shows large changes to the sim script count in chat. - Persist - 1 - Type - Boolean - Value - 0 - - Ascentnumscriptdiff - - Comment - The delta to spam you the script jump difference - Persist - 1 - Type - F32 - Value - 100 - - Ascentnumscripts - - Comment - temp.. - Persist - 0 - Type - F32 - Value - 0.0 - - AscentBuildPrefs_ActualRoot - - Comment - Center selection on parent prim's center. - Persist - 1 - Type - Boolean - Value - 1 - - AscentBuildPrefs_PivotIsPercent - - Comment - Would you like the chatbar to be able to be used for command line functions? - Persist - 1 - Type - Boolean - Value - 1 - - AscentBuildPrefs_PivotX - - Comment - idfk - Persist - 1 - Type - F32 - Value - 50.0 - - AscentBuildPrefs_PivotY - - Comment - idfk - Persist - 1 - Type - F32 - Value - 50.0 - - AscentBuildPrefs_PivotZ - - Comment - idfk - Persist - 1 - Type - F32 - Value - 50.0 - - AscentCmdLine - - Comment - Would you like the chatbar to be able to be used for command line functions? - Persist - 1 - Type - Boolean - Value - 1 - - AscentCmdLineClearChat - - Comment - Clear chat history to stop lag from chat spam - Persist - 1 - Type - String - Value - clrchat - - AscentCmdLineHeight - - Comment - Teleport to height function command - Persist - 1 - Type - String - Value - gth - - AscentCmdLinePos - - Comment - Teleport to position function command - Persist - 1 - Type - String - Value - gtp - - AscentCmdLineGround - - Comment - Teleport to ground function command - Persist - 1 - Type - String - Value - flr - - AscentCmdLineTeleportHome - - Comment - Teleport to home function command - Persist - 1 - Type - String - Value - tph - - AscentCmdLineRezPlatform - - Comment - Rez a platform underneath you - Persist - 1 - Type - String - Value - rezplat - - AscentPlatformSize - - Comment - How wide the rezzed platform will appear to be. - Persist - 1 - Type - F32 - Value - 30 - - AscentCmdLineMapTo - - Comment - Teleport to a region by name rapidly - Persist - 1 - Type - String - Value - mapto - - AscentMapToKeepPos - - Comment - Attempt to arrive in the same location you were at. - Persist - 1 - Type - Boolean - Value - 0 - - AscentCmdLineDrawDistance - - Comment - Change draw distance quickly - Persist - 1 - Type - String - Value - dd - - AscentCmdTeleportToCam - - Comment - Teleport to your camera - Persist - 1 - Type - String - Value - tp2cam - - AscentCmdLineKeyToName - - Comment - Use a fast key to name querry - Persist - 1 - Type - String - Value - key2name - - AscentCmdLineOfferTp - - Comment - Offer a teleport to target avatar - Persist - 1 - Type - String - Value - offertp - - AscentCmdLineCalc - - Comment - Calculates an expression - Persist - 1 - Type - String - Value - calc - - AscentCmdLineTP2 - - Comment - Teleport to a person by name, partials work. - Persist - 1 - Type - String - Value - tp2 - - AscentInstantMessageAnnounceIncoming - - Comment - Start IM window as soon as the person starts typing - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowLookAt - - Comment - Show Others' Lookat points - Persist - 1 - Type - Boolean - Value - 0 - - AscentUseStatusColors - - Comment - Show special colors for statuses like Friend, Linden, so on - Persist - 1 - Type - Boolean - Value - 0 - - AscentAvatarXModifier - - Comment - Avatar position modifier (X) - Persist - 1 - Type - F32 - Value - 0.0 - - AscentAvatarYModifier - - Comment - Avatar position modifier (Y) - Persist - 1 - Type - F32 - Value - 0.0 - - AscentAvatarZModifier - - Comment - Avatar position modifier (Z) - Persist - 1 - Type - F32 - Value - 0.0 - - AscentUseSystemFolder - - Comment - Enables the System folder for setting and non-permanent asset storage. - Persist - 1 - Type - Boolean - Value - 0 - - AscentSystemTemporary - - Comment - When enabled, temporary uploads are put in the System Asset folder (if System Folder exists). - Persist - 1 - Type - Boolean - Value - 0 - - AscentShowFriendsTag - - Comment - Show friends client tags as (Friend), and colorize them specially. - Persist - 1 - Type - Boolean - Value - 1 - - AscentUseTag - - Comment - Broadcast client tag - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowIdleTime - - Comment - Show client tags for others. - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowOthersTag - - Comment - Show client tags for others. - Persist - 1 - Type - Boolean - Value - 1 - - AscentShowOthersTagColor - - Comment - Show avatar names in the color of their client. - Persist - 1 - Type - Boolean - Value - 1 - - - - - + + + + + + SianaRenderOmitBlankVBO + + Comment + Optimization: omit prefilling VBOs with zeroes. Default: OFF + Persist + 1 + Type + Boolean + Value + 0 + + SianaUnsitOnCamReset + + Comment + Make avatar stand up when camera is reset to 3rd Person View + Persist + 1 + Type + Boolean + Value + 0 + + PhoenixNameSystem + + Comment + Use Display Names instead of Legacy Names. 0 = Old Style, 1 = Display Names and Username, 2 = Displayname only + Persist + 2 + Type + S32 + Value + 1 + + AscentPowerfulWizard + + Comment + User is a bad enough dude. + Persist + 1 + Type + Boolean + Value + 0 + + AscentUpdateTagsOnLoad + + Comment + Allowed client to update client definitions file. + Persist + 1 + Type + Boolean + Value + 0 + + AscentUploadSettings + + Comment + Settings for upload browser + Type + LLSD + Value + + ActivePath + None + + + AscentActiveDayCycle + + Comment + Day cycle currently in use + Persist + 1 + Type + String + Value + Default + + AscentAutoCloseOOC + + Comment + Auto-close OOC chat (i.e. add \"))\" if not found and \"((\" was used) + Persist + 1 + Type + Boolean + Value + 0 + + AscentAllowMUpose + + Comment + Allow MU* pose style in chat and IM (with ':' as a synonymous to '/me ') + Persist + 1 + Type + Boolean + Value + 0 + + AscentStoreSettingsPerAccount + + Comment + Toggles whether to save certain settings per-account, rather than per-install. + Persist + 0 + Type + Boolean + Value + 0 + + AscentDataSeparator + + Comment + This separates data bits from each other - May be used in multiple locations + Persist + 1 + Type + String + Value + :: + + AscentHideTypingNotification + + Comment + Keep those jerks guessing by hiding your "____ is typing..." message. + Persist + 0 + Type + Boolean + Value + 1 + + AscentShowSelfTag + + Comment + Show your own tag + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowSelfTagColor + + Comment + Show your own tag + Persist + 1 + Type + Boolean + Value + 1 + + AscentAlwaysRezInGroup + + Comment + Always rez under the owned land group + Persist + 1 + Type + Boolean + Value + 1 + + AscentDisableLogoutScreens + + Comment + Disable logout screen progress bar + Persist + 1 + Type + Boolean + Value + 0 + + AscentDisableTeleportScreens + + Comment + Disable teleport screens + Persist + 1 + Type + Boolean + Value + 0 + + AscentShowLookAt + + Comment + Show Others' Lookat points + Persist + 1 + Type + Boolean + Value + 0 + + AscentUseStatusColors + + Comment + Show special colors for statuses like Friend, Linden, so on + Persist + 1 + Type + Boolean + Value + 0 + + AscentAvatarXModifier + + Comment + Avatar position modifier (X) + Persist + 1 + Type + F32 + Value + 0.0 + + AscentAvatarYModifier + + Comment + Avatar position modifier (Y) + Persist + 1 + Type + F32 + Value + 0.0 + + AscentAvatarZModifier + + Comment + Avatar position modifier (Z) + Persist + 1 + Type + F32 + Value + 0.0 + + AscentUseSystemFolder + + Comment + Enables the System folder for setting and non-permanent asset storage. + Persist + 1 + Type + Boolean + Value + 0 + + AscentSystemTemporary + + Comment + When enabled, temporary uploads are put in the System Asset folder (if System Folder exists). + Persist + 1 + Type + Boolean + Value + 0 + + AscentShowFriendsTag + + Comment + Show friends client tags as (Friend), and colorize them specially. + Persist + 1 + Type + Boolean + Value + 1 + + AscentUseTag + + Comment + Broadcast client tag + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowIdleTime + + Comment + Show client tags for others. + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowOthersTag + + Comment + Show client tags for others. + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowOthersTagColor + + Comment + Show avatar names in the color of their client. + Persist + 1 + Type + Boolean + Value + 1 + + AscentBuildAlwaysEnabled + + Comment + Show build option regardless of whether you can (May not mean you can actually build there) + Persist + 1 + Type + Boolean + Value + 1 + + AscentDisableMinZoomDist + + Comment + Allows much closer camera zooming. + Persist + 1 + Type + Boolean + Value + 1 + + AscentFlyAlwaysEnabled + + Comment + Always allow fly (Does actually always allow flight) + Persist + 1 + Type + Boolean + Value + 0 + + AscentDisplayTotalScriptJumps + + Comment + Shows large changes to the sim script count in chat. + Persist + 1 + Type + Boolean + Value + 0 + + Ascentnumscriptdiff + + Comment + The delta to spam you the script jump difference + Persist + 1 + Type + F32 + Value + 100 + + Ascentnumscripts + + Comment + temp.. + Persist + 0 + Type + F32 + Value + 0.0 + + AscentBuildPrefs_ActualRoot + + Comment + Center selection on parent prim's center. + Persist + 1 + Type + Boolean + Value + 1 + + AscentBuildPrefs_PivotIsPercent + + Comment + Would you like the chatbar to be able to be used for command line functions? + Persist + 1 + Type + Boolean + Value + 1 + + AscentBuildPrefs_PivotX + + Comment + idfk + Persist + 1 + Type + F32 + Value + 50.0 + + AscentBuildPrefs_PivotY + + Comment + idfk + Persist + 1 + Type + F32 + Value + 50.0 + + AscentBuildPrefs_PivotZ + + Comment + idfk + Persist + 1 + Type + F32 + Value + 50.0 + + AscentCmdLine + + Comment + Would you like the chatbar to be able to be used for command line functions? + Persist + 1 + Type + Boolean + Value + 1 + + AscentCmdLineClearChat + + Comment + Clear chat history to stop lag from chat spam + Persist + 1 + Type + String + Value + clrchat + + AscentCmdLineHeight + + Comment + Teleport to height function command + Persist + 1 + Type + String + Value + gth + + AscentCmdLinePos + + Comment + Teleport to position function command + Persist + 1 + Type + String + Value + gtp + + AscentCmdLineGround + + Comment + Teleport to ground function command + Persist + 1 + Type + String + Value + flr + + AscentCmdLineTeleportHome + + Comment + Teleport to home function command + Persist + 1 + Type + String + Value + tph + + AscentCmdLineRezPlatform + + Comment + Rez a platform underneath you + Persist + 1 + Type + String + Value + rezplat + + AscentPlatformSize + + Comment + How wide the rezzed platform will appear to be. + Persist + 1 + Type + F32 + Value + 30 + + AscentCmdLineMapTo + + Comment + Teleport to a region by name rapidly + Persist + 1 + Type + String + Value + mapto + + AscentMapToKeepPos + + Comment + Attempt to arrive in the same location you were at. + Persist + 1 + Type + Boolean + Value + 0 + + AscentCmdLineDrawDistance + + Comment + Change draw distance quickly + Persist + 1 + Type + String + Value + dd + + AscentCmdTeleportToCam + + Comment + Teleport to your camera + Persist + 1 + Type + String + Value + tp2cam + + AscentCmdLineKeyToName + + Comment + Use a fast key to name querry + Persist + 1 + Type + String + Value + key2name + + AscentCmdLineOfferTp + + Comment + Offer a teleport to target avatar + Persist + 1 + Type + String + Value + offertp + + AscentCmdLineCalc + + Comment + Calculates an expression + Persist + 1 + Type + String + Value + calc + + AscentCmdLineTP2 + + Comment + Teleport to a person by name, partials work. + Persist + 1 + Type + String + Value + tp2 + + AscentInstantMessageAnnounceIncoming + + Comment + Start IM window as soon as the person starts typing + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowLookAt + + Comment + Show Others' Lookat points + Persist + 1 + Type + Boolean + Value + 0 + + AscentUseStatusColors + + Comment + Show special colors for statuses like Friend, Linden, so on + Persist + 1 + Type + Boolean + Value + 0 + + AscentAvatarXModifier + + Comment + Avatar position modifier (X) + Persist + 1 + Type + F32 + Value + 0.0 + + AscentAvatarYModifier + + Comment + Avatar position modifier (Y) + Persist + 1 + Type + F32 + Value + 0.0 + + AscentAvatarZModifier + + Comment + Avatar position modifier (Z) + Persist + 1 + Type + F32 + Value + 0.0 + + AscentUseSystemFolder + + Comment + Enables the System folder for setting and non-permanent asset storage. + Persist + 1 + Type + Boolean + Value + 0 + + AscentSystemTemporary + + Comment + When enabled, temporary uploads are put in the System Asset folder (if System Folder exists). + Persist + 1 + Type + Boolean + Value + 0 + + AscentShowFriendsTag + + Comment + Show friends client tags as (Friend), and colorize them specially. + Persist + 1 + Type + Boolean + Value + 1 + + AscentUseTag + + Comment + Broadcast client tag + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowIdleTime + + Comment + Show client tags for others. + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowOthersTag + + Comment + Show client tags for others. + Persist + 1 + Type + Boolean + Value + 1 + + AscentShowOthersTagColor + + Comment + Show avatar names in the color of their client. + Persist + 1 + Type + Boolean + Value + 1 + + + + + diff --git a/indra/newview/app_settings/settings_ascent_coa.xml b/indra/newview/app_settings/settings_ascent_coa.xml index cf681b8ee..660c18d14 100644 --- a/indra/newview/app_settings/settings_ascent_coa.xml +++ b/indra/newview/app_settings/settings_ascent_coa.xml @@ -1,180 +1,180 @@ - - - - - MoyMiniMapCustomColor - - Comment - Custom minimap color you wish to have. - Persist - 1 - Type - Color4 - Value - - 0.375 - 1.0 - 1.0 - 1.0 - - IsCOA - 1 - - AscentInstantMessageAnnounceIncoming - - Comment - Start IM window as soon as the person starts typing - Persist - 1 - Type - Boolean - Value - 1 - IsCOA - 1 - - AscentCustomTagLabel - - Comment - Label for the custom local tag - Persist - 1 - Type - String - Value - Custom - IsCOA - 1 - - AscentCustomTagColor - - Comment - Color of custom tag. - Persist - 1 - Type - Color4 - Value - - 0.5 - 1.0 - 0.25 - 1.0 - - IsCOA - 1 - - AscentUseCustomTag - - Comment - Show a custom tag. - Persist - 1 - Type - Boolean - Value - 0 - IsCOA - 1 - - AscentReportClientIndex - - Comment - Show your own tag - Persist - 1 - Type - U32 - Value - 1 - IsCOA - 1 - - AscentFriendColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 0.0 - 1.0 - - IsCOA - 1 - - AscentLindenColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 1.0 - 1.0 - - IsCOA - 1 - - AscentMutedColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 0.7 - 0.7 - 0.7 - 1.0 - - IsCOA - 1 - - AscentEstateOwnerColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.6 - 1.0 - 1.0 - - IsCOA - 1 - - AscentReportClientUUID - - Comment - Broadcasted Client Key - Persist - 1 - Type - String - Value - f25263b7-6167-4f34-a4ef-af65213b2e39 - IsCOA - 1 - - - - + + + + + MoyMiniMapCustomColor + + Comment + Custom minimap color you wish to have. + Persist + 1 + Type + Color4 + Value + + 0.375 + 1.0 + 1.0 + 1.0 + + IsCOA + 1 + + AscentInstantMessageAnnounceIncoming + + Comment + Start IM window as soon as the person starts typing + Persist + 1 + Type + Boolean + Value + 1 + IsCOA + 1 + + AscentCustomTagLabel + + Comment + Label for the custom local tag + Persist + 1 + Type + String + Value + Custom + IsCOA + 1 + + AscentCustomTagColor + + Comment + Color of custom tag. + Persist + 1 + Type + Color4 + Value + + 0.5 + 1.0 + 0.25 + 1.0 + + IsCOA + 1 + + AscentUseCustomTag + + Comment + Show a custom tag. + Persist + 1 + Type + Boolean + Value + 0 + IsCOA + 1 + + AscentReportClientIndex + + Comment + Show your own tag + Persist + 1 + Type + U32 + Value + 1 + IsCOA + 1 + + AscentFriendColor + + Comment + Color of chat messages from other residents + Persist + 1 + Type + Color4 + Value + + 1.0 + 1.0 + 0.0 + 1.0 + + IsCOA + 1 + + AscentLindenColor + + Comment + Color of chat messages from other residents + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 1.0 + 1.0 + + IsCOA + 1 + + AscentMutedColor + + Comment + Color of chat messages from other residents + Persist + 1 + Type + Color4 + Value + + 0.7 + 0.7 + 0.7 + 1.0 + + IsCOA + 1 + + AscentEstateOwnerColor + + Comment + Color of chat messages from other residents + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.6 + 1.0 + 1.0 + + IsCOA + 1 + + AscentReportClientUUID + + Comment + Broadcasted Client Key + Persist + 1 + Type + String + Value + f25263b7-6167-4f34-a4ef-af65213b2e39 + IsCOA + 1 + + + + diff --git a/indra/newview/app_settings/settings_crash_behavior.xml b/indra/newview/app_settings/settings_crash_behavior.xml index 6676395c4..f588db5cb 100644 --- a/indra/newview/app_settings/settings_crash_behavior.xml +++ b/indra/newview/app_settings/settings_crash_behavior.xml @@ -1,15 +1,15 @@ - - - CrashSubmitBehavior - - Comment - Controls behavior when viewer crashes (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report) - Persist - 2 - Type - S32 - Value - 2 - - - + + + CrashSubmitBehavior + + Comment + Controls behavior when viewer crashes (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report) + Persist + 2 + Type + S32 + Value + 2 + + + diff --git a/indra/newview/app_settings/settings_rlv.xml b/indra/newview/app_settings/settings_rlv.xml index b89d4c3f2..598f05fe8 100644 --- a/indra/newview/app_settings/settings_rlv.xml +++ b/indra/newview/app_settings/settings_rlv.xml @@ -1,183 +1,183 @@ - - - - - RestrainedLove - - Comment - Toggles the RestrainedLove features (BDSM lockable toys support). Needs a restart of the viewer. - Persist - 1 - Type - Boolean - Value - 1 - - RestrainedLoveDebug - - Comment - Toggles the RestrainedLove debug mode (displays the commands when in debug mode). - Persist - 1 - Type - Boolean - Value - 0 - - RestrainedLoveNoSetEnv - - Comment - When TRUE, forbids to set the environment (time of day and Windlight settings) via RestrainedLove. Needs a restart of the viewer. - Persist - 1 - Type - Boolean - Value - 0 - - RestrainedLoveOffsetAvatarZ - - Comment - Offset the avatar. - Persist - 1 - Type - F32 - Value - 0.0 - - RestrainedLoveReplaceWhenFolderBeginsWith - - Comment - If a folder name begins with this string, its attach behavior will always be "replace", never "stack". Default is blank (disabled). - Persist - 1 - Type - String - Value - - - RestrainedLoveStackWhenFolderBeginsWith - - Comment - If a folder name begins with this string, its attach behavior will always be "stack", never "replace". Default is "+". - Persist - 1 - Type - String - Value - + - - RLVaDebugHideUnsetDuplicate - - Comment - Suppresses reporting "unset" or "duplicate" command restrictions when RestrainedLoveDebug is TRUE - Persist - 1 - Type - Boolean - Value - 0 - - RestrainedLoveForbidGiveToRLV - - Comment - When FALSE, allows to give sub-folders to the #RLV RestrainedLove folder. - Persist - 1 - Type - Boolean - Value - 1 - - RLVaEnableCompositeFolders - - Comment - Enables composite folders for shared inventory - Persist - 1 - Type - Boolean - Value - 0 - - RLVaEnableLegacyNaming - - Comment - Enables legacy naming convention for folders - Persist - 1 - Type - Boolean - Value - 1 - - RLVaEnableSharedWear - - Comment - Attachments in the shared #RLV folder can be force-attached without needing to specify an attachment point - Persist - 1 - Type - Boolean - Value - 0 - - RLVaHideLockedLayers - - Comment - Hides "remove outfit" restricted worn clothing layers from @getoufit - Persist - 1 - Type - Boolean - Value - 0 - - RLVaHideLockedAttachments - - Comment - Hides non-detachable worn attachments from @getattach - Persist - 1 - Type - Boolean - Value - 0 - - RLVaSharedInvAutoRename - - Comment - Automatically renames shared inventory items when worn - Persist - 1 - Type - Boolean - Value - 1 - - RLVaShowNameTags - - Comment - Display of names above avatars is subject to the general "Show Names" setting when @shownames=n restricted - Persist - 1 - Type - Boolean - Value - 0 - - WarnFirstRLVGiveToRLV - - Comment - Enables FirstRLVGiveToRLV warning dialog - Persist - 1 - Type - Boolean - Value - 1 - - - - + + + + + RestrainedLove + + Comment + Toggles the RestrainedLove features (BDSM lockable toys support). Needs a restart of the viewer. + Persist + 1 + Type + Boolean + Value + 1 + + RestrainedLoveDebug + + Comment + Toggles the RestrainedLove debug mode (displays the commands when in debug mode). + Persist + 1 + Type + Boolean + Value + 0 + + RestrainedLoveNoSetEnv + + Comment + When TRUE, forbids to set the environment (time of day and Windlight settings) via RestrainedLove. Needs a restart of the viewer. + Persist + 1 + Type + Boolean + Value + 0 + + RestrainedLoveOffsetAvatarZ + + Comment + Offset the avatar. + Persist + 1 + Type + F32 + Value + 0.0 + + RestrainedLoveReplaceWhenFolderBeginsWith + + Comment + If a folder name begins with this string, its attach behavior will always be "replace", never "stack". Default is blank (disabled). + Persist + 1 + Type + String + Value + + + RestrainedLoveStackWhenFolderBeginsWith + + Comment + If a folder name begins with this string, its attach behavior will always be "stack", never "replace". Default is "+". + Persist + 1 + Type + String + Value + + + + RLVaDebugHideUnsetDuplicate + + Comment + Suppresses reporting "unset" or "duplicate" command restrictions when RestrainedLoveDebug is TRUE + Persist + 1 + Type + Boolean + Value + 0 + + RestrainedLoveForbidGiveToRLV + + Comment + When FALSE, allows to give sub-folders to the #RLV RestrainedLove folder. + Persist + 1 + Type + Boolean + Value + 1 + + RLVaEnableCompositeFolders + + Comment + Enables composite folders for shared inventory + Persist + 1 + Type + Boolean + Value + 0 + + RLVaEnableLegacyNaming + + Comment + Enables legacy naming convention for folders + Persist + 1 + Type + Boolean + Value + 1 + + RLVaEnableSharedWear + + Comment + Attachments in the shared #RLV folder can be force-attached without needing to specify an attachment point + Persist + 1 + Type + Boolean + Value + 0 + + RLVaHideLockedLayers + + Comment + Hides "remove outfit" restricted worn clothing layers from @getoufit + Persist + 1 + Type + Boolean + Value + 0 + + RLVaHideLockedAttachments + + Comment + Hides non-detachable worn attachments from @getattach + Persist + 1 + Type + Boolean + Value + 0 + + RLVaSharedInvAutoRename + + Comment + Automatically renames shared inventory items when worn + Persist + 1 + Type + Boolean + Value + 1 + + RLVaShowNameTags + + Comment + Display of names above avatars is subject to the general "Show Names" setting when @shownames=n restricted + Persist + 1 + Type + Boolean + Value + 0 + + WarnFirstRLVGiveToRLV + + Comment + Enables FirstRLVGiveToRLV warning dialog + Persist + 1 + Type + Boolean + Value + 1 + + + + diff --git a/indra/newview/app_settings/settings_sh.xml b/indra/newview/app_settings/settings_sh.xml index c355ee478..95e494f46 100644 --- a/indra/newview/app_settings/settings_sh.xml +++ b/indra/newview/app_settings/settings_sh.xml @@ -1,172 +1,172 @@ - - - - - SHAllowScriptCommands - - Comment - Allow script to client intercommunication - Persist - 1 - Type - Boolean - Value - 0 - - SHScriptCommandPrefix - - Comment - Prefix that script commands must be prepended with. - Persist - 1 - Type - String - Value - #@#@! - - SHChatCommandPrefix - - Comment - Prefix that chat commands must be prepended with - Persist - 1 - Type - String - Value - >> - - SHScriptCommandSeparator - - Comment - Separator to use when tokenizing script command arguments - Persist - 1 - Type - String - Value - | - - SHChatCommandSeparator - - Comment - Separator to use when tokenizing chat command arguments - Persist - 1 - Type - String - Value - - - SHHighResSnapshotScale - - Comment - High-resolution snapshot scale. - Persist - 1 - Type - F32 - Value - 2.0 - - SHHighResSnapshotSuperSample - - Comment - Set the supersampling scale in tiled screenshots. - Persist - 1 - Type - F32 - Value - 1.0 - - - SGBlockGeneralSpam - - Comment - Enable automatic general spam blocking - Persist - 1 - Type - Boolean - Value - 1 - - SGBlockCardSpam - - Comment - Enable automatic calling card spam blocking - Persist - 1 - Type - Boolean - Value - 1 - - SGBlockChatSpam - - Comment - Enable automatic chat spam blocking - Persist - 1 - Type - Boolean - Value - 1 - - SGBlockDialogSpam - - Comment - Enable automatic dialog spam blocking - Persist - 1 - Type - Boolean - Value - 1 - - SGSpamTime - - Comment - Time of Evalulating spam. (Default: 1.000) - Persist - 1 - Type - F32 - Value - 1.0 - - SGSpamCount - - Comment - Number of items spammed per time period in SGSpamTime. (Default: 4) - Persist - 1 - Type - U32 - Value - 4 - - SGChatSpamTime - - Comment - Time of Evalulating spam. (Default: 1.000) - Persist - 1 - Type - F32 - Value - 1.0 - - SGChatSpamCount - - Comment - Number of items spammed per time set in SGSpamTime. (Default: 10) - Persist - 1 - Type - U32 - Value - 10.0 - - - + + + + + SHAllowScriptCommands + + Comment + Allow script to client intercommunication + Persist + 1 + Type + Boolean + Value + 0 + + SHScriptCommandPrefix + + Comment + Prefix that script commands must be prepended with. + Persist + 1 + Type + String + Value + #@#@! + + SHChatCommandPrefix + + Comment + Prefix that chat commands must be prepended with + Persist + 1 + Type + String + Value + >> + + SHScriptCommandSeparator + + Comment + Separator to use when tokenizing script command arguments + Persist + 1 + Type + String + Value + | + + SHChatCommandSeparator + + Comment + Separator to use when tokenizing chat command arguments + Persist + 1 + Type + String + Value + + + SHHighResSnapshotScale + + Comment + High-resolution snapshot scale. + Persist + 1 + Type + F32 + Value + 2.0 + + SHHighResSnapshotSuperSample + + Comment + Set the supersampling scale in tiled screenshots. + Persist + 1 + Type + F32 + Value + 1.0 + + + SGBlockGeneralSpam + + Comment + Enable automatic general spam blocking + Persist + 1 + Type + Boolean + Value + 1 + + SGBlockCardSpam + + Comment + Enable automatic calling card spam blocking + Persist + 1 + Type + Boolean + Value + 1 + + SGBlockChatSpam + + Comment + Enable automatic chat spam blocking + Persist + 1 + Type + Boolean + Value + 1 + + SGBlockDialogSpam + + Comment + Enable automatic dialog spam blocking + Persist + 1 + Type + Boolean + Value + 1 + + SGSpamTime + + Comment + Time of Evalulating spam. (Default: 1.000) + Persist + 1 + Type + F32 + Value + 1.0 + + SGSpamCount + + Comment + Number of items spammed per time period in SGSpamTime. (Default: 4) + Persist + 1 + Type + U32 + Value + 4 + + SGChatSpamTime + + Comment + Time of Evalulating spam. (Default: 1.000) + Persist + 1 + Type + F32 + Value + 1.0 + + SGChatSpamCount + + Comment + Number of items spammed per time set in SGSpamTime. (Default: 10) + Persist + 1 + Type + U32 + Value + 10.0 + + + diff --git a/indra/newview/app_settings/windlight/postprocesseffects.xml b/indra/newview/app_settings/windlight/postprocesseffects.xml index 2ce7d7c44..9261f3287 100644 --- a/indra/newview/app_settings/windlight/postprocesseffects.xml +++ b/indra/newview/app_settings/windlight/postprocesseffects.xml @@ -1,191 +1,191 @@ - - - - Asi Weird - - bloom_strength - 4.5799999237060547 - bloom_width - 12.539999961853027 - brightness - 0.89999997615814209 - brightness_multiplier - 3 - contrast - 0.22999998927116394 - contrast_base - - 1 - 1 - 1 - 0.5 - - enable_bloom - 1 - enable_color_filter - 1 - enable_night_vision - 0 - extract_high - 1 - extract_low - 0.47999998927116394 - noise_size - 25 - noise_strength - 0.40000000000000002 - saturation - -1 - - NegativeSaturation - - bloom_strength - 1.5 - bloom_width - 2.25 - brightness - 1 - brightness_multiplier - 3 - contrast - 1 - contrast_base - - 1 - 1 - 1 - 0.5 - - enable_bloom - 0 - enable_color_filter - 1 - enable_night_vision - 0 - extract_high - 1 - extract_low - 0.94999999999999996 - noise_size - 25 - noise_strength - 0.40000000000000002 - saturation - -1 - - NightVision - - bloom_strength - 1.5 - bloom_width - 2.25 - brightness - 1 - brightness_multiplier - 3 - contrast - 1 - contrast_base - - 1 - 1 - 1 - 0.5 - - enable_bloom - 0 - enable_color_filter - 0 - enable_night_vision - 1 - extract_high - 1 - extract_low - 0.94999999999999996 - noise_size - 25 - noise_strength - 0.40000000000000002 - saturation - 1 - - WGhost - - bloom_strength - 2.0399999618530273 - bloom_width - 2.25 - brightness - 1 - brightness_multiplier - 3 - contrast - 1 - contrast_base - - 1 - 1 - 1 - 0.5 - - enable_bloom - 1 - enable_color_filter - 0 - enable_night_vision - 0 - extract_high - 1 - extract_low - 0.22999998927116394 - noise_size - 25 - noise_strength - 0.40000000000000002 - saturation - 1 - - default - - bloom_strength - 1.5 - bloom_width - 2.25 - gamma - 1.0 - brightness - 1 - brightness_multiplier - 3 - contrast - 1 - contrast_base - - 1 - 1 - 1 - 0.5 - - enable_bloom - 0 - enable_color_filter - 0 - enable_night_vision - 0 - enable_gauss_blur - 0 - gauss_blur_passes - 2 - extract_high - 1 - extract_low - 0.94999999999999996 - noise_size - 25 - noise_strength - 0.40000000000000002 - saturation - 1 - - + + + + Asi Weird + + bloom_strength + 4.5799999237060547 + bloom_width + 12.539999961853027 + brightness + 0.89999997615814209 + brightness_multiplier + 3 + contrast + 0.22999998927116394 + contrast_base + + 1 + 1 + 1 + 0.5 + + enable_bloom + 1 + enable_color_filter + 1 + enable_night_vision + 0 + extract_high + 1 + extract_low + 0.47999998927116394 + noise_size + 25 + noise_strength + 0.40000000000000002 + saturation + -1 + + NegativeSaturation + + bloom_strength + 1.5 + bloom_width + 2.25 + brightness + 1 + brightness_multiplier + 3 + contrast + 1 + contrast_base + + 1 + 1 + 1 + 0.5 + + enable_bloom + 0 + enable_color_filter + 1 + enable_night_vision + 0 + extract_high + 1 + extract_low + 0.94999999999999996 + noise_size + 25 + noise_strength + 0.40000000000000002 + saturation + -1 + + NightVision + + bloom_strength + 1.5 + bloom_width + 2.25 + brightness + 1 + brightness_multiplier + 3 + contrast + 1 + contrast_base + + 1 + 1 + 1 + 0.5 + + enable_bloom + 0 + enable_color_filter + 0 + enable_night_vision + 1 + extract_high + 1 + extract_low + 0.94999999999999996 + noise_size + 25 + noise_strength + 0.40000000000000002 + saturation + 1 + + WGhost + + bloom_strength + 2.0399999618530273 + bloom_width + 2.25 + brightness + 1 + brightness_multiplier + 3 + contrast + 1 + contrast_base + + 1 + 1 + 1 + 0.5 + + enable_bloom + 1 + enable_color_filter + 0 + enable_night_vision + 0 + extract_high + 1 + extract_low + 0.22999998927116394 + noise_size + 25 + noise_strength + 0.40000000000000002 + saturation + 1 + + default + + bloom_strength + 1.5 + bloom_width + 2.25 + gamma + 1.0 + brightness + 1 + brightness_multiplier + 3 + contrast + 1 + contrast_base + + 1 + 1 + 1 + 0.5 + + enable_bloom + 0 + enable_color_filter + 0 + enable_night_vision + 0 + enable_gauss_blur + 0 + gauss_blur_passes + 2 + extract_high + 1 + extract_low + 0.94999999999999996 + noise_size + 25 + noise_strength + 0.40000000000000002 + saturation + 1 + + \ No newline at end of file diff --git a/indra/newview/app_settings/windlight/skies/A%2D12AM.xml b/indra/newview/app_settings/windlight/skies/A%2D12AM.xml index aa42de779..0aba31214 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D12AM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D12AM.xml @@ -1,141 +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 - - - + + + 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/A%2D12PM.xml b/indra/newview/app_settings/windlight/skies/A%2D12PM.xml index 81291b101..119b3e141 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D12PM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D12PM.xml @@ -1,141 +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 - - - + + + 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/A%2D3AM.xml b/indra/newview/app_settings/windlight/skies/A%2D3AM.xml index 29490cb40..f790d3d96 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D3AM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D3AM.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.22259476780891418 - 0.26450252532958984 - 0.35999998450279236 - 0.11999999731779099 - - blue_density - - 0.44999116536295314 - 0.44999854555993368 - 0.45001013284446073 - 1 - - blue_horizon - - 0.23999616268583132 - 0.239999227803052 - 0.24000028550619668 - 1 - - cloud_color - - 0.22615400241566114 - 0.22615400241566114 - 0.22615400241566114 - 1 - - cloud_pos_density1 - - 1.6884100437164307 - 0.52609699964523315 - 0.88000000953681223 - 1 - - cloud_pos_density2 - - 1.6884100437164307 - 0.52609699964523315 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.499400354105791 - 10.011000104419489 - - cloud_shadow - - 0.26999998092651367 - 0 - 0 - 1 - - density_multiplier - - 0.0003000046529240592 - 0 - 0 - 1 - - distance_multiplier - - 7.8213197608078763e-005 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 5.0000000000023022 - 0.0010000000214220922 - -0.47999999165507345 - 1 - - haze_density - - 3.9999044060931555 - 0 - 0 - 1 - - haze_horizon - - 4.6348559691012062e-006 - 0.19915600437461423 - 0.19915600437461423 - 1 - - lightnorm - - 0 - 0.70710653066635132 - -0.70710700750350952 - 1 - - max_y - - 906.19008370909478 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 1.9999420642852783 - sun_angle - 5.4977874755859375 - sunlight_color - - 0.60242295265197754 - 0.61447036266326904 - 1.1399999856948853 - 0.37999999523162842 - - - + + + ambient + + 0.22259476780891418 + 0.26450252532958984 + 0.35999998450279236 + 0.11999999731779099 + + blue_density + + 0.44999116536295314 + 0.44999854555993368 + 0.45001013284446073 + 1 + + blue_horizon + + 0.23999616268583132 + 0.239999227803052 + 0.24000028550619668 + 1 + + cloud_color + + 0.22615400241566114 + 0.22615400241566114 + 0.22615400241566114 + 1 + + cloud_pos_density1 + + 1.6884100437164307 + 0.52609699964523315 + 0.88000000953681223 + 1 + + cloud_pos_density2 + + 1.6884100437164307 + 0.52609699964523315 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.499400354105791 + 10.011000104419489 + + cloud_shadow + + 0.26999998092651367 + 0 + 0 + 1 + + density_multiplier + + 0.0003000046529240592 + 0 + 0 + 1 + + distance_multiplier + + 7.8213197608078763e-005 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 5.0000000000023022 + 0.0010000000214220922 + -0.47999999165507345 + 1 + + haze_density + + 3.9999044060931555 + 0 + 0 + 1 + + haze_horizon + + 4.6348559691012062e-006 + 0.19915600437461423 + 0.19915600437461423 + 1 + + lightnorm + + 0 + 0.70710653066635132 + -0.70710700750350952 + 1 + + max_y + + 906.19008370909478 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 1.9999420642852783 + sun_angle + 5.4977874755859375 + sunlight_color + + 0.60242295265197754 + 0.61447036266326904 + 1.1399999856948853 + 0.37999999523162842 + + + diff --git a/indra/newview/app_settings/windlight/skies/A%2D3PM.xml b/indra/newview/app_settings/windlight/skies/A%2D3PM.xml index 61ff9ebf4..ec9706773 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D3PM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D3PM.xml @@ -1,141 +1,141 @@ - - - ambient - - 1.0499999523162842 - 1.0499999523162842 - 1.0499999523162842 - 0.34999999403953552 - - blue_density - - 0.2447581488182351 - 0.44872328639030457 - 0.75999999046325684 - 0.38000004053115788 - - blue_horizon - - 0.49548382097675159 - 0.49548381382419748 - 0.63999999284744291 - 0.31999999642372146 - - cloud_color - - 0.40999999165535073 - 0.40999999165535073 - 0.40999999165535073 - 0.40999999165535073 - - cloud_pos_density1 - - 1.6884100437164307 - 0.52609699964523315 - 0.99999999999999289 - 1 - - cloud_pos_density2 - - 1.6884100437164307 - 0.52609699964523315 - 0.125 - 1 - - cloud_scale - - 0.4199999868869746 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.199999809265137 - 10.01099967956543 - - cloud_shadow - - 0.26999998092651367 - 0 - 0 - 1 - - density_multiplier - - 0.00017999998817685818 - 0 - 0 - 1 - - distance_multiplier - - 0.80000001192093606 - 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.18999999761581243 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.70710659027099609 - -0.70710694789886475 - 0 - - max_y - - 1605 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 0 - sun_angle - 2.3561947345733643 - sunlight_color - - 0.73421055078505759 - 0.78157895803450828 - 0.89999997615813498 - 0.29999998211860301 - - - + + + ambient + + 1.0499999523162842 + 1.0499999523162842 + 1.0499999523162842 + 0.34999999403953552 + + blue_density + + 0.2447581488182351 + 0.44872328639030457 + 0.75999999046325684 + 0.38000004053115788 + + blue_horizon + + 0.49548382097675159 + 0.49548381382419748 + 0.63999999284744291 + 0.31999999642372146 + + cloud_color + + 0.40999999165535073 + 0.40999999165535073 + 0.40999999165535073 + 0.40999999165535073 + + cloud_pos_density1 + + 1.6884100437164307 + 0.52609699964523315 + 0.99999999999999289 + 1 + + cloud_pos_density2 + + 1.6884100437164307 + 0.52609699964523315 + 0.125 + 1 + + cloud_scale + + 0.4199999868869746 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.199999809265137 + 10.01099967956543 + + cloud_shadow + + 0.26999998092651367 + 0 + 0 + 1 + + density_multiplier + + 0.00017999998817685818 + 0 + 0 + 1 + + distance_multiplier + + 0.80000001192093606 + 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.18999999761581243 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.70710659027099609 + -0.70710694789886475 + 0 + + max_y + + 1605 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 0 + sun_angle + 2.3561947345733643 + sunlight_color + + 0.73421055078505759 + 0.78157895803450828 + 0.89999997615813498 + 0.29999998211860301 + + + diff --git a/indra/newview/app_settings/windlight/skies/A%2D6AM.xml b/indra/newview/app_settings/windlight/skies/A%2D6AM.xml index 3a7b6196c..bbc7aeec5 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D6AM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D6AM.xml @@ -1,141 +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 - - - + + + 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/A%2D6PM.xml b/indra/newview/app_settings/windlight/skies/A%2D6PM.xml index 796c6e127..ebf08e1a3 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D6PM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D6PM.xml @@ -1,142 +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 - - - - + + + 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/A%2D9AM.xml b/indra/newview/app_settings/windlight/skies/A%2D9AM.xml index 84b61ac29..413e3a27d 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D9AM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D9AM.xml @@ -1,141 +1,141 @@ - - - ambient - - 1.0499999949065426 - 1.0499999988079054 - 1.0499999988079054 - 0.3500000095367426 - - blue_density - - 0.15999999642372131 - 0.44872328639030457 - 0.75999999046325684 - 0.75999999046325684 - - blue_horizon - - 0.53999996185302734 - 0.47999998927116394 - 0.69999998807907104 - 0.34999999403953552 - - cloud_color - - 0.37000000476837158 - 0.37000000476837158 - 0.37000000476837158 - 0.37000000476837158 - - cloud_pos_density1 - - 1.6884100437164307 - 0.52609699964523315 - 0.99999998569455784 - 1 - - cloud_pos_density2 - - 1.6884100437164307 - 0.52609699964523315 - 0.125 - 1 - - cloud_scale - - 0.41999997615814166 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.199999844956437 - 10.01099967956543 - - cloud_shadow - - 0.27333331108093262 - 0 - 0 - 1 - - density_multiplier - - 0.00017999998102430359 - 0 - 0 - 1 - - distance_multiplier - - 0.80000008344649842 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 4.9999999284740397 - 0.0010000000474974513 - -0.47999999046327346 - 1 - - haze_density - - 0.70000003576435432 - 0 - 0 - 1 - - haze_horizon - - 0.18999999284767277 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.70710676908493042 - 0.70710676908493042 - 0 - - max_y - - 1605 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 0 - sun_angle - 0.78539818525314331 - sunlight_color - - 0.73421054104441197 - 0.7815789463510896 - 0.89999995470046912 - 0.29999997496605069 - - - + + + ambient + + 1.0499999949065426 + 1.0499999988079054 + 1.0499999988079054 + 0.3500000095367426 + + blue_density + + 0.15999999642372131 + 0.44872328639030457 + 0.75999999046325684 + 0.75999999046325684 + + blue_horizon + + 0.53999996185302734 + 0.47999998927116394 + 0.69999998807907104 + 0.34999999403953552 + + cloud_color + + 0.37000000476837158 + 0.37000000476837158 + 0.37000000476837158 + 0.37000000476837158 + + cloud_pos_density1 + + 1.6884100437164307 + 0.52609699964523315 + 0.99999998569455784 + 1 + + cloud_pos_density2 + + 1.6884100437164307 + 0.52609699964523315 + 0.125 + 1 + + cloud_scale + + 0.41999997615814166 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.199999844956437 + 10.01099967956543 + + cloud_shadow + + 0.27333331108093262 + 0 + 0 + 1 + + density_multiplier + + 0.00017999998102430359 + 0 + 0 + 1 + + distance_multiplier + + 0.80000008344649842 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 4.9999999284740397 + 0.0010000000474974513 + -0.47999999046327346 + 1 + + haze_density + + 0.70000003576435432 + 0 + 0 + 1 + + haze_horizon + + 0.18999999284767277 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.70710676908493042 + 0.70710676908493042 + 0 + + max_y + + 1605 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 0 + sun_angle + 0.78539818525314331 + sunlight_color + + 0.73421054104441197 + 0.7815789463510896 + 0.89999995470046912 + 0.29999997496605069 + + + diff --git a/indra/newview/app_settings/windlight/skies/A%2D9PM.xml b/indra/newview/app_settings/windlight/skies/A%2D9PM.xml index 6a509d107..292f6713b 100644 --- a/indra/newview/app_settings/windlight/skies/A%2D9PM.xml +++ b/indra/newview/app_settings/windlight/skies/A%2D9PM.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.20404692765200849 - 0.24246276689169122 - 0.33000383615406292 - 0.1100123608103587 - - blue_density - - 0.44999116536295314 - 0.44999854555993368 - 0.45001013284446073 - 1 - - blue_horizon - - 0.23999616268583132 - 0.239999227803052 - 0.24000028550619668 - 1 - - cloud_color - - 0.22615400241566114 - 0.22615400241566114 - 0.22615400241566114 - 1 - - cloud_pos_density1 - - 1.6884100437164307 - 0.52609699964523315 - 0.88000000953681223 - 1 - - cloud_pos_density2 - - 1.6884100437164307 - 0.52609699964523315 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.499400354105791 - 10.011000104419489 - - cloud_shadow - - 0.26999998092651367 - 0 - 0 - 1 - - density_multiplier - - 0.0003000046529240592 - 0 - 0 - 1 - - distance_multiplier - - 7.8213197608078763e-005 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 5.0000000000023022 - 0.0010000000214220922 - -0.47999999165507345 - 1 - - haze_density - - 3.9999044060931555 - 0 - 0 - 1 - - haze_horizon - - 4.6348559691012062e-006 - 0.19915600437461423 - 0.19915600437461423 - 1 - - lightnorm - - 0 - 0.70710688829421997 - 0.70710664987564087 - 1 - - max_y - - 906.19008370909478 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 1.9999420642852783 - sun_angle - 3.9269909858703613 - sunlight_color - - 0.34878980098432066 - 0.35576509414380553 - 0.66003586768772493 - 0.22001197576412324 - - - + + + ambient + + 0.20404692765200849 + 0.24246276689169122 + 0.33000383615406292 + 0.1100123608103587 + + blue_density + + 0.44999116536295314 + 0.44999854555993368 + 0.45001013284446073 + 1 + + blue_horizon + + 0.23999616268583132 + 0.239999227803052 + 0.24000028550619668 + 1 + + cloud_color + + 0.22615400241566114 + 0.22615400241566114 + 0.22615400241566114 + 1 + + cloud_pos_density1 + + 1.6884100437164307 + 0.52609699964523315 + 0.88000000953681223 + 1 + + cloud_pos_density2 + + 1.6884100437164307 + 0.52609699964523315 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.499400354105791 + 10.011000104419489 + + cloud_shadow + + 0.26999998092651367 + 0 + 0 + 1 + + density_multiplier + + 0.0003000046529240592 + 0 + 0 + 1 + + distance_multiplier + + 7.8213197608078763e-005 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 5.0000000000023022 + 0.0010000000214220922 + -0.47999999165507345 + 1 + + haze_density + + 3.9999044060931555 + 0 + 0 + 1 + + haze_horizon + + 4.6348559691012062e-006 + 0.19915600437461423 + 0.19915600437461423 + 1 + + lightnorm + + 0 + 0.70710688829421997 + 0.70710664987564087 + 1 + + max_y + + 906.19008370909478 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 1.9999420642852783 + sun_angle + 3.9269909858703613 + sunlight_color + + 0.34878980098432066 + 0.35576509414380553 + 0.66003586768772493 + 0.22001197576412324 + + + diff --git a/indra/newview/app_settings/windlight/skies/Barcelona.xml b/indra/newview/app_settings/windlight/skies/Barcelona.xml index 7b09fe2bb..ea9cab8fb 100644 --- a/indra/newview/app_settings/windlight/skies/Barcelona.xml +++ b/indra/newview/app_settings/windlight/skies/Barcelona.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.22260047495365143 - 0.26450866460800171 - 0.35999998450279236 - 0.11999999731779099 - - blue_density - - 0.14522500336170197 - 0.39999699592590332 - 0.80000197887420654 - 1 - - blue_horizon - - 0.15130999684333801 - 0.30000001192092896 - 0.35131001472473145 - 1 - - 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.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.49940013885498 - 10.01099967956543 - - cloud_shadow - - 0.30000001192092896 - 0 - 0 - 1 - - density_multiplier - - 0.0003499999875202775 - 0 - 0 - 1 - - distance_multiplier - - 6 - 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 - - 0.69999998807907104 - 0 - 0 - 1 - - haze_horizon - - 0.19915600121021271 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.062790460884571075 - -0.99802672863006592 - 0 - - max_y - - 600 - 0 - 0 - 1 - - preset_num - 21 - star_brightness - 0 - sun_angle - 3.0787608623504639 - sunlight_color - - 1.1699999570846558 - 1.1699999570846558 - 1.1699999570846558 - 0.38999998569488525 - - - + + + ambient + + 0.22260047495365143 + 0.26450866460800171 + 0.35999998450279236 + 0.11999999731779099 + + blue_density + + 0.14522500336170197 + 0.39999699592590332 + 0.80000197887420654 + 1 + + blue_horizon + + 0.15130999684333801 + 0.30000001192092896 + 0.35131001472473145 + 1 + + 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.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.49940013885498 + 10.01099967956543 + + cloud_shadow + + 0.30000001192092896 + 0 + 0 + 1 + + density_multiplier + + 0.0003499999875202775 + 0 + 0 + 1 + + distance_multiplier + + 6 + 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 + + 0.69999998807907104 + 0 + 0 + 1 + + haze_horizon + + 0.19915600121021271 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.062790460884571075 + -0.99802672863006592 + 0 + + max_y + + 600 + 0 + 0 + 1 + + preset_num + 21 + star_brightness + 0 + sun_angle + 3.0787608623504639 + sunlight_color + + 1.1699999570846558 + 1.1699999570846558 + 1.1699999570846558 + 0.38999998569488525 + + + diff --git a/indra/newview/app_settings/windlight/skies/Blizzard.xml b/indra/newview/app_settings/windlight/skies/Blizzard.xml index a4110a1a6..d17d2790a 100644 --- a/indra/newview/app_settings/windlight/skies/Blizzard.xml +++ b/indra/newview/app_settings/windlight/skies/Blizzard.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.4823022186756134 - 0.57310229539871216 - 0.77999997138977051 - 0.25999999046325684 - - 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 - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 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 - 0.15643447637557983 - 0.98768836259841919 - 0 - - max_y - - 4000 - 0 - 0 - 1 - - preset_num - 2 - star_brightness - 0 - sun_angle - 0.15707963705062866 - sunlight_color - - 3 - 3 - 3 - 1 - - - + + + ambient + + 0.4823022186756134 + 0.57310229539871216 + 0.77999997138977051 + 0.25999999046325684 + + 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 + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 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 + 0.15643447637557983 + 0.98768836259841919 + 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/Blue%20Midday.xml b/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml index e7fdbe1d5..570f05996 100644 --- a/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml +++ b/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.14999999105930328 - 0.14999999105930328 - 0.14999999105930328 - 0.049999997019767761 - - blue_density - - 0.18153078854084015 - 0.49999505281448364 - 1 - 1 - - blue_horizon - - 0.43070217967033386 - 0.85394656658172607 - 1 - 1 - - cloud_color - - 0.53962135314941406 - 0.53962135314941406 - 0.53962135314941406 - 1 - - cloud_pos_density1 - - 0.5 - 0.5 - 0.69569224119186401 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.125 - 1 - - cloud_scale - - 0.10999999195337296 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.49940013885498 - 10.01099967956543 - - cloud_shadow - - 0.3765256404876709 - 0 - 0 - 1 - - density_multiplier - - 0.0003499999875202775 - 0 - 0 - 1 - - distance_multiplier - - 2.9846153259277344 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 4.2061538696289062 - 0.0010000000474974513 - -0.44246155023574829 - 1 - - haze_density - - 2.8830769062042236 - 0 - 0 - 1 - - haze_horizon - - 0.49740666151046753 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.86074197292327881 - -0.50904154777526855 - 0 - - max_y - - 600 - 0 - 0 - 1 - - preset_num - 10 - star_brightness - 0 - sun_angle - 2.1048672199249268 - sunlight_color - - 0.88526362180709839 - 1.2300000190734863 - 1.2300000190734863 - 0.40999999642372131 - - - + + + ambient + + 0.14999999105930328 + 0.14999999105930328 + 0.14999999105930328 + 0.049999997019767761 + + blue_density + + 0.18153078854084015 + 0.49999505281448364 + 1 + 1 + + blue_horizon + + 0.43070217967033386 + 0.85394656658172607 + 1 + 1 + + cloud_color + + 0.53962135314941406 + 0.53962135314941406 + 0.53962135314941406 + 1 + + cloud_pos_density1 + + 0.5 + 0.5 + 0.69569224119186401 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.125 + 1 + + cloud_scale + + 0.10999999195337296 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.49940013885498 + 10.01099967956543 + + cloud_shadow + + 0.3765256404876709 + 0 + 0 + 1 + + density_multiplier + + 0.0003499999875202775 + 0 + 0 + 1 + + distance_multiplier + + 2.9846153259277344 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 4.2061538696289062 + 0.0010000000474974513 + -0.44246155023574829 + 1 + + haze_density + + 2.8830769062042236 + 0 + 0 + 1 + + haze_horizon + + 0.49740666151046753 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.86074197292327881 + -0.50904154777526855 + 0 + + max_y + + 600 + 0 + 0 + 1 + + preset_num + 10 + star_brightness + 0 + sun_angle + 2.1048672199249268 + sunlight_color + + 0.88526362180709839 + 1.2300000190734863 + 1.2300000190734863 + 0.40999999642372131 + + + diff --git a/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml b/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml index 1036e6954..4925b29ee 100644 --- a/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml +++ b/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.89040267467498779 - 1.0580335855484009 - 1.4399999380111694 - 0.47999998927116394 - - blue_density - - 0.14522500336170197 - 0.39999699592590332 - 0.80000197887420654 - 1 - - blue_horizon - - 0.15130999684333801 - 0.30000001192092896 - 0.35131001472473145 - 1 - - cloud_color - - 0.21396400034427643 - 0.21396400034427643 - 0.21396400034427643 - 1 - - cloud_pos_density1 - - 0.16495099663734436 - 0.09771379828453064 - 1 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.079754598438739777 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 9.644780158996582 - 10.423800468444824 - - cloud_shadow - - 0.30061298608779907 - 0 - 0 - 1 - - density_multiplier - - 0.00015800200344529003 - 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.33000001311302185 - 1 - - haze_density - - 0.69999998807907104 - 0 - 0 - 1 - - haze_horizon - - 0.13210900127887726 - 0.13210900127887726 - 0.13210900127887726 - 1 - - lightnorm - - 0 - 0.031410444527864456 - -0.99950659275054932 - 0 - - max_y - - 600 - 0 - 0 - 1 - - preset_num - 3 - star_brightness - 0 - sun_angle - 3.1101770401000977 - sunlight_color - - 3 - 3 - 3 - 1 - - - + + + ambient + + 0.89040267467498779 + 1.0580335855484009 + 1.4399999380111694 + 0.47999998927116394 + + blue_density + + 0.14522500336170197 + 0.39999699592590332 + 0.80000197887420654 + 1 + + blue_horizon + + 0.15130999684333801 + 0.30000001192092896 + 0.35131001472473145 + 1 + + cloud_color + + 0.21396400034427643 + 0.21396400034427643 + 0.21396400034427643 + 1 + + cloud_pos_density1 + + 0.16495099663734436 + 0.09771379828453064 + 1 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.079754598438739777 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 9.644780158996582 + 10.423800468444824 + + cloud_shadow + + 0.30061298608779907 + 0 + 0 + 1 + + density_multiplier + + 0.00015800200344529003 + 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.33000001311302185 + 1 + + haze_density + + 0.69999998807907104 + 0 + 0 + 1 + + haze_horizon + + 0.13210900127887726 + 0.13210900127887726 + 0.13210900127887726 + 1 + + lightnorm + + 0 + 0.031410444527864456 + -0.99950659275054932 + 0 + + max_y + + 600 + 0 + 0 + 1 + + preset_num + 3 + star_brightness + 0 + sun_angle + 3.1101770401000977 + sunlight_color + + 3 + 3 + 3 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml b/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml index 41f6aafee..f4736cf4c 100644 --- a/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml +++ b/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.31535112857818604 - 0.37471914291381836 - 0.50999999046325684 - 0.17000000178813934 - - blue_density - - 0.11645399779081345 - 0.32075101137161255 - 0.64150899648666382 - 1 - - blue_horizon - - 0.054176401346921921 - 0.10741499811410904 - 0.12578600645065308 - 1 - - cloud_color - - 0.21396400034427643 - 0.21396400034427643 - 0.21396400034427643 - 1 - - cloud_pos_density1 - - 0.27044001221656799 - 1 - 1 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.10062900185585022 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 9.644780158996582 - 10.423800468444824 - - cloud_shadow - - 0.32704401016235352 - 0 - 0 - 1 - - density_multiplier - - 0.00015849100600462407 - 0 - 0 - 1 - - distance_multiplier - - 3.4000000953674316 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 6.867919921875 - 0.0013735899701714516 - -0.45328301191329956 - 1 - - haze_density - - 0.6792449951171875 - 0 - 0 - 1 - - haze_horizon - - 0.13210900127887726 - 0.13210900127887726 - 0.13210900127887726 - 1 - - lightnorm - - 0 - 0.031410444527864456 - -0.99950659275054932 - 0 - - max_y - - 1308.1800537109375 - 0 - 0 - 1 - - preset_num - 5 - star_brightness - 0 - sun_angle - 3.1101770401000977 - sunlight_color - - 3 - 3 - 3 - 1 - - - + + + ambient + + 0.31535112857818604 + 0.37471914291381836 + 0.50999999046325684 + 0.17000000178813934 + + blue_density + + 0.11645399779081345 + 0.32075101137161255 + 0.64150899648666382 + 1 + + blue_horizon + + 0.054176401346921921 + 0.10741499811410904 + 0.12578600645065308 + 1 + + cloud_color + + 0.21396400034427643 + 0.21396400034427643 + 0.21396400034427643 + 1 + + cloud_pos_density1 + + 0.27044001221656799 + 1 + 1 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.10062900185585022 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 9.644780158996582 + 10.423800468444824 + + cloud_shadow + + 0.32704401016235352 + 0 + 0 + 1 + + density_multiplier + + 0.00015849100600462407 + 0 + 0 + 1 + + distance_multiplier + + 3.4000000953674316 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 6.867919921875 + 0.0013735899701714516 + -0.45328301191329956 + 1 + + haze_density + + 0.6792449951171875 + 0 + 0 + 1 + + haze_horizon + + 0.13210900127887726 + 0.13210900127887726 + 0.13210900127887726 + 1 + + lightnorm + + 0 + 0.031410444527864456 + -0.99950659275054932 + 0 + + max_y + + 1308.1800537109375 + 0 + 0 + 1 + + preset_num + 5 + star_brightness + 0 + sun_angle + 3.1101770401000977 + sunlight_color + + 3 + 3 + 3 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Default.xml b/indra/newview/app_settings/windlight/skies/Default.xml index d2d62e65b..13a2c7504 100644 --- a/indra/newview/app_settings/windlight/skies/Default.xml +++ b/indra/newview/app_settings/windlight/skies/Default.xml @@ -1,141 +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 - 0.91269159317016602 - -0.40864911675453186 - 0 - - max_y - - 1605 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 0 - sun_angle - 1.9917697906494141 - sunlight_color - - 0.7342105507850647 - 0.78157895803451538 - 0.89999997615814209 - 0.29999998211860657 - - - + + + 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 + 0.91269159317016602 + -0.40864911675453186 + 0 + + max_y + + 1605 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 0 + sun_angle + 1.9917697906494141 + sunlight_color + + 0.7342105507850647 + 0.78157895803451538 + 0.89999997615814209 + 0.29999998211860657 + + + diff --git a/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml b/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml index 89f8c36cb..b2a611163 100644 --- a/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml +++ b/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.07420019805431366 - 0.088169597089290619 - 0.11999999731779099 - 1 - - 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 - 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.37999999523162842 - 0 - 0 - 1 - - density_multiplier - - 0.00046000001020729542 - 0 - 0 - 1 - - distance_multiplier - - 2 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.6100000143051147 - 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.062790460884571075 - -0.99802672863006592 - 0 - - max_y - - 562.5 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 0 - sun_angle - 3.0787608623504639 - sunlight_color - - 2.8385701179504395 - 2.8385701179504395 - 2.8385701179504395 - 1 - - - + + + ambient + + 0.07420019805431366 + 0.088169597089290619 + 0.11999999731779099 + 1 + + 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 + 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.37999999523162842 + 0 + 0 + 1 + + density_multiplier + + 0.00046000001020729542 + 0 + 0 + 1 + + distance_multiplier + + 2 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.6100000143051147 + 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.062790460884571075 + -0.99802672863006592 + 0 + + max_y + + 562.5 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 0 + sun_angle + 3.0787608623504639 + sunlight_color + + 2.8385701179504395 + 2.8385701179504395 + 2.8385701179504395 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Fine%20Day.xml b/indra/newview/app_settings/windlight/skies/Fine%20Day.xml index 0d6d1db39..e053815be 100644 --- a/indra/newview/app_settings/windlight/skies/Fine%20Day.xml +++ b/indra/newview/app_settings/windlight/skies/Fine%20Day.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.21194984018802643 - 0.25700280070304871 - 0.25999999046325684 - 0.25999999046325684 - - blue_density - - 0.10031381994485855 - 0.2849995493888855 - 0.56999999284744263 - 0.56999999284744263 - - blue_horizon - - 0.15806557238101959 - 0.31211116909980774 - 0.52999997138977051 - 0.52999997138977051 - - cloud_color - - 0.62000000476837158 - 0.72737622261047363 - 0.73626559972763062 - 1 - - cloud_pos_density1 - - 0.89999997615814209 - 0.93999999761581421 - 0.74000000953674316 - 1 - - cloud_pos_density2 - - 0.11999999731779099 - 0.20999999344348907 - 0.029999999329447746 - 1 - - cloud_scale - - 0.25999999046325684 - 0 - 0 - 1 - - cloud_scroll_rate - - 9.993240904292179 - 10.010000228881836 - - cloud_shadow - - 0.29999998211860657 - 0 - 0 - 1 - - density_multiplier - - 0.00013000000035390258 - 0 - 0 - 1 - - distance_multiplier - - 10.100000381469727 - 0 - 0 - 1 - - east_angle - 3.8955750465393066 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.4699999094009399 - 0 - 0 - 1 - - glow - - 11.200000762939453 - 0.0010000000474974513 - -0.64999997615814209 - 1 - - haze_density - - 0.35999998450279236 - 0 - 0 - 1 - - haze_horizon - - 0.11999999731779099 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0.66304093599319458 - 0.24868990480899811 - -0.70606660842895508 - 0 - - max_y - - 789 - 0 - 0 - 1 - - preset_num - 24 - star_brightness - 0.18999999761581421 - sun_angle - 0.25132742524147034 - sunlight_color - - 2.25 - 1.2599999904632568 - 0.59999996423721313 - 2.25 - - - + + + ambient + + 0.21194984018802643 + 0.25700280070304871 + 0.25999999046325684 + 0.25999999046325684 + + blue_density + + 0.10031381994485855 + 0.2849995493888855 + 0.56999999284744263 + 0.56999999284744263 + + blue_horizon + + 0.15806557238101959 + 0.31211116909980774 + 0.52999997138977051 + 0.52999997138977051 + + cloud_color + + 0.62000000476837158 + 0.72737622261047363 + 0.73626559972763062 + 1 + + cloud_pos_density1 + + 0.89999997615814209 + 0.93999999761581421 + 0.74000000953674316 + 1 + + cloud_pos_density2 + + 0.11999999731779099 + 0.20999999344348907 + 0.029999999329447746 + 1 + + cloud_scale + + 0.25999999046325684 + 0 + 0 + 1 + + cloud_scroll_rate + + 9.993240904292179 + 10.010000228881836 + + cloud_shadow + + 0.29999998211860657 + 0 + 0 + 1 + + density_multiplier + + 0.00013000000035390258 + 0 + 0 + 1 + + distance_multiplier + + 10.100000381469727 + 0 + 0 + 1 + + east_angle + 3.8955750465393066 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.4699999094009399 + 0 + 0 + 1 + + glow + + 11.200000762939453 + 0.0010000000474974513 + -0.64999997615814209 + 1 + + haze_density + + 0.35999998450279236 + 0 + 0 + 1 + + haze_horizon + + 0.11999999731779099 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0.66304093599319458 + 0.24868990480899811 + -0.70606660842895508 + 0 + + max_y + + 789 + 0 + 0 + 1 + + preset_num + 24 + star_brightness + 0.18999999761581421 + sun_angle + 0.25132742524147034 + sunlight_color + + 2.25 + 1.2599999904632568 + 0.59999996423721313 + 2.25 + + + diff --git a/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml b/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml index 9b5ad5a92..8576ec125 100644 --- a/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml +++ b/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.029999999329447746 - 0 - 0 - 0.029999999329447746 - - blue_density - - 0.097999997437000275 - 0.2800000011920929 - 1 - 1 - - blue_horizon - - 0.11999999731779099 - 0.35094299912452698 - 1 - 1 - - cloud_color - - 0.48999997973442078 - 0.79000002145767212 - 0.80000001192092896 - 1 - - cloud_pos_density1 - - 0.53999996185302734 - 0.5 - 0.75999999046325684 - 1 - - cloud_pos_density2 - - 0.38999998569488525 - 0.5 - 0.039999999105930328 - 1 - - cloud_scale - - 0.43999999761581421 - 0 - 0 - 1 - - cloud_scroll_rate - - 11.809999465942383 - 12.799999237060547 - - cloud_shadow - - 0.32999998331069946 - 0 - 0 - 1 - - density_multiplier - - 0.00021999998716637492 - 0 - 0 - 1 - - distance_multiplier - - 4 - 0 - 0 - 1 - - east_angle - 3.2044246196746826 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.5399999618530273 - 0 - 0 - 1 - - glow - - 3.8000010331979865 - 0.001000000059761974 - -0.49999996688498527 - 1 - - haze_density - - 0.20999999344348907 - 0 - 0 - 1 - - haze_horizon - - 0.049999997019767761 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0.056814663112163544 - 0.42577928304672241 - -0.90304160118103027 - 0 - - max_y - - 676.10003662109375 - 0 - 0 - 1 - - preset_num - 18 - star_brightness - 0.44999998807907104 - sun_angle - 0.4398229718208313 - sunlight_color - - 1.7999999523162842 - 1.4099999666213989 - 1.0199999809265137 - 1.7999999523162842 - - - + + + ambient + + 0.029999999329447746 + 0 + 0 + 0.029999999329447746 + + blue_density + + 0.097999997437000275 + 0.2800000011920929 + 1 + 1 + + blue_horizon + + 0.11999999731779099 + 0.35094299912452698 + 1 + 1 + + cloud_color + + 0.48999997973442078 + 0.79000002145767212 + 0.80000001192092896 + 1 + + cloud_pos_density1 + + 0.53999996185302734 + 0.5 + 0.75999999046325684 + 1 + + cloud_pos_density2 + + 0.38999998569488525 + 0.5 + 0.039999999105930328 + 1 + + cloud_scale + + 0.43999999761581421 + 0 + 0 + 1 + + cloud_scroll_rate + + 11.809999465942383 + 12.799999237060547 + + cloud_shadow + + 0.32999998331069946 + 0 + 0 + 1 + + density_multiplier + + 0.00021999998716637492 + 0 + 0 + 1 + + distance_multiplier + + 4 + 0 + 0 + 1 + + east_angle + 3.2044246196746826 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.5399999618530273 + 0 + 0 + 1 + + glow + + 3.8000010331979865 + 0.001000000059761974 + -0.49999996688498527 + 1 + + haze_density + + 0.20999999344348907 + 0 + 0 + 1 + + haze_horizon + + 0.049999997019767761 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0.056814663112163544 + 0.42577928304672241 + -0.90304160118103027 + 0 + + max_y + + 676.10003662109375 + 0 + 0 + 1 + + preset_num + 18 + star_brightness + 0.44999998807907104 + sun_angle + 0.4398229718208313 + sunlight_color + + 1.7999999523162842 + 1.4099999666213989 + 1.0199999809265137 + 1.7999999523162842 + + + diff --git a/indra/newview/app_settings/windlight/skies/Foggy.xml b/indra/newview/app_settings/windlight/skies/Foggy.xml index 88f55f612..cb7395d58 100644 --- a/indra/newview/app_settings/windlight/skies/Foggy.xml +++ b/indra/newview/app_settings/windlight/skies/Foggy.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.32999998331069946 - 0.32999998331069946 - 0.32999998331069946 - 0.10999999940395355 - - blue_density - - 0.14522500336170197 - 0.39999699592590332 - 0.80000197887420654 - 1 - - blue_horizon - - 0.43070214986801147 - 0.85394668579101563 - 1 - 1 - - 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.0003499999875202775 - 0 - 0 - 1 - - distance_multiplier - - 4 - 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 - - 600 - 0 - 0 - 1 - - preset_num - 18 - star_brightness - 0 - sun_angle - 1.5707963705062866 - sunlight_color - - 0.53999996185302734 - 0.53999996185302734 - 0.53999996185302734 - 0.17999999225139618 - - - + + + ambient + + 0.32999998331069946 + 0.32999998331069946 + 0.32999998331069946 + 0.10999999940395355 + + blue_density + + 0.14522500336170197 + 0.39999699592590332 + 0.80000197887420654 + 1 + + blue_horizon + + 0.43070214986801147 + 0.85394668579101563 + 1 + 1 + + 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.0003499999875202775 + 0 + 0 + 1 + + distance_multiplier + + 4 + 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 + + 600 + 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/Funky%20Funky%20Funky.xml b/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml index aad702b2d..32be0d25e 100644 --- a/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml +++ b/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.29999998211860657 - 0.23511900007724762 - 0.31999999284744263 - 1 - - blue_density - - 0.13977900147438049 - 0.38499599695205688 - 0.76999998092651367 - 1 - - blue_horizon - - 0.18999999761581421 - 0.18999999761581421 - 0.18999999761581421 - 1 - - cloud_color - - 0.22615399956703186 - 0.22615399956703186 - 0.22615399956703186 - 1 - - cloud_pos_density1 - - 5.3780298233032227 - 1.9675600528717041 - 1 - 1 - - cloud_pos_density2 - - 5.3780298233032227 - 1.9675600528717041 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.739999771118164 - 10.600000381469727 - - cloud_shadow - - 0.31000000238418579 - 0 - 0 - 1 - - density_multiplier - - 0.00052000000141561031 - 0 - 0 - 1 - - distance_multiplier - - 3.4000000953674316 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 0.77999997138977051 - 0 - 0 - 1 - - glow - - 5 - 0.0010000000474974513 - -0.47999998927116394 - 1 - - haze_density - - 1.1000000238418579 - 0 - 0 - 1 - - haze_horizon - - 0.12999999523162842 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.53582650423049927 - -0.84432810544967651 - 0 - - max_y - - 656.20001220703125 - 0 - 0 - 1 - - preset_num - 28 - star_brightness - 0 - sun_angle - 2.5761063098907471 - sunlight_color - - 2.1299998760223389 - 1.5299999713897705 - 2.8385701179504395 - 1 - - - + + + ambient + + 0.29999998211860657 + 0.23511900007724762 + 0.31999999284744263 + 1 + + blue_density + + 0.13977900147438049 + 0.38499599695205688 + 0.76999998092651367 + 1 + + blue_horizon + + 0.18999999761581421 + 0.18999999761581421 + 0.18999999761581421 + 1 + + cloud_color + + 0.22615399956703186 + 0.22615399956703186 + 0.22615399956703186 + 1 + + cloud_pos_density1 + + 5.3780298233032227 + 1.9675600528717041 + 1 + 1 + + cloud_pos_density2 + + 5.3780298233032227 + 1.9675600528717041 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.739999771118164 + 10.600000381469727 + + cloud_shadow + + 0.31000000238418579 + 0 + 0 + 1 + + density_multiplier + + 0.00052000000141561031 + 0 + 0 + 1 + + distance_multiplier + + 3.4000000953674316 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 0.77999997138977051 + 0 + 0 + 1 + + glow + + 5 + 0.0010000000474974513 + -0.47999998927116394 + 1 + + haze_density + + 1.1000000238418579 + 0 + 0 + 1 + + haze_horizon + + 0.12999999523162842 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.53582650423049927 + -0.84432810544967651 + 0 + + max_y + + 656.20001220703125 + 0 + 0 + 1 + + preset_num + 28 + star_brightness + 0 + sun_angle + 2.5761063098907471 + sunlight_color + + 2.1299998760223389 + 1.5299999713897705 + 2.8385701179504395 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml b/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml index 7b3c31251..ae16b2d13 100644 --- a/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml +++ b/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.32999998331069946 - 0.32999998331069946 - 0.32999998331069946 - 0.10999999940395355 - - blue_density - - 0.14522500336170197 - 0.39999699592590332 - 0.80000197887420654 - 1 - - blue_horizon - - 0.15130999684333801 - 0.30000001192092896 - 0.35131001472473145 - 1 - - cloud_color - - 0.22615399956703186 - 0.22615399956703186 - 0.22615399956703186 - 1 - - cloud_pos_density1 - - 0.65280699729919434 - 0.50335597991943359 - 1 - 1 - - cloud_pos_density2 - - 0.65280699729919434 - 0.50335597991943359 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.49940013885498 - 10.01099967956543 - - cloud_shadow - - 0.33064401149749756 - 0 - 0 - 1 - - density_multiplier - - 0.0003499999875202775 - 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.33000001311302185 - 1 - - haze_density - - 0.69999998807907104 - 0 - 0 - 1 - - haze_horizon - - 0.19915600121021271 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.062790460884571075 - -0.99802672863006592 - 0 - - max_y - - 600 - 0 - 0 - 1 - - preset_num - 11 - star_brightness - 0 - sun_angle - 3.0787608623504639 - sunlight_color - - 0.86811381578445435 - 2.2200000286102295 - 2.2200000286102295 - 0.74000000953674316 - - - + + + ambient + + 0.32999998331069946 + 0.32999998331069946 + 0.32999998331069946 + 0.10999999940395355 + + blue_density + + 0.14522500336170197 + 0.39999699592590332 + 0.80000197887420654 + 1 + + blue_horizon + + 0.15130999684333801 + 0.30000001192092896 + 0.35131001472473145 + 1 + + cloud_color + + 0.22615399956703186 + 0.22615399956703186 + 0.22615399956703186 + 1 + + cloud_pos_density1 + + 0.65280699729919434 + 0.50335597991943359 + 1 + 1 + + cloud_pos_density2 + + 0.65280699729919434 + 0.50335597991943359 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.49940013885498 + 10.01099967956543 + + cloud_shadow + + 0.33064401149749756 + 0 + 0 + 1 + + density_multiplier + + 0.0003499999875202775 + 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.33000001311302185 + 1 + + haze_density + + 0.69999998807907104 + 0 + 0 + 1 + + haze_horizon + + 0.19915600121021271 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.062790460884571075 + -0.99802672863006592 + 0 + + max_y + + 600 + 0 + 0 + 1 + + preset_num + 11 + star_brightness + 0 + sun_angle + 3.0787608623504639 + sunlight_color + + 0.86811381578445435 + 2.2200000286102295 + 2.2200000286102295 + 0.74000000953674316 + + + diff --git a/indra/newview/app_settings/windlight/skies/Gelatto.xml b/indra/newview/app_settings/windlight/skies/Gelatto.xml index 92b4fd682..66b3d317b 100644 --- a/indra/newview/app_settings/windlight/skies/Gelatto.xml +++ b/indra/newview/app_settings/windlight/skies/Gelatto.xml @@ -1,141 +1,141 @@ - - - ambient - - 0 - 0.15999999642372131 - 0 - 0.15999999642372131 - - blue_density - - 0.019999999552965164 - 0.22999770939350128 - 0.45999997854232788 - 0.55000001192092896 - - blue_horizon - - 0 - 0.6319204568862915 - 0.74000000953674316 - 0.84999996423721313 - - cloud_color - - 1 - 0 - 0 - 1 - - cloud_pos_density1 - - 0.53999996185302734 - 0.50999999046325684 - 0.23999999463558197 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.059999998658895493 - 1 - - cloud_scale - - 0.2800000011920929 - 0 - 0 - 1 - - cloud_scroll_rate - - 20 - 20 - - cloud_shadow - - 0.32999998331069946 - 0 - 0 - 1 - - density_multiplier - - 0.00016999999934341758 - 0 - 0 - 1 - - distance_multiplier - - 8.1000003814697266 - 0 - 0 - 1 - - east_angle - 3.7699110507965088 - enable_cloud_scroll - - 0 - 0 - - gamma - - 1.5399999618530273 - 0 - 0 - 1 - - glow - - 0.39999961853027344 - 0.0010000000474974513 - -0.49999997019767761 - 1 - - haze_density - - 3.2599999904632568 - 0 - 0 - 1 - - haze_horizon - - 0.4699999988079071 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0.58749508857727051 - -0.031410761177539825 - -0.80861783027648926 - 0 - - max_y - - 1267.5999755859375 - 0 - 0 - 1 - - preset_num - 18 - star_brightness - 0 - sun_angle - -0.031415928155183792 - sunlight_color - - 0.75 - 0.71999996900558472 - 0.37800011038780212 - 0.80999994277954102 - - - + + + ambient + + 0 + 0.15999999642372131 + 0 + 0.15999999642372131 + + blue_density + + 0.019999999552965164 + 0.22999770939350128 + 0.45999997854232788 + 0.55000001192092896 + + blue_horizon + + 0 + 0.6319204568862915 + 0.74000000953674316 + 0.84999996423721313 + + cloud_color + + 1 + 0 + 0 + 1 + + cloud_pos_density1 + + 0.53999996185302734 + 0.50999999046325684 + 0.23999999463558197 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.059999998658895493 + 1 + + cloud_scale + + 0.2800000011920929 + 0 + 0 + 1 + + cloud_scroll_rate + + 20 + 20 + + cloud_shadow + + 0.32999998331069946 + 0 + 0 + 1 + + density_multiplier + + 0.00016999999934341758 + 0 + 0 + 1 + + distance_multiplier + + 8.1000003814697266 + 0 + 0 + 1 + + east_angle + 3.7699110507965088 + enable_cloud_scroll + + 0 + 0 + + gamma + + 1.5399999618530273 + 0 + 0 + 1 + + glow + + 0.39999961853027344 + 0.0010000000474974513 + -0.49999997019767761 + 1 + + haze_density + + 3.2599999904632568 + 0 + 0 + 1 + + haze_horizon + + 0.4699999988079071 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0.58749508857727051 + -0.031410761177539825 + -0.80861783027648926 + 0 + + max_y + + 1267.5999755859375 + 0 + 0 + 1 + + preset_num + 18 + star_brightness + 0 + sun_angle + -0.031415928155183792 + sunlight_color + + 0.75 + 0.71999996900558472 + 0.37800011038780212 + 0.80999994277954102 + + + diff --git a/indra/newview/app_settings/windlight/skies/Ghost.xml b/indra/newview/app_settings/windlight/skies/Ghost.xml index 065b9e5d5..447202ed5 100644 --- a/indra/newview/app_settings/windlight/skies/Ghost.xml +++ b/indra/newview/app_settings/windlight/skies/Ghost.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.23999999463558197 - 0.23999999463558197 - 0.23999999463558197 - 0.079999998211860657 - - blue_density - - 0.16700799763202667 - 0.45999500155448914 - 0.92000001668930054 - 1 - - blue_horizon - - 0.18089599907398224 - 0.35865798592567444 - 0.41999998688697815 - 1 - - cloud_color - - 0.40999999642372131 - 0.40999999642372131 - 0.40999999642372131 - 1 - - cloud_pos_density1 - - 0.5 - 0.5 - 1 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 11.539999961853027 - 10.01099967956543 - - cloud_shadow - - 0.36000001430511475 - 0 - 0 - 1 - - density_multiplier - - 0.00042999998549930751 - 0 - 0 - 1 - - distance_multiplier - - 8.1000003814697266 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 5 - 0.0010000000474974513 - -0.51999998092651367 - 1 - - haze_density - - 0.75 - 0 - 0 - 1 - - haze_horizon - - 0.18000000715255737 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.89100658893585205 - 0.45399042963981628 - 0 - - max_y - - 718.70001220703125 - 0 - 0 - 1 - - preset_num - 23 - star_brightness - 2 - sun_angle - 1.0995575189590454 - sunlight_color - - 0.33000001311302185 - 0.33000001311302185 - 0.33000001311302185 - 1 - - - + + + ambient + + 0.23999999463558197 + 0.23999999463558197 + 0.23999999463558197 + 0.079999998211860657 + + blue_density + + 0.16700799763202667 + 0.45999500155448914 + 0.92000001668930054 + 1 + + blue_horizon + + 0.18089599907398224 + 0.35865798592567444 + 0.41999998688697815 + 1 + + cloud_color + + 0.40999999642372131 + 0.40999999642372131 + 0.40999999642372131 + 1 + + cloud_pos_density1 + + 0.5 + 0.5 + 1 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 11.539999961853027 + 10.01099967956543 + + cloud_shadow + + 0.36000001430511475 + 0 + 0 + 1 + + density_multiplier + + 0.00042999998549930751 + 0 + 0 + 1 + + distance_multiplier + + 8.1000003814697266 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 5 + 0.0010000000474974513 + -0.51999998092651367 + 1 + + haze_density + + 0.75 + 0 + 0 + 1 + + haze_horizon + + 0.18000000715255737 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.89100658893585205 + 0.45399042963981628 + 0 + + max_y + + 718.70001220703125 + 0 + 0 + 1 + + preset_num + 23 + star_brightness + 2 + sun_angle + 1.0995575189590454 + sunlight_color + + 0.33000001311302185 + 0.33000001311302185 + 0.33000001311302185 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml b/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml index 191f6f48a..098844e16 100644 --- a/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml +++ b/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml @@ -1,141 +1,141 @@ - - - ambient - - 0 - 0 - 0.44999998807907104 - 0.44999998807907104 - - blue_density - - 0.13997539444089213 - 0.38665792478461469 - 0.77332294252195766 - 0.95108884837904384 - - blue_horizon - - 0 - 0.22876684367656708 - 0.290018230676651 - 0.31999999284744263 - - cloud_color - - 0.25999999046325684 - 0.28883209824562073 - 0.28994369506835938 - 0.28999999165534973 - - cloud_pos_density1 - - 0.17999999225139618 - 0.50999999046325684 - 0.91999995708465576 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.079999998211860657 - 1 - - cloud_scale - - 0.25 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.436104517528292 - 10 - - cloud_shadow - - 0.34000000357627869 - 0 - 0 - 1 - - density_multiplier - - 0.0002899999963119626 - 0 - 0 - 1 - - distance_multiplier - - 1.3000000715255737 - 0 - 0 - 1 - - east_angle - 2.2619466781616211 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.5399999618530273 - 0 - 0 - 1 - - glow - - 4.0000009536743164 - 0.0010000000474974513 - -0.74999994039535522 - 1 - - haze_density - - 0.12999999523162842 - 0 - 0 - 1 - - haze_horizon - - 0.14999999105930328 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - -0.74630612134933472 - 0.24868990480899811 - -0.61739814281463623 - 0 - - max_y - - 394.39999389648437 - 0 - 0 - 1 - - preset_num - 18 - star_brightness - 0.44999998807907104 - sun_angle - 0.25132742524147034 - sunlight_color - - 2.25 - 1.957500696182251 - 1.170000433921814 - 0.75 - - - + + + ambient + + 0 + 0 + 0.44999998807907104 + 0.44999998807907104 + + blue_density + + 0.13997539444089213 + 0.38665792478461469 + 0.77332294252195766 + 0.95108884837904384 + + blue_horizon + + 0 + 0.22876684367656708 + 0.290018230676651 + 0.31999999284744263 + + cloud_color + + 0.25999999046325684 + 0.28883209824562073 + 0.28994369506835938 + 0.28999999165534973 + + cloud_pos_density1 + + 0.17999999225139618 + 0.50999999046325684 + 0.91999995708465576 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.079999998211860657 + 1 + + cloud_scale + + 0.25 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.436104517528292 + 10 + + cloud_shadow + + 0.34000000357627869 + 0 + 0 + 1 + + density_multiplier + + 0.0002899999963119626 + 0 + 0 + 1 + + distance_multiplier + + 1.3000000715255737 + 0 + 0 + 1 + + east_angle + 2.2619466781616211 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.5399999618530273 + 0 + 0 + 1 + + glow + + 4.0000009536743164 + 0.0010000000474974513 + -0.74999994039535522 + 1 + + haze_density + + 0.12999999523162842 + 0 + 0 + 1 + + haze_horizon + + 0.14999999105930328 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + -0.74630612134933472 + 0.24868990480899811 + -0.61739814281463623 + 0 + + max_y + + 394.39999389648437 + 0 + 0 + 1 + + preset_num + 18 + star_brightness + 0.44999998807907104 + sun_angle + 0.25132742524147034 + sunlight_color + + 2.25 + 1.957500696182251 + 1.170000433921814 + 0.75 + + + diff --git a/indra/newview/app_settings/windlight/skies/Midday%201.xml b/indra/newview/app_settings/windlight/skies/Midday%201.xml index d2d62e65b..13a2c7504 100644 --- a/indra/newview/app_settings/windlight/skies/Midday%201.xml +++ b/indra/newview/app_settings/windlight/skies/Midday%201.xml @@ -1,141 +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 - 0.91269159317016602 - -0.40864911675453186 - 0 - - max_y - - 1605 - 0 - 0 - 1 - - preset_num - 22 - star_brightness - 0 - sun_angle - 1.9917697906494141 - sunlight_color - - 0.7342105507850647 - 0.78157895803451538 - 0.89999997615814209 - 0.29999998211860657 - - - + + + 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 + 0.91269159317016602 + -0.40864911675453186 + 0 + + max_y + + 1605 + 0 + 0 + 1 + + preset_num + 22 + star_brightness + 0 + sun_angle + 1.9917697906494141 + sunlight_color + + 0.7342105507850647 + 0.78157895803451538 + 0.89999997615814209 + 0.29999998211860657 + + + diff --git a/indra/newview/app_settings/windlight/skies/Midday%202.xml b/indra/newview/app_settings/windlight/skies/Midday%202.xml index 3fb21f2e4..04f2ba85e 100644 --- a/indra/newview/app_settings/windlight/skies/Midday%202.xml +++ b/indra/newview/app_settings/windlight/skies/Midday%202.xml @@ -1,141 +1,141 @@ - - - ambient - - 0 - 0 - 0 - 0 - - blue_density - - 0.14522500336170197 - 0.39999699592590332 - 0.80000197887420654 - 1 - - blue_horizon - - 0.43070214986801147 - 0.85394668579101563 - 1 - 1 - - cloud_color - - 0.69999998807907104 - 0.69999998807907104 - 0.69999998807907104 - 1 - - 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.199999809265137 - 10.069999694824219 - - cloud_shadow - - 0.22999998927116394 - 0 - 0 - 1 - - density_multiplier - - 0.0003499999875202775 - 0 - 0 - 1 - - distance_multiplier - - 0 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.6100000143051147 - 0 - 0 - 1 - - glow - - 3.7999999523162842 - 0.0010000000474974513 - -0.5 - 1 - - haze_density - - 0.69999998807907104 - 0 - 0 - 1 - - haze_horizon - - 0.41999998688697815 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 1 - -4.3711388286737929e-008 - 0 - - max_y - - 600 - 0 - 0 - 1 - - preset_num - -1163005939 - star_brightness - 0 - sun_angle - 1.5707963705062866 - sunlight_color - - 0.80999994277954102 - 0.80999994277954102 - 0.80999994277954102 - 0.26999998092651367 - - - + + + ambient + + 0 + 0 + 0 + 0 + + blue_density + + 0.14522500336170197 + 0.39999699592590332 + 0.80000197887420654 + 1 + + blue_horizon + + 0.43070214986801147 + 0.85394668579101563 + 1 + 1 + + cloud_color + + 0.69999998807907104 + 0.69999998807907104 + 0.69999998807907104 + 1 + + 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.199999809265137 + 10.069999694824219 + + cloud_shadow + + 0.22999998927116394 + 0 + 0 + 1 + + density_multiplier + + 0.0003499999875202775 + 0 + 0 + 1 + + distance_multiplier + + 0 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.6100000143051147 + 0 + 0 + 1 + + glow + + 3.7999999523162842 + 0.0010000000474974513 + -0.5 + 1 + + haze_density + + 0.69999998807907104 + 0 + 0 + 1 + + haze_horizon + + 0.41999998688697815 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 1 + -4.3711388286737929e-008 + 0 + + max_y + + 600 + 0 + 0 + 1 + + preset_num + -1163005939 + star_brightness + 0 + sun_angle + 1.5707963705062866 + sunlight_color + + 0.80999994277954102 + 0.80999994277954102 + 0.80999994277954102 + 0.26999998092651367 + + + diff --git a/indra/newview/app_settings/windlight/skies/Midday%203.xml b/indra/newview/app_settings/windlight/skies/Midday%203.xml index c1dfa5505..a23dcab60 100644 --- a/indra/newview/app_settings/windlight/skies/Midday%203.xml +++ b/indra/newview/app_settings/windlight/skies/Midday%203.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.33000001311302185 - 0.33000001311302185 - 0.33000001311302185 - 1 - - blue_density - - 0.16449999809265137 - 0.4699999988079071 - 0.93999999761581421 - 1 - - blue_horizon - - 0.17547200620174408 - 0.35094299912452698 - 0.62000000476837158 - 1 - - cloud_color - - 0.5899999737739563 - 0.79000002145767212 - 0.80000001192092896 - 1 - - cloud_pos_density1 - - 2.8148899078369141 - 5.6909198760986328 - 1 - 1 - - cloud_pos_density2 - - 5.9584097862243652 - 6.9909601211547852 - 0.070000000298023224 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 9.9300003051757813 - 10.199999809265137 - - cloud_shadow - - 0.25999999046325684 - 0 - 0 - 1 - - density_multiplier - - 0.00039000000106170774 - 0 - 0 - 1 - - distance_multiplier - - 0.69999998807907104 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.6100000143051147 - 0 - 0 - 1 - - glow - - 5 - 0.0010000000474974513 - -1.1599999666213989 - 1 - - haze_density - - 0.20999999344348907 - 0 - 0 - 1 - - haze_horizon - - 0.11999999731779099 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 1 - -4.3711388286737929e-008 - 0 - - max_y - - 2250 - 0 - 0 - 1 - - preset_num - 24 - star_brightness - 0 - sun_angle - 1.5707963705062866 - sunlight_color - - 1.2599999904632568 - 1.2599999904632568 - 1.2599999904632568 - 1 - - - + + + ambient + + 0.33000001311302185 + 0.33000001311302185 + 0.33000001311302185 + 1 + + blue_density + + 0.16449999809265137 + 0.4699999988079071 + 0.93999999761581421 + 1 + + blue_horizon + + 0.17547200620174408 + 0.35094299912452698 + 0.62000000476837158 + 1 + + cloud_color + + 0.5899999737739563 + 0.79000002145767212 + 0.80000001192092896 + 1 + + cloud_pos_density1 + + 2.8148899078369141 + 5.6909198760986328 + 1 + 1 + + cloud_pos_density2 + + 5.9584097862243652 + 6.9909601211547852 + 0.070000000298023224 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 9.9300003051757813 + 10.199999809265137 + + cloud_shadow + + 0.25999999046325684 + 0 + 0 + 1 + + density_multiplier + + 0.00039000000106170774 + 0 + 0 + 1 + + distance_multiplier + + 0.69999998807907104 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.6100000143051147 + 0 + 0 + 1 + + glow + + 5 + 0.0010000000474974513 + -1.1599999666213989 + 1 + + haze_density + + 0.20999999344348907 + 0 + 0 + 1 + + haze_horizon + + 0.11999999731779099 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 1 + -4.3711388286737929e-008 + 0 + + max_y + + 2250 + 0 + 0 + 1 + + preset_num + 24 + star_brightness + 0 + sun_angle + 1.5707963705062866 + sunlight_color + + 1.2599999904632568 + 1.2599999904632568 + 1.2599999904632568 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Midday%204.xml b/indra/newview/app_settings/windlight/skies/Midday%204.xml index d0b1425c2..255e314e0 100644 --- a/indra/newview/app_settings/windlight/skies/Midday%204.xml +++ b/indra/newview/app_settings/windlight/skies/Midday%204.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.33000001311302185 - 0.33000001311302185 - 0.33000001311302185 - 1 - - blue_density - - 0.097999997437000275 - 0.2800000011920929 - 0.56000000238418579 - 0.56000000238418579 - - blue_horizon - - 0.17547200620174408 - 0.35094299912452698 - 0.61000001430511475 - 0.61000001430511475 - - cloud_color - - 0.5899999737739563 - 0.79000002145767212 - 0.80000001192092896 - 1 - - cloud_pos_density1 - - 2.8148899078369141 - 5.6909198760986328 - 1 - 1 - - cloud_pos_density2 - - 5.9584097862243652 - 6.9909601211547852 - 0.070000000298023224 - 1 - - cloud_scale - - 0.32999998331069946 - 0 - 0 - 1 - - cloud_scroll_rate - - 9.9300003051757813 - 10.199999809265137 - - cloud_shadow - - 0.22999998927116394 - 0 - 0 - 1 - - density_multiplier - - 0.00039000000106170774 - 0 - 0 - 1 - - distance_multiplier - - 0.69999998807907104 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.6100000143051147 - 0 - 0 - 1 - - glow - - 3.8000011444091797 - 0.0010000000474974513 - -0.49999997019767761 - 1 - - haze_density - - 0.20999999344348907 - 0 - 0 - 1 - - haze_horizon - - 0.19999998807907104 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 1 - -4.3711388286737929e-008 - 0 - - max_y - - 1802.800048828125 - 0 - 0 - 1 - - preset_num - 24 - star_brightness - 0 - sun_angle - 1.5707963705062866 - sunlight_color - - 1.2599999904632568 - 1.2599999904632568 - 1.2599999904632568 - 0.41999998688697815 - - - + + + ambient + + 0.33000001311302185 + 0.33000001311302185 + 0.33000001311302185 + 1 + + blue_density + + 0.097999997437000275 + 0.2800000011920929 + 0.56000000238418579 + 0.56000000238418579 + + blue_horizon + + 0.17547200620174408 + 0.35094299912452698 + 0.61000001430511475 + 0.61000001430511475 + + cloud_color + + 0.5899999737739563 + 0.79000002145767212 + 0.80000001192092896 + 1 + + cloud_pos_density1 + + 2.8148899078369141 + 5.6909198760986328 + 1 + 1 + + cloud_pos_density2 + + 5.9584097862243652 + 6.9909601211547852 + 0.070000000298023224 + 1 + + cloud_scale + + 0.32999998331069946 + 0 + 0 + 1 + + cloud_scroll_rate + + 9.9300003051757813 + 10.199999809265137 + + cloud_shadow + + 0.22999998927116394 + 0 + 0 + 1 + + density_multiplier + + 0.00039000000106170774 + 0 + 0 + 1 + + distance_multiplier + + 0.69999998807907104 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.6100000143051147 + 0 + 0 + 1 + + glow + + 3.8000011444091797 + 0.0010000000474974513 + -0.49999997019767761 + 1 + + haze_density + + 0.20999999344348907 + 0 + 0 + 1 + + haze_horizon + + 0.19999998807907104 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 1 + -4.3711388286737929e-008 + 0 + + max_y + + 1802.800048828125 + 0 + 0 + 1 + + preset_num + 24 + star_brightness + 0 + sun_angle + 1.5707963705062866 + sunlight_color + + 1.2599999904632568 + 1.2599999904632568 + 1.2599999904632568 + 0.41999998688697815 + + + diff --git a/indra/newview/app_settings/windlight/skies/Night.xml b/indra/newview/app_settings/windlight/skies/Night.xml index 319a06f72..c4938949c 100644 --- a/indra/newview/app_settings/windlight/skies/Night.xml +++ b/indra/newview/app_settings/windlight/skies/Night.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.20405027105862608 - 0.24246673976617727 - 0.32999997392212316 - 0.11000000166951449 - - blue_density - - 0.44999999369830818 - 0.44999999398335949 - 0.4499999944309046 - 1 - - blue_horizon - - 0.23999999567946317 - 0.23999999579784967 - 0.23999999583870221 - 1 - - cloud_color - - 0.22615400241575034 - 0.22615400241575034 - 0.22615400241575034 - 1 - - cloud_pos_density1 - - 0.5 - 0.5 - 0.88000000953711155 - 1 - - cloud_pos_density2 - - 0.5 - 0.5 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.49940035411295 - 10.011000104431371 - - cloud_shadow - - 0.36000001430511475 - 0 - 0 - 1 - - density_multiplier - - 0.00030000001824737163 - 0 - 0 - 1 - - distance_multiplier - - 3.0208916693946743e-009 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 5 - 0.0010000000214212465 - -0.47999999165502744 - 1 - - haze_density - - 3.9999999963077992 - 0 - 0 - 1 - - haze_horizon - - 1.7901579546794781e-010 - 0.19915600437467304 - 0.19915600437467304 - 1 - - lightnorm - - 0 - 1 - 3.0028815672267228e-005 - 1 - - max_y - - 906.20003957594895 - 0 - 0 - 1 - - preset_num - 26 - star_brightness - 2 - sun_angle - 4.7123589515686035 - sunlight_color - - 0.34876692389196384 - 0.3557424864638451 - 0.65999994893325931 - 0.22000000284673543 - - - + + + ambient + + 0.20405027105862608 + 0.24246673976617727 + 0.32999997392212316 + 0.11000000166951449 + + blue_density + + 0.44999999369830818 + 0.44999999398335949 + 0.4499999944309046 + 1 + + blue_horizon + + 0.23999999567946317 + 0.23999999579784967 + 0.23999999583870221 + 1 + + cloud_color + + 0.22615400241575034 + 0.22615400241575034 + 0.22615400241575034 + 1 + + cloud_pos_density1 + + 0.5 + 0.5 + 0.88000000953711155 + 1 + + cloud_pos_density2 + + 0.5 + 0.5 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.49940035411295 + 10.011000104431371 + + cloud_shadow + + 0.36000001430511475 + 0 + 0 + 1 + + density_multiplier + + 0.00030000001824737163 + 0 + 0 + 1 + + distance_multiplier + + 3.0208916693946743e-009 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 5 + 0.0010000000214212465 + -0.47999999165502744 + 1 + + haze_density + + 3.9999999963077992 + 0 + 0 + 1 + + haze_horizon + + 1.7901579546794781e-010 + 0.19915600437467304 + 0.19915600437467304 + 1 + + lightnorm + + 0 + 1 + 3.0028815672267228e-005 + 1 + + max_y + + 906.20003957594895 + 0 + 0 + 1 + + preset_num + 26 + star_brightness + 2 + sun_angle + 4.7123589515686035 + sunlight_color + + 0.34876692389196384 + 0.3557424864638451 + 0.65999994893325931 + 0.22000000284673543 + + + diff --git a/indra/newview/app_settings/windlight/skies/Pirate.xml b/indra/newview/app_settings/windlight/skies/Pirate.xml index dc61fc6be..dcb9c27ba 100644 --- a/indra/newview/app_settings/windlight/skies/Pirate.xml +++ b/indra/newview/app_settings/windlight/skies/Pirate.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.27825063467025757 - 0.33063584566116333 - 0.44999998807907104 - 0.14999999105930328 - - blue_density - - 0.14522500336170197 - 0.39999699592590332 - 0.80000197887420654 - 1 - - blue_horizon - - 0.15130999684333801 - 0.30000001192092896 - 0.35131001472473145 - 1 - - cloud_color - - 0.22615399956703186 - 0.22615399956703186 - 0.22615399956703186 - 1 - - cloud_pos_density1 - - 1.2046600580215454 - 0.51547497510910034 - 1 - 1 - - cloud_pos_density2 - - 1.2046600580215454 - 0.51547497510910034 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.49940013885498 - 10.01099967956543 - - cloud_shadow - - 0.33064401149749756 - 0 - 0 - 1 - - density_multiplier - - 0.0003499999875202775 - 0 - 0 - 1 - - distance_multiplier - - 3.4000000953674316 - 0 - 0 - 1 - - east_angle - 0 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1 - 0 - 0 - 1 - - glow - - 5 - 0.0010000000474974513 - -0.36000001430511475 - 1 - - haze_density - - 0.69999998807907104 - 0 - 0 - 1 - - haze_horizon - - 0.19915600121021271 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.062790460884571075 - -0.99802672863006592 - 0 - - max_y - - 600 - 0 - 0 - 1 - - preset_num - 27 - star_brightness - 0 - sun_angle - 3.0787608623504639 - sunlight_color - - 2.8385701179504395 - 2.8385701179504395 - 2.8385701179504395 - 1 - - - + + + ambient + + 0.27825063467025757 + 0.33063584566116333 + 0.44999998807907104 + 0.14999999105930328 + + blue_density + + 0.14522500336170197 + 0.39999699592590332 + 0.80000197887420654 + 1 + + blue_horizon + + 0.15130999684333801 + 0.30000001192092896 + 0.35131001472473145 + 1 + + cloud_color + + 0.22615399956703186 + 0.22615399956703186 + 0.22615399956703186 + 1 + + cloud_pos_density1 + + 1.2046600580215454 + 0.51547497510910034 + 1 + 1 + + cloud_pos_density2 + + 1.2046600580215454 + 0.51547497510910034 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.49940013885498 + 10.01099967956543 + + cloud_shadow + + 0.33064401149749756 + 0 + 0 + 1 + + density_multiplier + + 0.0003499999875202775 + 0 + 0 + 1 + + distance_multiplier + + 3.4000000953674316 + 0 + 0 + 1 + + east_angle + 0 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1 + 0 + 0 + 1 + + glow + + 5 + 0.0010000000474974513 + -0.36000001430511475 + 1 + + haze_density + + 0.69999998807907104 + 0 + 0 + 1 + + haze_horizon + + 0.19915600121021271 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.062790460884571075 + -0.99802672863006592 + 0 + + max_y + + 600 + 0 + 0 + 1 + + preset_num + 27 + star_brightness + 0 + sun_angle + 3.0787608623504639 + sunlight_color + + 2.8385701179504395 + 2.8385701179504395 + 2.8385701179504395 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Purple.xml b/indra/newview/app_settings/windlight/skies/Purple.xml index ffa294915..0e9ac3f36 100644 --- a/indra/newview/app_settings/windlight/skies/Purple.xml +++ b/indra/newview/app_settings/windlight/skies/Purple.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.1978670060634613 - 0.23511900007724762 - 0.31999999284744263 - 1 - - blue_density - - 0.13977900147438049 - 0.38499599695205688 - 0.76999998092651367 - 1 - - blue_horizon - - 0.18999999761581421 - 0.18999999761581421 - 0.18999999761581421 - 1 - - cloud_color - - 0.22615399956703186 - 0.22615399956703186 - 0.22615399956703186 - 1 - - cloud_pos_density1 - - 5.3780298233032227 - 1.9675600528717041 - 1 - 1 - - cloud_pos_density2 - - 5.3780298233032227 - 1.9675600528717041 - 0.125 - 1 - - cloud_scale - - 0.41999998688697815 - 0 - 0 - 1 - - cloud_scroll_rate - - 10.739999771118164 - 10.600000381469727 - - cloud_shadow - - 0.31000000238418579 - 0 - 0 - 1 - - density_multiplier - - 0.00052000000141561031 - 0 - 0 - 1 - - distance_multiplier - - 3.4000000953674316 - 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 - - 1.1000000238418579 - 0 - 0 - 1 - - haze_horizon - - 0.12999999523162842 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0 - 0.094108030200004578 - -0.99556201696395874 - 0 - - max_y - - 656.20001220703125 - 0 - 0 - 1 - - preset_num - 28 - star_brightness - 0 - sun_angle - 3.0473451614379883 - sunlight_color - - 1.5 - 1.5299999713897705 - 2.8385701179504395 - 1 - - - + + + ambient + + 0.1978670060634613 + 0.23511900007724762 + 0.31999999284744263 + 1 + + blue_density + + 0.13977900147438049 + 0.38499599695205688 + 0.76999998092651367 + 1 + + blue_horizon + + 0.18999999761581421 + 0.18999999761581421 + 0.18999999761581421 + 1 + + cloud_color + + 0.22615399956703186 + 0.22615399956703186 + 0.22615399956703186 + 1 + + cloud_pos_density1 + + 5.3780298233032227 + 1.9675600528717041 + 1 + 1 + + cloud_pos_density2 + + 5.3780298233032227 + 1.9675600528717041 + 0.125 + 1 + + cloud_scale + + 0.41999998688697815 + 0 + 0 + 1 + + cloud_scroll_rate + + 10.739999771118164 + 10.600000381469727 + + cloud_shadow + + 0.31000000238418579 + 0 + 0 + 1 + + density_multiplier + + 0.00052000000141561031 + 0 + 0 + 1 + + distance_multiplier + + 3.4000000953674316 + 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 + + 1.1000000238418579 + 0 + 0 + 1 + + haze_horizon + + 0.12999999523162842 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0 + 0.094108030200004578 + -0.99556201696395874 + 0 + + max_y + + 656.20001220703125 + 0 + 0 + 1 + + preset_num + 28 + star_brightness + 0 + sun_angle + 3.0473451614379883 + sunlight_color + + 1.5 + 1.5299999713897705 + 2.8385701179504395 + 1 + + + diff --git a/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml b/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml index 9b4c441ab..70df6b0e6 100644 --- a/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml +++ b/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml @@ -1,141 +1,141 @@ - - - ambient - - 0.8399999737739563 - 0.090738050639629364 - 0.1234893873333931 - 0.8399999737739563 - - blue_density - - 0.93999999761581421 - 0.69999998807907104 - 0.25 - 0.93999999761581421 - - blue_horizon - - 1 - 0.59999996423721313 - 0.25001853704452515 - 1 - - cloud_color - - 0.65999996662139893 - 0.38999998569488525 - 0.22618354856967926 - 0.65999996662139893 - - cloud_pos_density1 - - 0.76999998092651367 - 0.50999999046325684 - 1 - 1 - - cloud_pos_density2 - - 0.5 - 0.5899999737739563 - 0.019999999552965164 - 1 - - cloud_scale - - 0.26999998092651367 - 0 - 0 - 1 - - cloud_scroll_rate - - 9.4499998092651367 - 9.4399995803833008 - - cloud_shadow - - 0.5 - 0 - 0 - 1 - - density_multiplier - - 0.00019999999494757503 - 0 - 0 - 1 - - distance_multiplier - - 6.7000002861022949 - 0 - 0 - 1 - - east_angle - 3.7070791721343994 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.4800000190734863 - 0 - 0 - 1 - - glow - - 0.79999923706054688 - 0.0010000000474974513 - -0.94999998807907104 - 1 - - haze_density - - 0.89999997615814209 - 0 - 0 - 1 - - haze_horizon - - 0.29999998211860657 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - 0.53160154819488525 - 0.12533323466777802 - -0.83767020702362061 - 0 - - max_y - - 281.70001220703125 - 0 - 0 - 1 - - preset_num - 18 - star_brightness - 1.3799999952316284 - sun_angle - 0.12566371262073517 - sunlight_color - - 0.75 - 1.6800000667572021 - 1.0777359008789062 - 0.56000000238418579 - - - + + + ambient + + 0.8399999737739563 + 0.090738050639629364 + 0.1234893873333931 + 0.8399999737739563 + + blue_density + + 0.93999999761581421 + 0.69999998807907104 + 0.25 + 0.93999999761581421 + + blue_horizon + + 1 + 0.59999996423721313 + 0.25001853704452515 + 1 + + cloud_color + + 0.65999996662139893 + 0.38999998569488525 + 0.22618354856967926 + 0.65999996662139893 + + cloud_pos_density1 + + 0.76999998092651367 + 0.50999999046325684 + 1 + 1 + + cloud_pos_density2 + + 0.5 + 0.5899999737739563 + 0.019999999552965164 + 1 + + cloud_scale + + 0.26999998092651367 + 0 + 0 + 1 + + cloud_scroll_rate + + 9.4499998092651367 + 9.4399995803833008 + + cloud_shadow + + 0.5 + 0 + 0 + 1 + + density_multiplier + + 0.00019999999494757503 + 0 + 0 + 1 + + distance_multiplier + + 6.7000002861022949 + 0 + 0 + 1 + + east_angle + 3.7070791721343994 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.4800000190734863 + 0 + 0 + 1 + + glow + + 0.79999923706054688 + 0.0010000000474974513 + -0.94999998807907104 + 1 + + haze_density + + 0.89999997615814209 + 0 + 0 + 1 + + haze_horizon + + 0.29999998211860657 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + 0.53160154819488525 + 0.12533323466777802 + -0.83767020702362061 + 0 + + max_y + + 281.70001220703125 + 0 + 0 + 1 + + preset_num + 18 + star_brightness + 1.3799999952316284 + sun_angle + 0.12566371262073517 + sunlight_color + + 0.75 + 1.6800000667572021 + 1.0777359008789062 + 0.56000000238418579 + + + diff --git a/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml b/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml index a36024c79..4c44a1bdb 100644 --- a/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml +++ b/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml @@ -1,141 +1,141 @@ - - - ambient - - 0 - 0.059999998658895493 - 0 - 0.059999998658895493 - - blue_density - - 0 - 0.099999994039535522 - 0.32999998331069946 - 0.32999998331069946 - - blue_horizon - - 0.029999999329447746 - 0 - 1 - 1 - - cloud_color - - 0.81999999284744263 - 0.18999999761581421 - 0.039999999105930328 - 0.81999999284744263 - - cloud_pos_density1 - - 0.74000000953674316 - 0.93999999761581421 - 0.20999999344348907 - 1 - - cloud_pos_density2 - - 0.65999996662139893 - 0.52999997138977051 - 0.0099999997764825821 - 1 - - cloud_scale - - 0.14000000059604645 - 0 - 0 - 1 - - cloud_scroll_rate - - 18 - 20 - - cloud_shadow - - 0.37999999523162842 - 0 - 0 - 1 - - density_multiplier - - 0.00018000000272877514 - 0 - 0 - 1 - - distance_multiplier - - 6.7000002861022949 - 0 - 0 - 1 - - east_angle - 2.3247785568237305 - enable_cloud_scroll - - 1 - 1 - - gamma - - 1.9499999284744263 - 0 - 0 - 1 - - glow - - 17.399999618530273 - 0.0010000000474974513 - -0.64999997615814209 - 1 - - haze_density - - 0.40999999642372131 - 0 - 0 - 1 - - haze_horizon - - 0.17000000178813934 - 0.19915600121021271 - 0.19915600121021271 - 1 - - lightnorm - - -0.72322052717208862 - 0.12533323466777802 - -0.67914927005767822 - 0 - - max_y - - 263 - 0 - 0 - 1 - - preset_num - 24 - star_brightness - 1.0399999618530273 - sun_angle - 0.12566371262073517 - sunlight_color - - 1.5899999141693115 - 1.5299999713897705 - 0.53999996185302734 - 1.5899999141693115 - - - + + + ambient + + 0 + 0.059999998658895493 + 0 + 0.059999998658895493 + + blue_density + + 0 + 0.099999994039535522 + 0.32999998331069946 + 0.32999998331069946 + + blue_horizon + + 0.029999999329447746 + 0 + 1 + 1 + + cloud_color + + 0.81999999284744263 + 0.18999999761581421 + 0.039999999105930328 + 0.81999999284744263 + + cloud_pos_density1 + + 0.74000000953674316 + 0.93999999761581421 + 0.20999999344348907 + 1 + + cloud_pos_density2 + + 0.65999996662139893 + 0.52999997138977051 + 0.0099999997764825821 + 1 + + cloud_scale + + 0.14000000059604645 + 0 + 0 + 1 + + cloud_scroll_rate + + 18 + 20 + + cloud_shadow + + 0.37999999523162842 + 0 + 0 + 1 + + density_multiplier + + 0.00018000000272877514 + 0 + 0 + 1 + + distance_multiplier + + 6.7000002861022949 + 0 + 0 + 1 + + east_angle + 2.3247785568237305 + enable_cloud_scroll + + 1 + 1 + + gamma + + 1.9499999284744263 + 0 + 0 + 1 + + glow + + 17.399999618530273 + 0.0010000000474974513 + -0.64999997615814209 + 1 + + haze_density + + 0.40999999642372131 + 0 + 0 + 1 + + haze_horizon + + 0.17000000178813934 + 0.19915600121021271 + 0.19915600121021271 + 1 + + lightnorm + + -0.72322052717208862 + 0.12533323466777802 + -0.67914927005767822 + 0 + + max_y + + 263 + 0 + 0 + 1 + + preset_num + 24 + star_brightness + 1.0399999618530273 + sun_angle + 0.12566371262073517 + sunlight_color + + 1.5899999141693115 + 1.5299999713897705 + 0.53999996185302734 + 1.5899999141693115 + + + diff --git a/indra/newview/app_settings/windlight/water/Default.xml b/indra/newview/app_settings/windlight/water/Default.xml index 182675378..dce4148c7 100644 --- a/indra/newview/app_settings/windlight/water/Default.xml +++ b/indra/newview/app_settings/windlight/water/Default.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.040000002831220627 - fresnelOffset - 0.5 - fresnelScale - 0.39999997615814209 - normScale - - 2 - 2 - 2 - - normalMap - 822ded49-9a6c-f61c-cb89-6df54f42cdf4 - scaleAbove - 0.029999999329447746 - scaleBelow - 0.20000000298023224 - underWaterFogMod - 0.25 - waterFogColor - - 0.015686275437474251 - 0.14901961386203766 - 0.25098040699958801 - 1 - - waterFogDensity - 16 - wave1Dir - - 1.0499997138977051 - -0.42000007629394531 - - wave2Dir - - 1.1099996566772461 - -1.1600000858306885 - - - + + + blurMultiplier + 0.040000002831220627 + fresnelOffset + 0.5 + fresnelScale + 0.39999997615814209 + normScale + + 2 + 2 + 2 + + normalMap + 822ded49-9a6c-f61c-cb89-6df54f42cdf4 + scaleAbove + 0.029999999329447746 + scaleBelow + 0.20000000298023224 + underWaterFogMod + 0.25 + waterFogColor + + 0.015686275437474251 + 0.14901961386203766 + 0.25098040699958801 + 1 + + waterFogDensity + 16 + wave1Dir + + 1.0499997138977051 + -0.42000007629394531 + + wave2Dir + + 1.1099996566772461 + -1.1600000858306885 + + + diff --git a/indra/newview/app_settings/windlight/water/Glassy.xml b/indra/newview/app_settings/windlight/water/Glassy.xml index 754e6def2..01183e468 100644 --- a/indra/newview/app_settings/windlight/water/Glassy.xml +++ b/indra/newview/app_settings/windlight/water/Glassy.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.003000000026077032089233398 - fresnelOffset - 0.579999983310699462890625 - fresnelScale - 0.0999999940395355224609375 - normScale - - 2 - 2 - 2 - - normalMap - 822ded49-9a6c-f61c-cb89-6df54f42cdf4 - scaleAbove - 0.07999999821186065673828125 - scaleBelow - 0.2000000029802322387695312 - underWaterFogMod - 0.25 - waterFogColor - - 0.04999999701976776123046875 - 0.37999999523162841796875 - 0.5299999713897705078125 - 0.5299999713897705078125 - - waterFogDensity - 1 - wave1Dir - - 0.5 - -0.1700000017881393432617188 - - wave2Dir - - 0.579999983310699462890625 - -0.670000016689300537109375 - - - + + + blurMultiplier + 0.003000000026077032089233398 + fresnelOffset + 0.579999983310699462890625 + fresnelScale + 0.0999999940395355224609375 + normScale + + 2 + 2 + 2 + + normalMap + 822ded49-9a6c-f61c-cb89-6df54f42cdf4 + scaleAbove + 0.07999999821186065673828125 + scaleBelow + 0.2000000029802322387695312 + underWaterFogMod + 0.25 + waterFogColor + + 0.04999999701976776123046875 + 0.37999999523162841796875 + 0.5299999713897705078125 + 0.5299999713897705078125 + + waterFogDensity + 1 + wave1Dir + + 0.5 + -0.1700000017881393432617188 + + wave2Dir + + 0.579999983310699462890625 + -0.670000016689300537109375 + + + diff --git a/indra/newview/app_settings/windlight/water/Murky.xml b/indra/newview/app_settings/windlight/water/Murky.xml index 65418fa54..1d9e02242 100644 --- a/indra/newview/app_settings/windlight/water/Murky.xml +++ b/indra/newview/app_settings/windlight/water/Murky.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.0030000000260770321 - fresnelOffset - 0.39999997615814209 - fresnelScale - 0.5 - normScale - - 2 - 2 - 2 - - normalMap - 822ded49-9a6c-f61c-cb89-6df54f42cdf4 - scaleAbove - 0.079999998211860657 - scaleBelow - 0.20000000298023224 - underWaterFogMod - 0.76999998092651367 - waterFogColor - - 0.08999999612569809 - 0.17000000178813934 - 0.20999999344348907 - 0.20999999344348907 - - waterFogDensity - 16 - wave1Dir - - 0.5 - -0.17000000178813934 - - wave2Dir - - 0.57999998331069946 - -0.67000001668930054 - - - + + + blurMultiplier + 0.0030000000260770321 + fresnelOffset + 0.39999997615814209 + fresnelScale + 0.5 + normScale + + 2 + 2 + 2 + + normalMap + 822ded49-9a6c-f61c-cb89-6df54f42cdf4 + scaleAbove + 0.079999998211860657 + scaleBelow + 0.20000000298023224 + underWaterFogMod + 0.76999998092651367 + waterFogColor + + 0.08999999612569809 + 0.17000000178813934 + 0.20999999344348907 + 0.20999999344348907 + + waterFogDensity + 16 + wave1Dir + + 0.5 + -0.17000000178813934 + + wave2Dir + + 0.57999998331069946 + -0.67000001668930054 + + + diff --git a/indra/newview/app_settings/windlight/water/Pond.xml b/indra/newview/app_settings/windlight/water/Pond.xml index 8a4d2c2e0..59e3c441e 100644 --- a/indra/newview/app_settings/windlight/water/Pond.xml +++ b/indra/newview/app_settings/windlight/water/Pond.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.0030000000260770321 - fresnelOffset - 0.50999999046325684 - fresnelScale - 0.099999994039535522 - normScale - - 2 - 2 - 2 - - normalMap - 822ded49-9a6c-f61c-cb89-6df54f42cdf4 - scaleAbove - 0.079999998211860657 - scaleBelow - 0.20000000298023224 - underWaterFogMod - 0.25 - waterFogColor - - 0.059999998658895493 - 0.37999999523162842 - 0.52999997138977051 - 0.52999997138977051 - - waterFogDensity - 2.1000001430511475 - wave1Dir - - 0.5 - -0.17000000178813934 - - wave2Dir - - 0.57999998331069946 - -0.67000001668930054 - - - + + + blurMultiplier + 0.0030000000260770321 + fresnelOffset + 0.50999999046325684 + fresnelScale + 0.099999994039535522 + normScale + + 2 + 2 + 2 + + normalMap + 822ded49-9a6c-f61c-cb89-6df54f42cdf4 + scaleAbove + 0.079999998211860657 + scaleBelow + 0.20000000298023224 + underWaterFogMod + 0.25 + waterFogColor + + 0.059999998658895493 + 0.37999999523162842 + 0.52999997138977051 + 0.52999997138977051 + + waterFogDensity + 2.1000001430511475 + wave1Dir + + 0.5 + -0.17000000178813934 + + wave2Dir + + 0.57999998331069946 + -0.67000001668930054 + + + diff --git a/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml b/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml index 77984a0bb..6dbc4e871 100644 --- a/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml +++ b/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.0030000000260770321 - fresnelOffset - 0.57999998331069946 - fresnelScale - 0.099999994039535522 - normScale - - 10 - 10 - 10 - - normalMap - 470626e3-ac38-8554-d49b-90311c0176a9 - scaleAbove - 0.91999995708465576 - scaleBelow - 0.93999999761581421 - underWaterFogMod - 0.25 - waterFogColor - - 0.049999997019767761 - 0.37999999523162842 - 0.52999997138977051 - 0.52999997138977051 - - waterFogDensity - 3.2000000476837158 - wave1Dir - - 0.5 - -0.17000000178813934 - - wave2Dir - - 0.57999998331069946 - -0.67000001668930054 - - - + + + blurMultiplier + 0.0030000000260770321 + fresnelOffset + 0.57999998331069946 + fresnelScale + 0.099999994039535522 + normScale + + 10 + 10 + 10 + + normalMap + 470626e3-ac38-8554-d49b-90311c0176a9 + scaleAbove + 0.91999995708465576 + scaleBelow + 0.93999999761581421 + underWaterFogMod + 0.25 + waterFogColor + + 0.049999997019767761 + 0.37999999523162842 + 0.52999997138977051 + 0.52999997138977051 + + waterFogDensity + 3.2000000476837158 + wave1Dir + + 0.5 + -0.17000000178813934 + + wave2Dir + + 0.57999998331069946 + -0.67000001668930054 + + + diff --git a/indra/newview/app_settings/windlight/water/Second%20Plague.xml b/indra/newview/app_settings/windlight/water/Second%20Plague.xml index 7db679dce..137483ab6 100644 --- a/indra/newview/app_settings/windlight/water/Second%20Plague.xml +++ b/indra/newview/app_settings/windlight/water/Second%20Plague.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.017000000923871994 - fresnelOffset - 0.37000000476837158 - fresnelScale - 0 - normScale - - 2 - 2 - 2 - - normalMap - 822ded49-9a6c-f61c-cb89-6df54f42cdf4 - scaleAbove - 0.079999998211860657 - scaleBelow - 0.20000000298023224 - underWaterFogMod - 0.85999995470046997 - waterFogColor - - 0.48999997973442078 - 0 - 0 - 0.48999997973442078 - - waterFogDensity - 20 - wave1Dir - - 0.5 - -0.17000000178813934 - - wave2Dir - - 0.57999998331069946 - -0.67000001668930054 - - - + + + blurMultiplier + 0.017000000923871994 + fresnelOffset + 0.37000000476837158 + fresnelScale + 0 + normScale + + 2 + 2 + 2 + + normalMap + 822ded49-9a6c-f61c-cb89-6df54f42cdf4 + scaleAbove + 0.079999998211860657 + scaleBelow + 0.20000000298023224 + underWaterFogMod + 0.85999995470046997 + waterFogColor + + 0.48999997973442078 + 0 + 0 + 0.48999997973442078 + + waterFogDensity + 20 + wave1Dir + + 0.5 + -0.17000000178813934 + + wave2Dir + + 0.57999998331069946 + -0.67000001668930054 + + + diff --git a/indra/newview/app_settings/windlight/water/Valdez.xml b/indra/newview/app_settings/windlight/water/Valdez.xml index bde298bb4..eb70a142e 100644 --- a/indra/newview/app_settings/windlight/water/Valdez.xml +++ b/indra/newview/app_settings/windlight/water/Valdez.xml @@ -1,43 +1,43 @@ - - - blurMultiplier - 0.0020000000949949026 - fresnelOffset - 0.28999999165534973 - fresnelScale - 0 - normScale - - 2 - 2 - 2 - - normalMap - 822ded49-9a6c-f61c-cb89-6df54f42cdf4 - scaleAbove - 0.079999998211860657 - scaleBelow - 0.20000000298023224 - underWaterFogMod - 1 - waterFogColor - - 0 - 0 - 0 - 0 - - waterFogDensity - 1024 - wave1Dir - - 0.5 - -0.17000000178813934 - - wave2Dir - - 0.57999998331069946 - -0.67000001668930054 - - - + + + blurMultiplier + 0.0020000000949949026 + fresnelOffset + 0.28999999165534973 + fresnelScale + 0 + normScale + + 2 + 2 + 2 + + normalMap + 822ded49-9a6c-f61c-cb89-6df54f42cdf4 + scaleAbove + 0.079999998211860657 + scaleBelow + 0.20000000298023224 + underWaterFogMod + 1 + waterFogColor + + 0 + 0 + 0 + 0 + + waterFogDensity + 1024 + wave1Dir + + 0.5 + -0.17000000178813934 + + wave2Dir + + 0.57999998331069946 + -0.67000001668930054 + + + diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp index 7c3080c2d..9f43f3e3f 100644 --- a/indra/newview/llaudiosourcevo.cpp +++ b/indra/newview/llaudiosourcevo.cpp @@ -40,9 +40,9 @@ #include "llviewerparcelmgr.h" LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp) -// -// : LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX), - : LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, objectp->getID(), false), +// +// : LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX), + : LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, objectp->getID(), false), // mObjectp(objectp) { diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp index 11af4b628..5f656bae2 100644 --- a/indra/newview/llfloateravatartextures.cpp +++ b/indra/newview/llfloateravatartextures.cpp @@ -89,9 +89,9 @@ void LLFloaterAvatarTextures::draw() LLFloater::draw(); } -// -//#if !LL_RELEASE_FOR_DOWNLOAD -// +// +//#if !LL_RELEASE_FOR_DOWNLOAD +// static void update_texture_ctrl(LLVOAvatar* avatarp, LLTextureCtrl* ctrl, ETextureIndex te) @@ -148,9 +148,9 @@ void LLFloaterAvatarTextures::refresh() } } -// -/* -// +// +/* +// #else void LLFloaterAvatarTextures::refresh() @@ -158,16 +158,16 @@ void LLFloaterAvatarTextures::refresh() } #endif -// -*/ -// +// +*/ +// // 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 +179,7 @@ void LLFloaterAvatarTextures::onClickDump(void* data) llinfos << "Avatar TE " << i << " id " << te->getID() << llendl; } -// -//#endif -// +// +//#endif +// } diff --git a/indra/newview/llfloaterproperties.h b/indra/newview/llfloaterproperties.h index f14692a37..c82b2a7e7 100644 --- a/indra/newview/llfloaterproperties.h +++ b/indra/newview/llfloaterproperties.h @@ -61,14 +61,14 @@ public: static void closeByID(const LLUUID& item_id, const LLUUID& object_id); - // - static void onClickMore(void* user_data); - static void onClickLess(void* user_data); - static void onClickCopy(void* user_data); - static void onClickUpdate(void* user_data); - void setExpanded(BOOL expanded); - // - + // + static void onClickMore(void* user_data); + static void onClickLess(void* user_data); + static void onClickCopy(void* user_data); + static void onClickUpdate(void* user_data); + void setExpanded(BOOL expanded); + // + LLFloaterProperties(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_id, const LLUUID& object_id); virtual ~LLFloaterProperties(); @@ -102,9 +102,9 @@ protected: LLUUID mObjectID; BOOL mDirty; - // - BOOL mExpanded; - // + // + BOOL mExpanded; + // typedef std::map instance_map; static instance_map sInstances; @@ -116,11 +116,11 @@ class LLMultiProperties : public LLMultiFloater { public: LLMultiProperties(const LLRect& rect); - // - void setExpanded(BOOL expanded); -protected: - BOOL mExpanded; - // + // + void setExpanded(BOOL expanded); +protected: + BOOL mExpanded; + // }; #endif // LL_LLFLOATERPROPERTIES_H diff --git a/indra/newview/llfloatervfsexplorer.h b/indra/newview/llfloatervfsexplorer.h index fc77def51..34fd8e2d4 100644 --- a/indra/newview/llfloatervfsexplorer.h +++ b/indra/newview/llfloatervfsexplorer.h @@ -1,41 +1,41 @@ -// -#ifndef LL_LLFLOATERVFSEXPLORER_H -#define LL_LLFLOATERVFSEXPLORER_H - -#include "llfloater.h" -#include "llassettype.h" -#include "llvfs.h" - -class LLFloaterVFSExplorer : LLFloater -{ -typedef struct -{ - std::string mFilename; - std::string mName; - LLUUID mID; - LLAssetType::EType mType; -} entry; -public: - LLFloaterVFSExplorer(); - ~LLFloaterVFSExplorer(); - static void show(); - BOOL postBuild(); - void refresh(); - void reloadAll(); - void removeEntry(); - void setEditID(LLUUID edit_id); - LLVFSFileSpecifier getEditEntry(); - static void onCommitFileList(LLUICtrl* ctrl, void* user_data); - static void onClickCopyUUID(void* user_data); - static void onClickRemove(void* user_data); - static void onClickReload(void* user_data); - static void onClickEditData(void* user_data); - static void onClickItem(void* user_data); -private: - static LLFloaterVFSExplorer* sInstance; - static std::map sVFSFileMap; - LLUUID mEditID; - void setEditEnabled(bool enabled); -}; -#endif -// +// +#ifndef LL_LLFLOATERVFSEXPLORER_H +#define LL_LLFLOATERVFSEXPLORER_H + +#include "llfloater.h" +#include "llassettype.h" +#include "llvfs.h" + +class LLFloaterVFSExplorer : LLFloater +{ +typedef struct +{ + std::string mFilename; + std::string mName; + LLUUID mID; + LLAssetType::EType mType; +} entry; +public: + LLFloaterVFSExplorer(); + ~LLFloaterVFSExplorer(); + static void show(); + BOOL postBuild(); + void refresh(); + void reloadAll(); + void removeEntry(); + void setEditID(LLUUID edit_id); + LLVFSFileSpecifier getEditEntry(); + static void onCommitFileList(LLUICtrl* ctrl, void* user_data); + static void onClickCopyUUID(void* user_data); + static void onClickRemove(void* user_data); + static void onClickReload(void* user_data); + static void onClickEditData(void* user_data); + static void onClickItem(void* user_data); +private: + static LLFloaterVFSExplorer* sInstance; + static std::map sVFSFileMap; + LLUUID mEditID; + void setEditEnabled(bool enabled); +}; +#endif +// diff --git a/indra/newview/llpreviewanim.h b/indra/newview/llpreviewanim.h index b1d26c0ee..115419fb6 100644 --- a/indra/newview/llpreviewanim.h +++ b/indra/newview/llpreviewanim.h @@ -46,29 +46,29 @@ public: static void playAnim( void* userdata ); static void auditionAnim( void* userdata ); - // - /* - static void copyAnim(void* userdata); - static void gotAssetForCopy(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status); - static void onSaveCopyComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); - */ - static void gotAssetForSave(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status); - static void copyAnimID(void* userdata); + // + /* + static void copyAnim(void* userdata); + static void gotAssetForCopy(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status); + static void onSaveCopyComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); + */ + static void gotAssetForSave(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status); + static void copyAnimID(void* userdata); // static void endAnimCallback( void *userdata ); protected: virtual void onClose(bool app_quitting); - // - virtual BOOL canSaveAs() const; - virtual void saveAs(); - virtual LLUUID getItemID(); + // + virtual BOOL canSaveAs() const; + virtual void saveAs(); + virtual LLUUID getItemID(); // virtual const char *getTitleName() const { return "Animation"; } diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 11a9356bf..58959e445 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -186,9 +186,9 @@ protected: void uploadAssetLegacy(const std::string& filename, const LLUUID& item_id, const LLTransactionID& tid); - // - virtual BOOL canSaveAs() const; - virtual void saveAs(); + // + virtual BOOL canSaveAs() const; + virtual void saveAs(); // static void onSearchReplace(void* userdata); @@ -258,9 +258,9 @@ protected: LLViewerObject* object, const LLTransactionID& tid, BOOL is_running); - // - virtual BOOL canSaveAs() const; - virtual void saveAs(); + // + virtual BOOL canSaveAs() const; + virtual void saveAs(); // static void onSearchReplace(void* userdata); diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp index ef5400753..e40dddbd2 100644 --- a/indra/newview/llpreviewsound.cpp +++ b/indra/newview/llpreviewsound.cpp @@ -43,14 +43,14 @@ #include "llviewercontrol.h" #include "llviewermessage.h" // send_guid_sound_trigger #include "lluictrlfactory.h" -// -#include "llvoavatar.h" -#include "llchat.h" -#include "llfloaterchat.h" -#include "llviewerwindow.h" // for alert -#include "llfilepicker.h" -// for ambient play: -#include "llviewerregion.h" +// +#include "llvoavatar.h" +#include "llchat.h" +#include "llfloaterchat.h" +#include "llviewerwindow.h" // for alert +#include "llfilepicker.h" +// for ambient play: +#include "llviewerregion.h" // extern LLAudioEngine* gAudiop; @@ -66,9 +66,9 @@ LLPreviewSound::LLPreviewSound(const std::string& name, const LLRect& rect, cons childSetAction("Sound play btn",&LLPreviewSound::playSound,this); childSetAction("Sound audition btn",&LLPreviewSound::auditionSound,this); - // - childSetAction("Sound copy uuid btn", &LLPreviewSound::copyUUID, this); - childSetAction("Play ambient btn", &LLPreviewSound::playAmbient, this); + // + childSetAction("Sound copy uuid btn", &LLPreviewSound::copyUUID, this); + childSetAction("Play ambient btn", &LLPreviewSound::playAmbient, this); // LLButton* button = getChild("Sound play btn"); @@ -87,12 +87,12 @@ LLPreviewSound::LLPreviewSound(const std::string& name, const LLRect& rect, cons if(item && gAudiop) { gAudiop->preloadSound(item->getAssetUUID()); - // - // that thing above doesn't actually start a sound transfer, so I will do it - //LLAudioSource *asp = new LLAudioSource(gAgent.getID(), gAgent.getID(), F32(1.0f), LLAudioEngine::AUDIO_TYPE_UI); - LLAudioSource *asp = gAgent.getAvatarObject()->getAudioSource(gAgent.getID()); - LLAudioData *datap = gAudiop->getAudioData(item->getAssetUUID()); - asp->addAudioData(datap, FALSE); + // + // that thing above doesn't actually start a sound transfer, so I will do it + //LLAudioSource *asp = new LLAudioSource(gAgent.getID(), gAgent.getID(), F32(1.0f), LLAudioEngine::AUDIO_TYPE_UI); + LLAudioSource *asp = gAgent.getAvatarObject()->getAudioSource(gAgent.getID()); + LLAudioData *datap = gAudiop->getAudioData(item->getAssetUUID()); + asp->addAudioData(datap, FALSE); // } @@ -130,228 +130,228 @@ void LLPreviewSound::auditionSound( void *userdata ) gAudiop->triggerSound(item->getAssetUUID(), gAgent.getID(), SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_UI, lpos_global); } } - -// -void LLPreviewSound::playAmbient( void* userdata ) -{ - LLPreviewSound* self = (LLPreviewSound*) userdata; - const LLInventoryItem *item = self->getItem(); - - if(item && gAudiop) - { - int gain = 0.01f; - for(int i = 0; i < 2; i++) - { - gMessageSystem->newMessageFast(_PREHASH_SoundTrigger); - gMessageSystem->nextBlockFast(_PREHASH_SoundData); - gMessageSystem->addUUIDFast(_PREHASH_SoundID, LLUUID(item->getAssetUUID())); - gMessageSystem->addUUIDFast(_PREHASH_OwnerID, LLUUID::null); - gMessageSystem->addUUIDFast(_PREHASH_ObjectID, LLUUID::null); - gMessageSystem->addUUIDFast(_PREHASH_ParentID, LLUUID::null); - gMessageSystem->addU64Fast(_PREHASH_Handle, gAgent.getRegion()->getHandle()); - LLVector3d pos = -from_region_handle(gAgent.getRegion()->getHandle()); - gMessageSystem->addVector3Fast(_PREHASH_Position, (LLVector3)pos); - gMessageSystem->addF32Fast(_PREHASH_Gain, gain); - - gMessageSystem->sendReliable(gAgent.getRegionHost()); - - gain = 1.0f; - } - } -} -// -/* -struct LLSaveInfo -{ - LLSaveInfo(const LLUUID& item_id, const LLUUID& object_id, const std::string& desc, - const LLTransactionID tid) - : mItemUUID(item_id), mObjectUUID(object_id), mDesc(desc), mTransactionID(tid) - { - } - - LLUUID mItemUUID; - LLUUID mObjectUUID; - std::string mDesc; - LLTransactionID mTransactionID; -}; - -// static -void LLPreviewSound::makeCopy( void *userdata ) -{ - LLPreviewSound* self = (LLPreviewSound*) userdata; - const LLInventoryItem *item = self->getItem(); - - if(item && gAudiop) - { - // Find out if asset data is ready - // I might be able to get rid of this - if(!gAssetStorage->hasLocalAsset(item->getAssetUUID(), LLAssetType::AT_SOUND)) - { - LLChat chat("Sound isn't downloaded yet, please try again in a moment."); - LLFloaterChat::addChat(chat); - return; - } - - gAssetStorage->getAssetData(item->getAssetUUID(), LLAssetType::AT_SOUND, LLPreviewSound::gotAssetForCopy, self, TRUE); - } -} - -// static -void LLPreviewSound::gotAssetForCopy(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status) -{ - LLPreviewSound* self = (LLPreviewSound*) user_data; - //const LLInventoryItem *item = self->getItem(); - - LLVFile file(vfs, asset_uuid, type, LLVFile::READ); - S32 size = file.getSize(); - - char* buffer = new char[size]; - if (buffer == NULL) - { - llerrs << "Memory Allocation Failed" << llendl; - return; - } - - file.read((U8*)buffer, size); - - // Write it back out... - - LLTransactionID tid; - LLAssetID asset_id; - tid.generate(); - asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); - - LLVFile ofile(gVFS, asset_id, LLAssetType::AT_SOUND, LLVFile::APPEND); - - ofile.setMaxSize(size); - ofile.write((U8*)buffer, size); - - // Upload that asset to the database - LLSaveInfo* info = new LLSaveInfo(self->mItemUUID, self->mObjectUUID, "sound", tid); - gAssetStorage->storeAssetData(tid, LLAssetType::AT_SOUND, onSaveCopyComplete, info, FALSE); -} - -// static -void LLPreviewSound::onSaveCopyComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status) -{ - LLSaveInfo* info = (LLSaveInfo*)user_data; - - if (status == 0) - { - std::string item_name = "New Sound"; - std::string item_desc = ""; - // Saving into user inventory - LLViewerInventoryItem* item; - item = (LLViewerInventoryItem*)gInventory.getItem(info->mItemUUID); - if(item) - { - item_name = item->getName(); - item_desc = item->getDescription(); - } - gMessageSystem->newMessageFast(_PREHASH_CreateInventoryItem); - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->nextBlockFast(_PREHASH_InventoryBlock); - gMessageSystem->addU32Fast(_PREHASH_CallbackID, 0); - gMessageSystem->addUUIDFast(_PREHASH_FolderID, LLUUID::null); - gMessageSystem->addUUIDFast(_PREHASH_TransactionID, info->mTransactionID); - gMessageSystem->addU32Fast(_PREHASH_NextOwnerMask, 2147483647); - gMessageSystem->addS8Fast(_PREHASH_Type, 1); - gMessageSystem->addS8Fast(_PREHASH_InvType, 1); - gMessageSystem->addU8Fast(_PREHASH_WearableType, 0); - gMessageSystem->addStringFast(_PREHASH_Name, item_name); - gMessageSystem->addStringFast(_PREHASH_Description, item_desc); - gMessageSystem->sendReliable(gAgent.getRegionHost()); - } - else - { - llwarns << "Problem saving sound: " << status << llendl; - LLStringUtil::format_map_t args; - args["[REASON]"] = std::string(LLAssetStorage::getErrorString(status)); - gViewerWindow->alertXml("CannotUploadReason",args); - } -} -*/ -// static -void LLPreviewSound::copyUUID( void *userdata ) -{ - LLPreviewSound* self = (LLPreviewSound*) userdata; - const LLInventoryItem *item = self->getItem(); - - if(item ) - { - gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(item->getAssetUUID().asString())); - } -} -// - -// -// virtual -BOOL LLPreviewSound::canSaveAs() const -{ - return TRUE; -} - -// virtual -void LLPreviewSound::saveAs() -{ - const LLInventoryItem *item = getItem(); - - if(item) - { - gAssetStorage->getAssetData(item->getAssetUUID(), LLAssetType::AT_SOUND, LLPreviewSound::gotAssetForSave, this, TRUE); - } -} - -// static -void LLPreviewSound::gotAssetForSave(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status) -{ - LLPreviewSound* self = (LLPreviewSound*) user_data; - //const LLInventoryItem *item = self->getItem(); - - LLVFile file(vfs, asset_uuid, type, LLVFile::READ); - S32 size = file.getSize(); - - char* buffer = new char[size]; - if (buffer == NULL) - { - llerrs << "Memory Allocation Failed" << llendl; - return; - } - - file.read((U8*)buffer, size); - - // Write it back out... - - LLFilePicker& file_picker = LLFilePicker::instance(); - if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_OGG, LLDir::getScrubbedFileName(self->getItem()->getName())) ) - { - // User canceled or we failed to acquire save file. - return; - } - // remember the user-approved/edited file name. - std::string filename = file_picker.getFirstFile(); - - std::ofstream export_file(filename.c_str(), std::ofstream::binary); - export_file.write(buffer, size); - export_file.close(); -} - -// virtual -LLUUID LLPreviewSound::getItemID() -{ - const LLViewerInventoryItem* item = getItem(); - if(item) - { - return item->getUUID(); - } - return LLUUID::null; -} -// + +// +void LLPreviewSound::playAmbient( void* userdata ) +{ + LLPreviewSound* self = (LLPreviewSound*) userdata; + const LLInventoryItem *item = self->getItem(); + + if(item && gAudiop) + { + int gain = 0.01f; + for(int i = 0; i < 2; i++) + { + gMessageSystem->newMessageFast(_PREHASH_SoundTrigger); + gMessageSystem->nextBlockFast(_PREHASH_SoundData); + gMessageSystem->addUUIDFast(_PREHASH_SoundID, LLUUID(item->getAssetUUID())); + gMessageSystem->addUUIDFast(_PREHASH_OwnerID, LLUUID::null); + gMessageSystem->addUUIDFast(_PREHASH_ObjectID, LLUUID::null); + gMessageSystem->addUUIDFast(_PREHASH_ParentID, LLUUID::null); + gMessageSystem->addU64Fast(_PREHASH_Handle, gAgent.getRegion()->getHandle()); + LLVector3d pos = -from_region_handle(gAgent.getRegion()->getHandle()); + gMessageSystem->addVector3Fast(_PREHASH_Position, (LLVector3)pos); + gMessageSystem->addF32Fast(_PREHASH_Gain, gain); + + gMessageSystem->sendReliable(gAgent.getRegionHost()); + + gain = 1.0f; + } + } +} +// +/* +struct LLSaveInfo +{ + LLSaveInfo(const LLUUID& item_id, const LLUUID& object_id, const std::string& desc, + const LLTransactionID tid) + : mItemUUID(item_id), mObjectUUID(object_id), mDesc(desc), mTransactionID(tid) + { + } + + LLUUID mItemUUID; + LLUUID mObjectUUID; + std::string mDesc; + LLTransactionID mTransactionID; +}; + +// static +void LLPreviewSound::makeCopy( void *userdata ) +{ + LLPreviewSound* self = (LLPreviewSound*) userdata; + const LLInventoryItem *item = self->getItem(); + + if(item && gAudiop) + { + // Find out if asset data is ready + // I might be able to get rid of this + if(!gAssetStorage->hasLocalAsset(item->getAssetUUID(), LLAssetType::AT_SOUND)) + { + LLChat chat("Sound isn't downloaded yet, please try again in a moment."); + LLFloaterChat::addChat(chat); + return; + } + + gAssetStorage->getAssetData(item->getAssetUUID(), LLAssetType::AT_SOUND, LLPreviewSound::gotAssetForCopy, self, TRUE); + } +} + +// static +void LLPreviewSound::gotAssetForCopy(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status) +{ + LLPreviewSound* self = (LLPreviewSound*) user_data; + //const LLInventoryItem *item = self->getItem(); + + LLVFile file(vfs, asset_uuid, type, LLVFile::READ); + S32 size = file.getSize(); + + char* buffer = new char[size]; + if (buffer == NULL) + { + llerrs << "Memory Allocation Failed" << llendl; + return; + } + + file.read((U8*)buffer, size); + + // Write it back out... + + LLTransactionID tid; + LLAssetID asset_id; + tid.generate(); + asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); + + LLVFile ofile(gVFS, asset_id, LLAssetType::AT_SOUND, LLVFile::APPEND); + + ofile.setMaxSize(size); + ofile.write((U8*)buffer, size); + + // Upload that asset to the database + LLSaveInfo* info = new LLSaveInfo(self->mItemUUID, self->mObjectUUID, "sound", tid); + gAssetStorage->storeAssetData(tid, LLAssetType::AT_SOUND, onSaveCopyComplete, info, FALSE); +} + +// static +void LLPreviewSound::onSaveCopyComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status) +{ + LLSaveInfo* info = (LLSaveInfo*)user_data; + + if (status == 0) + { + std::string item_name = "New Sound"; + std::string item_desc = ""; + // Saving into user inventory + LLViewerInventoryItem* item; + item = (LLViewerInventoryItem*)gInventory.getItem(info->mItemUUID); + if(item) + { + item_name = item->getName(); + item_desc = item->getDescription(); + } + gMessageSystem->newMessageFast(_PREHASH_CreateInventoryItem); + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->nextBlockFast(_PREHASH_InventoryBlock); + gMessageSystem->addU32Fast(_PREHASH_CallbackID, 0); + gMessageSystem->addUUIDFast(_PREHASH_FolderID, LLUUID::null); + gMessageSystem->addUUIDFast(_PREHASH_TransactionID, info->mTransactionID); + gMessageSystem->addU32Fast(_PREHASH_NextOwnerMask, 2147483647); + gMessageSystem->addS8Fast(_PREHASH_Type, 1); + gMessageSystem->addS8Fast(_PREHASH_InvType, 1); + gMessageSystem->addU8Fast(_PREHASH_WearableType, 0); + gMessageSystem->addStringFast(_PREHASH_Name, item_name); + gMessageSystem->addStringFast(_PREHASH_Description, item_desc); + gMessageSystem->sendReliable(gAgent.getRegionHost()); + } + else + { + llwarns << "Problem saving sound: " << status << llendl; + LLStringUtil::format_map_t args; + args["[REASON]"] = std::string(LLAssetStorage::getErrorString(status)); + gViewerWindow->alertXml("CannotUploadReason",args); + } +} +*/ +// static +void LLPreviewSound::copyUUID( void *userdata ) +{ + LLPreviewSound* self = (LLPreviewSound*) userdata; + const LLInventoryItem *item = self->getItem(); + + if(item ) + { + gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(item->getAssetUUID().asString())); + } +} +// + +// +// virtual +BOOL LLPreviewSound::canSaveAs() const +{ + return TRUE; +} + +// virtual +void LLPreviewSound::saveAs() +{ + const LLInventoryItem *item = getItem(); + + if(item) + { + gAssetStorage->getAssetData(item->getAssetUUID(), LLAssetType::AT_SOUND, LLPreviewSound::gotAssetForSave, this, TRUE); + } +} + +// static +void LLPreviewSound::gotAssetForSave(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status) +{ + LLPreviewSound* self = (LLPreviewSound*) user_data; + //const LLInventoryItem *item = self->getItem(); + + LLVFile file(vfs, asset_uuid, type, LLVFile::READ); + S32 size = file.getSize(); + + char* buffer = new char[size]; + if (buffer == NULL) + { + llerrs << "Memory Allocation Failed" << llendl; + return; + } + + file.read((U8*)buffer, size); + + // Write it back out... + + LLFilePicker& file_picker = LLFilePicker::instance(); + if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_OGG, LLDir::getScrubbedFileName(self->getItem()->getName())) ) + { + // User canceled or we failed to acquire save file. + return; + } + // remember the user-approved/edited file name. + std::string filename = file_picker.getFirstFile(); + + std::ofstream export_file(filename.c_str(), std::ofstream::binary); + export_file.write(buffer, size); + export_file.close(); +} + +// virtual +LLUUID LLPreviewSound::getItemID() +{ + const LLViewerInventoryItem* item = getItem(); + if(item) + { + return item->getUUID(); + } + return LLUUID::null; +} +// diff --git a/indra/newview/llpreviewsound.h b/indra/newview/llpreviewsound.h index b137a1a9d..535b233c9 100644 --- a/indra/newview/llpreviewsound.h +++ b/indra/newview/llpreviewsound.h @@ -44,29 +44,29 @@ public: static void playSound( void* userdata ); static void auditionSound( void* userdata ); - // - /* - static void makeCopy(void* userdata); - static void gotAssetForCopy(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status); - static void onSaveCopyComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); - */ - static void playAmbient(void* userdata); - static void copyUUID(void* userdata); - static void gotAssetForSave(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status); + // + /* + static void makeCopy(void* userdata); + static void gotAssetForCopy(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status); + static void onSaveCopyComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); + */ + static void playAmbient(void* userdata); + static void copyUUID(void* userdata); + static void gotAssetForSave(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status); // protected: virtual const char *getTitleName() const { return "Sound"; } - // - virtual BOOL canSaveAs() const; - virtual void saveAs(); - virtual LLUUID getItemID(); + // + virtual BOOL canSaveAs() const; + virtual void saveAs(); + virtual LLUUID getItemID(); // }; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index fb22f9151..bbfd90177 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1,6582 +1,6582 @@ -/** - * @file llselectmgr.cpp - * @brief A manager for selected objects and faces. - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-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" - -// file include -#include "llselectmgr.h" - -// library includes -#include "llcachename.h" -#include "lldbstrings.h" -#include "lleconomy.h" -#include "llgl.h" -#include "llrender.h" -#include "llpermissions.h" -#include "llpermissionsflags.h" -#include "llundo.h" -#include "lluuid.h" -#include "llvolume.h" -#include "message.h" -#include "object_flags.h" -#include "llquaternion.h" - -// viewer includes -#include "llagent.h" -#include "llviewerwindow.h" -#include "lldrawable.h" -#include "llfloaterinspect.h" -#include "llfloaterproperties.h" -#include "llfloaterreporter.h" -#include "llfloatertools.h" -#include "llframetimer.h" -#include "llfocusmgr.h" -#include "llhudeffecttrail.h" -#include "llhudmanager.h" -#include "llinventorymodel.h" -#include "llmenugl.h" -#include "llmutelist.h" -#include "llstatusbar.h" -#include "llsurface.h" -#include "lltool.h" -#include "lltooldraganddrop.h" -#include "lltoolmgr.h" -#include "lltoolpie.h" -#include "llui.h" -#include "llviewercamera.h" -#include "llviewercontrol.h" -#include "llviewertexturelist.h" -#include "llviewermedia.h" -#include "llviewermediafocus.h" -#include "llviewermenu.h" -#include "llviewerobject.h" -#include "llviewerobjectlist.h" -#include "llviewerregion.h" -#include "llviewerstats.h" -#include "llvoavatar.h" -#include "llvovolume.h" -#include "pipeline.h" - -#include "llglheaders.h" -#include "hippogridmanager.h" - -// [RLVa:KB] -#include "rlvhandler.h" -// [/RLVa:KB] - -#include "llglheaders.h" - -LLViewerObject* getSelectedParentObject(LLViewerObject *object) ; -// -// Consts -// - -const S32 NUM_SELECTION_UNDO_ENTRIES = 200; -const F32 SILHOUETTE_UPDATE_THRESHOLD_SQUARED = 0.02f; -const S32 OWNERSHIP_COST_PER_OBJECT = 10; // Must be the same as economy_constants.price_object_claim in the database. -const S32 MAX_ACTION_QUEUE_SIZE = 20; -const S32 MAX_SILS_PER_FRAME = 50; -const S32 MAX_OBJECTS_PER_PACKET = 254; -const S32 TE_SELECT_MASK_ALL = 0xFFFFFFFF; - -// -// Globals -// - -BOOL gDebugSelectMgr = FALSE; - -BOOL gHideSelectedObjects = FALSE; -BOOL gAllowSelectAvatar = FALSE; - -BOOL LLSelectMgr::sRectSelectInclusive = TRUE; -BOOL LLSelectMgr::sRenderSelectionHighlights = TRUE; -BOOL LLSelectMgr::sRenderHiddenSelections = TRUE; -BOOL LLSelectMgr::sRenderLightRadius = FALSE; -F32 LLSelectMgr::sHighlightThickness = 0.f; -F32 LLSelectMgr::sHighlightUScale = 0.f; -F32 LLSelectMgr::sHighlightVScale = 0.f; -F32 LLSelectMgr::sHighlightAlpha = 0.f; -F32 LLSelectMgr::sHighlightAlphaTest = 0.f; -F32 LLSelectMgr::sHighlightUAnim = 0.f; -F32 LLSelectMgr::sHighlightVAnim = 0.f; -LLColor4 LLSelectMgr::sSilhouetteParentColor; -LLColor4 LLSelectMgr::sSilhouetteChildColor; -LLColor4 LLSelectMgr::sHighlightInspectColor; -LLColor4 LLSelectMgr::sHighlightParentColor; -LLColor4 LLSelectMgr::sHighlightChildColor; -LLColor4 LLSelectMgr::sContextSilhouetteColor; -std::set LLSelectMgr::sObjectPropertiesFamilyRequests; - -static LLObjectSelection *get_null_object_selection(); -template<> - const LLSafeHandle::NullFunc - LLSafeHandle::sNullFunc = get_null_object_selection; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// struct LLDeRezInfo -// -// Used to keep track of important derez info. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -struct LLDeRezInfo -{ - EDeRezDestination mDestination; - LLUUID mDestinationID; - LLDeRezInfo(EDeRezDestination dest, const LLUUID& dest_id) : - mDestination(dest), mDestinationID(dest_id) {} -}; - -// -// Imports -// - - -static LLPointer sNullSelection; - -// -// Functions -// - -void LLSelectMgr::cleanupGlobals() -{ - sNullSelection = NULL; - LLSelectMgr::getInstance()->clearSelections(); -} - -LLObjectSelection *get_null_object_selection() -{ - if (sNullSelection.isNull()) - { - sNullSelection = new LLObjectSelection; - } - return sNullSelection; -} - - -//----------------------------------------------------------------------------- -// LLSelectMgr() -//----------------------------------------------------------------------------- -LLSelectMgr::LLSelectMgr() -{ - mTEMode = FALSE; - mLastCameraPos.clearVec(); - - sHighlightThickness = gSavedSettings.getF32("SelectionHighlightThickness"); - sHighlightUScale = gSavedSettings.getF32("SelectionHighlightUScale"); - sHighlightVScale = gSavedSettings.getF32("SelectionHighlightVScale"); - sHighlightAlpha = gSavedSettings.getF32("SelectionHighlightAlpha"); - sHighlightAlphaTest = gSavedSettings.getF32("SelectionHighlightAlphaTest"); - sHighlightUAnim = gSavedSettings.getF32("SelectionHighlightUAnim"); - sHighlightVAnim = gSavedSettings.getF32("SelectionHighlightVAnim"); - - sSilhouetteParentColor = gColors.getColor("SilhouetteParentColor"); - sSilhouetteChildColor = gColors.getColor("SilhouetteChildColor"); - sHighlightParentColor = gColors.getColor("HighlightParentColor"); - sHighlightChildColor = gColors.getColor("HighlightChildColor"); - sHighlightInspectColor = gColors.getColor("HighlightInspectColor"); - sContextSilhouetteColor = gColors.getColor("ContextSilhouetteColor")*0.5f; - - sRenderLightRadius = gSavedSettings.getBOOL("RenderLightRadius"); - - mRenderSilhouettes = TRUE; - - mGridMode = GRID_MODE_WORLD; - gSavedSettings.setS32("GridMode", (S32)GRID_MODE_WORLD); - mGridValid = FALSE; - - mSelectedObjects = new LLObjectSelection(); - mHoverObjects = new LLObjectSelection(); - mHighlightedObjects = new LLObjectSelection(); - - mForceSelection = FALSE; - mShowSelection = FALSE; -} - - -//----------------------------------------------------------------------------- -// ~LLSelectMgr() -//----------------------------------------------------------------------------- -LLSelectMgr::~LLSelectMgr() -{ - clearSelections(); -} - -void LLSelectMgr::clearSelections() -{ - mHoverObjects->deleteAllNodes(); - mSelectedObjects->deleteAllNodes(); - mHighlightedObjects->deleteAllNodes(); - mRectSelectedObjects.clear(); - mGridObjects.deleteAllNodes(); -} - -void LLSelectMgr::update() -{ - mSelectedObjects->cleanupNodes(); -} - -void LLSelectMgr::updateEffects() -{ - //keep reference grid objects active - struct f : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - LLDrawable* drawable = object->mDrawable; - if (drawable) - { - gPipeline.markMoved(drawable); - } - return true; - } - } func; - mGridObjects.applyToObjects(&func); - - if (mEffectsTimer.getElapsedTimeF32() > 1.f) - { - mSelectedObjects->updateEffects(); - mEffectsTimer.reset(); - } -} - -void LLSelectMgr::overrideObjectUpdates() -{ - //override any position updates from simulator on objects being edited - struct f : public LLSelectedNodeFunctor - { - virtual bool apply(LLSelectNode* selectNode) - { - LLViewerObject* object = selectNode->getObject(); - if (object && object->permMove()) - { - if (!selectNode->mLastPositionLocal.isExactlyZero()) - { - object->setPosition(selectNode->mLastPositionLocal); - } - if (selectNode->mLastRotation != LLQuaternion()) - { - object->setRotation(selectNode->mLastRotation); - } - if (!selectNode->mLastScale.isExactlyZero()) - { - object->setScale(selectNode->mLastScale); - } - } - return true; - } - } func; - getSelection()->applyToNodes(&func); -} - -//----------------------------------------------------------------------------- -// Select just the object, not any other group members. -//----------------------------------------------------------------------------- -LLObjectSelectionHandle LLSelectMgr::selectObjectOnly(LLViewerObject* object, S32 face) -{ - llassert( object ); - - //remember primary object - mSelectedObjects->mPrimaryObject = object; - - // Don't add an object that is already in the list - if (object->isSelected() ) { - // make sure point at position is updated - updatePointAt(); - gEditMenuHandler = this; - return NULL; - } - - if (!canSelectObject(object)) - { - //make_ui_sound("UISndInvalidOp"); - return NULL; - } - - // llinfos << "Adding object to selected object list" << llendl; - - // Place it in the list and tag it. - // This will refresh dialogs. - addAsIndividual(object, face); - - // Stop the object from moving (this anticipates changes on the - // simulator in LLTask::userSelect) - // *FIX: shouldn't zero out these either - object->setVelocity(LLVector3::zero); - object->setAcceleration(LLVector3::zero); - //object->setAngularVelocity(LLVector3::zero); - object->resetRot(); - - // Always send to simulator, so you get a copy of the - // permissions structure back. - gMessageSystem->newMessageFast(_PREHASH_ObjectSelect); - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); - LLViewerRegion* regionp = object->getRegion(); - gMessageSystem->sendReliable( regionp->getHost()); - - updatePointAt(); - updateSelectionCenter(); - saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - - // have selection manager handle edit menu immediately after - // user selects an object - if (mSelectedObjects->getObjectCount()) - { - gEditMenuHandler = this; - } - - return mSelectedObjects; -} - -//----------------------------------------------------------------------------- -// Select the object, parents and children. -//----------------------------------------------------------------------------- -LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(LLViewerObject* obj, BOOL add_to_end) -{ - llassert( obj ); - - //remember primary object - mSelectedObjects->mPrimaryObject = obj; - - // This may be incorrect if things weren't family selected before... - djs 07/08/02 - // Don't add an object that is already in the list - if (obj->isSelected() ) - { - // make sure pointat position is updated - updatePointAt(); - gEditMenuHandler = this; - return NULL; - } - - if (!canSelectObject(obj)) - { - //make_ui_sound("UISndInvalidOp"); - return NULL; - } - - // Since we're selecting a family, start at the root, but - // don't include an avatar. - LLViewerObject* root = obj; - - while(!root->isAvatar() && root->getParent() && !root->isJointChild()) - { - LLViewerObject* parent = (LLViewerObject*)root->getParent(); - if (parent->isAvatar()) - { - break; - } - root = parent; - } - - // Collect all of the objects - std::vector objects; - - root->addThisAndNonJointChildren(objects); - addAsFamily(objects, add_to_end); - - updateSelectionCenter(); - saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - updatePointAt(); - - dialog_refresh_all(); - - // Always send to simulator, so you get a copy of the permissions - // structure back. - sendSelect(); - - // Stop the object from moving (this anticipates changes on the - // simulator in LLTask::userSelect) - root->setVelocity(LLVector3::zero); - root->setAcceleration(LLVector3::zero); - //root->setAngularVelocity(LLVector3::zero); - root->resetRot(); - - // leave component mode - if (gSavedSettings.getBOOL("EditLinkedParts")) - { - gSavedSettings.setBOOL("EditLinkedParts", FALSE); - promoteSelectionToRoot(); - } - - // have selection manager handle edit menu immediately after - // user selects an object - if (mSelectedObjects->getObjectCount()) - { - gEditMenuHandler = this; - } - - return mSelectedObjects; -} - -//----------------------------------------------------------------------------- -// Select the object, parents and children. -//----------------------------------------------------------------------------- -LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(const std::vector& object_list, - BOOL send_to_sim) -{ - // Collect all of the objects, children included - std::vector objects; - - //clear primary object (no primary object) - mSelectedObjects->mPrimaryObject = NULL; - - if (object_list.size() < 1) - { - return NULL; - } - - // NOTE -- we add the objects in REVERSE ORDER - // to preserve the order in the mSelectedObjects list - for (std::vector::const_reverse_iterator riter = object_list.rbegin(); - riter != object_list.rend(); ++riter) - { - LLViewerObject *object = *riter; - - llassert( object ); - - if (!canSelectObject(object)) continue; - - object->addThisAndNonJointChildren(objects); - addAsFamily(objects); - - // Stop the object from moving (this anticipates changes on the - // simulator in LLTask::userSelect) - object->setVelocity(LLVector3::zero); - object->setAcceleration(LLVector3::zero); - //object->setAngularVelocity(LLVector3::zero); - object->resetRot(); - } - - updateSelectionCenter(); - saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - updatePointAt(); - dialog_refresh_all(); - - // Almost always send to simulator, so you get a copy of the permissions - // structure back. - // JC: The one case where you don't want to do this is if you're selecting - // all the objects on a sim. - if (send_to_sim) - { - sendSelect(); - } - - // leave component mode - if (gSavedSettings.getBOOL("EditLinkedParts")) - { - gSavedSettings.setBOOL("EditLinkedParts", FALSE); - promoteSelectionToRoot(); - } - - // have selection manager handle edit menu immediately after - // user selects an object - if (mSelectedObjects->getObjectCount()) - { - gEditMenuHandler = this; - } - - return mSelectedObjects; -} - -// Use for when the simulator kills an object. This version also -// handles informing the current tool of the object's deletion. -// -// Caller needs to call dialog_refresh_all if necessary. -BOOL LLSelectMgr::removeObjectFromSelections(const LLUUID &id) -{ - BOOL object_found = FALSE; - LLTool *tool = NULL; - if (!gNoRender) - { - tool = LLToolMgr::getInstance()->getCurrentTool(); - - // It's possible that the tool is editing an object that is not selected - LLViewerObject* tool_editing_object = tool->getEditingObject(); - if( tool_editing_object && tool_editing_object->mID == id) - { - tool->stopEditing(); - object_found = TRUE; - } - } - - // Iterate through selected objects list and kill the object - if( !object_found ) - { - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); ) - { - LLObjectSelection::iterator curiter = iter++; - LLViewerObject* object = (*curiter)->getObject(); - if (object->mID == id) - { - if (tool) - { - tool->stopEditing(); - } - - // lose the selection, don't tell simulator, it knows - deselectObjectAndFamily(object, FALSE); - object_found = TRUE; - break; // must break here, may have removed multiple objects from list - } - else if (object->isAvatar() && object->getParent() && ((LLViewerObject*)object->getParent())->mID == id) - { - // It's possible the item being removed has an avatar sitting on it - // So remove the avatar that is sitting on the object. - deselectObjectAndFamily(object, FALSE); - break; // must break here, may have removed multiple objects from list - } - } - } - - return object_found; -} - -void LLSelectMgr::deselectObjectAndFamily(LLViewerObject* object, BOOL send_to_sim, BOOL include_entire_object) -{ - // bail if nothing selected or if object wasn't selected in the first place - if(!object) return; - if(!object->isSelected()) return; - - // Collect all of the objects, and remove them - std::vector objects; - - if (include_entire_object) - { - // Since we're selecting a family, start at the root, but - // don't include an avatar. - LLViewerObject* root = object; - - while(!root->isAvatar() && root->getParent() && !root->isJointChild()) - { - LLViewerObject* parent = (LLViewerObject*)root->getParent(); - if (parent->isAvatar()) - { - break; - } - root = parent; - } - - object = root; - } - else - { - object = (LLViewerObject*)object->getRoot(); - } - - object->addThisAndAllChildren(objects); - remove(objects); - - if (!send_to_sim) return; - - //----------------------------------------------------------- - // Inform simulator of deselection - //----------------------------------------------------------- - LLViewerRegion* regionp = object->getRegion(); - - BOOL start_new_message = TRUE; - S32 select_count = 0; - - LLMessageSystem* msg = gMessageSystem; - for (U32 i = 0; i < objects.size(); i++) - { - if (start_new_message) - { - msg->newMessageFast(_PREHASH_ObjectDeselect); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - select_count++; - start_new_message = FALSE; - } - - msg->nextBlockFast(_PREHASH_ObjectData); - msg->addU32Fast(_PREHASH_ObjectLocalID, (objects[i])->getLocalID()); - select_count++; - - // Zap the angular velocity, as the sim will set it to zero - objects[i]->setAngularVelocity( 0,0,0 ); - objects[i]->setVelocity( 0,0,0 ); - - if(msg->isSendFull(NULL) || select_count >= MAX_OBJECTS_PER_PACKET) - { - msg->sendReliable(regionp->getHost() ); - select_count = 0; - start_new_message = TRUE; - } - } - - if (!start_new_message) - { - msg->sendReliable(regionp->getHost() ); - } - - updatePointAt(); - updateSelectionCenter(); -} - -void LLSelectMgr::deselectObjectOnly(LLViewerObject* object, BOOL send_to_sim) -{ - // bail if nothing selected or if object wasn't selected in the first place - if (!object) return; - if (!object->isSelected() ) return; - - // Zap the angular velocity, as the sim will set it to zero - object->setAngularVelocity( 0,0,0 ); - object->setVelocity( 0,0,0 ); - - if (send_to_sim) - { - LLViewerRegion* region = object->getRegion(); - gMessageSystem->newMessageFast(_PREHASH_ObjectDeselect); - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); - gMessageSystem->sendReliable(region->getHost()); - } - - // This will refresh dialogs. - remove( object ); - - updatePointAt(); - updateSelectionCenter(); -} - - -//----------------------------------------------------------------------------- -// addAsFamily -//----------------------------------------------------------------------------- - -void LLSelectMgr::addAsFamily(std::vector& objects, BOOL add_to_end) -{ - for (std::vector::iterator iter = objects.begin(); - iter != objects.end(); ++iter) - { - LLViewerObject* objectp = *iter; - - // Can't select yourself - if (objectp->mID == gAgentID - && !gAllowSelectAvatar) - { - continue; - } - - if (!objectp->isSelected()) - { - LLSelectNode *nodep = new LLSelectNode(objectp, TRUE); - if (add_to_end) - { - mSelectedObjects->addNodeAtEnd(nodep); - } - else - { - mSelectedObjects->addNode(nodep); - } - objectp->setSelected(TRUE); - - if (objectp->getNumTEs() > 0) - { - nodep->selectAllTEs(TRUE); - } - else - { - // object has no faces, so don't mess with faces - } - } - else - { - // we want this object to be selected for real - // so clear transient flag - LLSelectNode* select_node = mSelectedObjects->findNode(objectp); - if (select_node) - { - select_node->setTransient(FALSE); - } - } - } - saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); -} - -//----------------------------------------------------------------------------- -// addAsIndividual() - a single object, face, etc -//----------------------------------------------------------------------------- -void LLSelectMgr::addAsIndividual(LLViewerObject *objectp, S32 face, BOOL undoable) -{ - // check to see if object is already in list - LLSelectNode *nodep = mSelectedObjects->findNode(objectp); - - // if not in list, add it - if (!nodep) - { - nodep = new LLSelectNode(objectp, TRUE); - mSelectedObjects->addNode(nodep); - llassert_always(nodep->getObject()); - } - else - { - // make this a full-fledged selection - nodep->setTransient(FALSE); - // Move it to the front of the list - mSelectedObjects->moveNodeToFront(nodep); - } - - // Make sure the object is tagged as selected - objectp->setSelected( TRUE ); - - // And make sure we don't consider it as part of a family - nodep->mIndividualSelection = TRUE; - - // Handle face selection - if (objectp->getNumTEs() <= 0) - { - // object has no faces, so don't do anything - } - else if (face == SELECT_ALL_TES) - { - nodep->selectAllTEs(TRUE); - } - else if (0 <= face && face < SELECT_MAX_TES) - { - nodep->selectTE(face, TRUE); - } - else - { - llerrs << "LLSelectMgr::add face " << face << " out-of-range" << llendl; - return; - } - - saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - updateSelectionCenter(); - dialog_refresh_all(); -} - - -LLObjectSelectionHandle LLSelectMgr::setHoverObject(LLViewerObject *objectp, S32 face) -{ - if (!objectp) - { - mHoverObjects->deleteAllNodes(); - return NULL; - } - - // Can't select yourself - if (objectp->mID == gAgentID) - { - mHoverObjects->deleteAllNodes(); - return NULL; - } - - // Can't select land - if (objectp->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH) - { - mHoverObjects->deleteAllNodes(); - return NULL; - } - - mHoverObjects->mPrimaryObject = objectp; - - objectp = objectp->getRootEdit(); - - // is the requested object the same as the existing hover object root? - // NOTE: there is only ever one linked set in mHoverObjects - if (mHoverObjects->getFirstRootObject() != objectp) - { - - // Collect all of the objects - std::vector objects; - objectp = objectp->getRootEdit(); - objectp->addThisAndNonJointChildren(objects); - - mHoverObjects->deleteAllNodes(); - for (std::vector::iterator iter = objects.begin(); - iter != objects.end(); ++iter) - { - LLViewerObject* cur_objectp = *iter; - LLSelectNode* nodep = new LLSelectNode(cur_objectp, FALSE); - nodep->selectTE(face, TRUE); - mHoverObjects->addNodeAtEnd(nodep); - } - - requestObjectPropertiesFamily(objectp); - } - - return mHoverObjects; -} - -LLSelectNode *LLSelectMgr::getHoverNode() -{ - return getHoverObjects()->getFirstRootNode(); -} - -void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp) -{ - if (!objectp) - { - return; - } - - if (objectp->getPCode() != LL_PCODE_VOLUME) - { - return; - } - - if ((gSavedSettings.getBOOL("SelectOwnedOnly") && !objectp->permYouOwner()) || - (gSavedSettings.getBOOL("SelectMovableOnly") && !objectp->permMove())) - { - // only select my own objects - return; - } - - mRectSelectedObjects.insert(objectp); -} - -void LLSelectMgr::highlightObjectAndFamily(LLViewerObject* objectp) -{ - if (!objectp) - { - return; - } - - LLViewerObject* root_obj = (LLViewerObject*)objectp->getRoot(); - - highlightObjectOnly(root_obj); - - LLViewerObject::const_child_list_t& child_list = root_obj->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); iter++) - { - LLViewerObject* child = *iter; - highlightObjectOnly(child); - } -} - -// Note that this ignores the "select owned only" flag -// It's also more efficient than calling the single-object version over and over. -void LLSelectMgr::highlightObjectAndFamily(const std::vector& objects) -{ - for (std::vector::const_iterator iter1 = objects.begin(); - iter1 != objects.end(); ++iter1) - { - LLViewerObject* object = *iter1; - - if (!object) - { - continue; - } - if (object->getPCode() != LL_PCODE_VOLUME) - { - continue; - } - - LLViewerObject* root = (LLViewerObject*)object->getRoot(); - mRectSelectedObjects.insert(root); - - LLViewerObject::const_child_list_t& child_list = root->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter2 = child_list.begin(); - iter2 != child_list.end(); iter2++) - { - LLViewerObject* child = *iter2; - mRectSelectedObjects.insert(child); - } - } -} - -void LLSelectMgr::unhighlightObjectOnly(LLViewerObject* objectp) -{ - if (!objectp || (objectp->getPCode() != LL_PCODE_VOLUME)) - { - return; - } - - mRectSelectedObjects.erase(objectp); -} - -void LLSelectMgr::unhighlightObjectAndFamily(LLViewerObject* objectp) -{ - if (!objectp) - { - return; - } - - LLViewerObject* root_obj = (LLViewerObject*)objectp->getRoot(); - - unhighlightObjectOnly(root_obj); - - LLViewerObject::const_child_list_t& child_list = root_obj->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); iter++) - { - LLViewerObject* child = *iter; - unhighlightObjectOnly(child); - } -} - - -void LLSelectMgr::unhighlightAll() -{ - mRectSelectedObjects.clear(); - mHighlightedObjects->deleteAllNodes(); -} - -LLObjectSelectionHandle LLSelectMgr::selectHighlightedObjects() -{ - if (!mHighlightedObjects->getNumNodes()) - { - return NULL; - } - - //clear primary object - mSelectedObjects->mPrimaryObject = NULL; - - for (LLObjectSelection::iterator iter = getHighlightedObjects()->begin(); - iter != getHighlightedObjects()->end(); ) - { - LLObjectSelection::iterator curiter = iter++; - - LLSelectNode *nodep = *curiter; - LLViewerObject* objectp = nodep->getObject(); - - if (!canSelectObject(objectp)) - { - continue; - } - - // already selected - if (objectp->isSelected()) - { - continue; - } - - LLSelectNode* new_nodep = new LLSelectNode(*nodep); - mSelectedObjects->addNode(new_nodep); - - // flag this object as selected - objectp->setSelected(TRUE); - - mSelectedObjects->mSelectType = getSelectTypeForObject(objectp); - - // request properties on root objects - if (objectp->isRootEdit()) - { - requestObjectPropertiesFamily(objectp); - } - } - - // pack up messages to let sim know these objects are selected - sendSelect(); - unhighlightAll(); - updateSelectionCenter(); - saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - updatePointAt(); - - if (mSelectedObjects->getObjectCount()) - { - gEditMenuHandler = this; - } - - return mSelectedObjects; -} - -void LLSelectMgr::deselectHighlightedObjects() -{ - BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); - for (std::set >::iterator iter = mRectSelectedObjects.begin(); - iter != mRectSelectedObjects.end(); iter++) - { - LLViewerObject *objectp = *iter; - if (!select_linked_set) - { - deselectObjectOnly(objectp); - } - else - { - LLViewerObject* root_object = (LLViewerObject*)objectp->getRoot(); - if (root_object->isSelected()) - { - deselectObjectAndFamily(root_object); - } - } - } - - unhighlightAll(); -} - -void LLSelectMgr::addGridObject(LLViewerObject* objectp) -{ - LLSelectNode* nodep = new LLSelectNode(objectp, FALSE); - mGridObjects.addNodeAtEnd(nodep); - - LLViewerObject::const_child_list_t& child_list = objectp->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); iter++) - { - LLViewerObject* child = *iter; - nodep = new LLSelectNode(child, FALSE); - mGridObjects.addNodeAtEnd(nodep); - } -} - -void LLSelectMgr::clearGridObjects() -{ - mGridObjects.deleteAllNodes(); -} - -void LLSelectMgr::setGridMode(EGridMode mode) -{ - mGridMode = mode; - gSavedSettings.setS32("GridMode", mode); - updateSelectionCenter(); - mGridValid = FALSE; -} - -void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &scale) -{ - mGridObjects.cleanupNodes(); - - LLViewerObject* first_grid_object = mGridObjects.getFirstObject(); - - if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) - { - //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); - LLBBox bbox = mSavedSelectionBBox; - mGridOrigin = mSavedSelectionBBox.getCenterAgent(); - mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; - - // DEV-12570 Just taking the saved selection box rotation prevents - // wild rotations of linked sets while in local grid mode - //if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull()) - { - mGridRotation = mSavedSelectionBBox.getRotation(); - } - /*else //set to the root object - { - mGridRotation = root->getRenderRotation(); - }*/ - } - else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) - { - mGridRotation = first_grid_object->getRenderRotation(); - LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition(); - - LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX); - LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX); - BOOL grid_changed = FALSE; - for (LLObjectSelection::iterator iter = mGridObjects.begin(); - iter != mGridObjects.end(); ++iter) - { - LLViewerObject* object = (*iter)->getObject(); - LLDrawable* drawable = object->mDrawable; - if (drawable) - { - const LLVector3* ext = drawable->getSpatialExtents(); - update_min_max(min_extents, max_extents, ext[0]); - update_min_max(min_extents, max_extents, ext[1]); - grid_changed = TRUE; - } - } - if (grid_changed) - { - mGridOrigin = lerp(min_extents, max_extents, 0.5f); - LLDrawable* drawable = first_grid_object->mDrawable; - if (drawable && drawable->isActive()) - { - mGridOrigin = mGridOrigin * first_grid_object->getRenderMatrix(); - } - mGridScale = (max_extents - min_extents) * 0.5f; - } - } - else // GRID_MODE_WORLD or just plain default - { - const BOOL non_root_ok = TRUE; - LLViewerObject* first_object = mSelectedObjects->getFirstRootObject(non_root_ok); - - mGridOrigin.clearVec(); - mGridRotation.loadIdentity(); - - mSelectedObjects->mSelectType = getSelectTypeForObject( first_object ); - - switch (mSelectedObjects->mSelectType) - { - case SELECT_TYPE_ATTACHMENT: - if (first_object && first_object->getRootEdit()->mDrawable.notNull()) - { - // this means this object *has* to be an attachment - LLXform* attachment_point_xform = first_object->getRootEdit()->mDrawable->mXform.getParent(); - if(attachment_point_xform) { - mGridOrigin = attachment_point_xform->getWorldPosition(); - mGridRotation = attachment_point_xform->getWorldRotation(); - } - mGridScale = LLVector3(1.f, 1.f, 1.f) * gSavedSettings.getF32("GridResolution"); - } - break; - case SELECT_TYPE_HUD: - // use HUD-scaled grid - mGridScale = LLVector3(0.25f, 0.25f, 0.25f); - break; - case SELECT_TYPE_WORLD: - mGridScale = LLVector3(1.f, 1.f, 1.f) * gSavedSettings.getF32("GridResolution"); - break; - } - } - llassert(mGridOrigin.isFinite()); - - origin = mGridOrigin; - rotation = mGridRotation; - scale = mGridScale; - mGridValid = TRUE; -} - -//----------------------------------------------------------------------------- -// remove() - an array of objects -//----------------------------------------------------------------------------- - -void LLSelectMgr::remove(std::vector& objects) -{ - for (std::vector::iterator iter = objects.begin(); - iter != objects.end(); ++iter) - { - LLViewerObject* objectp = *iter; - LLSelectNode* nodep = mSelectedObjects->findNode(objectp); - if (nodep) - { - objectp->setSelected(FALSE); - mSelectedObjects->removeNode(nodep); - nodep = NULL; - } - } - updateSelectionCenter(); - dialog_refresh_all(); -} - - -//----------------------------------------------------------------------------- -// remove() - a single object -//----------------------------------------------------------------------------- -void LLSelectMgr::remove(LLViewerObject *objectp, S32 te, BOOL undoable) -{ - // get object node (and verify it is in the selected list) - LLSelectNode *nodep = mSelectedObjects->findNode(objectp); - if (!nodep) - { - return; - } - - // if face = all, remove object from list - if ((objectp->getNumTEs() <= 0) || (te == SELECT_ALL_TES)) - { - // Remove all faces (or the object doesn't have faces) so remove the node - mSelectedObjects->removeNode(nodep); - nodep = NULL; - objectp->setSelected( FALSE ); - } - else if (0 <= te && te < SELECT_MAX_TES) - { - // ...valid face, check to see if it was on - if (nodep->isTESelected(te)) - { - nodep->selectTE(te, FALSE); - } - else - { - llerrs << "LLSelectMgr::remove - tried to remove TE " << te << " that wasn't selected" << llendl; - return; - } - - // ...check to see if this operation turned off all faces - BOOL found = FALSE; - for (S32 i = 0; i < nodep->getObject()->getNumTEs(); i++) - { - found = found || nodep->isTESelected(i); - } - - // ...all faces now turned off, so remove - if (!found) - { - mSelectedObjects->removeNode(nodep); - nodep = NULL; - objectp->setSelected( FALSE ); - // *FIXME: Doesn't update simulator that object is no longer selected - } - } - else - { - // ...out of range face - llerrs << "LLSelectMgr::remove - TE " << te << " out of range" << llendl; - } - - updateSelectionCenter(); - dialog_refresh_all(); -} - - -//----------------------------------------------------------------------------- -// removeAll() -//----------------------------------------------------------------------------- -void LLSelectMgr::removeAll() -{ - for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); - iter != mSelectedObjects->end(); iter++ ) - { - LLViewerObject *objectp = (*iter)->getObject(); - objectp->setSelected( FALSE ); - } - - mSelectedObjects->deleteAllNodes(); - - updateSelectionCenter(); - dialog_refresh_all(); -} - -//----------------------------------------------------------------------------- -// promoteSelectionToRoot() -//----------------------------------------------------------------------------- -void LLSelectMgr::promoteSelectionToRoot() -{ - std::set selection_set; - - BOOL selection_changed = FALSE; - - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); ) - { - LLObjectSelection::iterator curiter = iter++; - LLSelectNode* nodep = *curiter; - LLViewerObject* object = nodep->getObject(); - - if (nodep->mIndividualSelection) - { - selection_changed = TRUE; - } - - LLViewerObject* parentp = object; - while(parentp->getParent() && !(parentp->isRootEdit() || parentp->isJointChild())) - { - parentp = (LLViewerObject*)parentp->getParent(); - } - - selection_set.insert(parentp); - } - - if (selection_changed) - { - deselectAll(); - - std::set::iterator set_iter; - for (set_iter = selection_set.begin(); set_iter != selection_set.end(); ++set_iter) - { - selectObjectAndFamily(*set_iter); - } - } -} - -//----------------------------------------------------------------------------- -// demoteSelectionToIndividuals() -//----------------------------------------------------------------------------- -void LLSelectMgr::demoteSelectionToIndividuals() -{ - std::vector objects; - - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++) - { - LLViewerObject* object = (*iter)->getObject(); - object->addThisAndNonJointChildren(objects); - } - - if (!objects.empty()) - { - deselectAll(); - for (std::vector::iterator iter = objects.begin(); - iter != objects.end(); ++iter) - { - LLViewerObject* objectp = *iter; - selectObjectOnly(objectp); - } - } -} - -//----------------------------------------------------------------------------- -// dump() -//----------------------------------------------------------------------------- -void LLSelectMgr::dump() -{ - llinfos << "Selection Manager: " << mSelectedObjects->getNumNodes() << " items" << llendl; - - llinfos << "TE mode " << mTEMode << llendl; - - S32 count = 0; - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); iter++ ) - { - LLViewerObject* objectp = (*iter)->getObject(); - llinfos << "Object " << count << " type " << LLPrimitive::pCodeToString(objectp->getPCode()) << llendl; - llinfos << " hasLSL " << objectp->flagScripted() << llendl; - llinfos << " hasTouch " << objectp->flagHandleTouch() << llendl; - llinfos << " hasMoney " << objectp->flagTakesMoney() << llendl; - llinfos << " getposition " << objectp->getPosition() << llendl; - llinfos << " getpositionAgent " << objectp->getPositionAgent() << llendl; - llinfos << " getpositionRegion " << objectp->getPositionRegion() << llendl; - llinfos << " getpositionGlobal " << objectp->getPositionGlobal() << llendl; - LLDrawable* drawablep = objectp->mDrawable; - llinfos << " " << (drawablep&& drawablep->isVisible() ? "visible" : "invisible") << llendl; - llinfos << " " << (drawablep&& drawablep->isState(LLDrawable::FORCE_INVISIBLE) ? "force_invisible" : "") << llendl; - count++; - } - - // Face iterator - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); iter++ ) - { - LLSelectNode* node = *iter; - LLViewerObject* objectp = node->getObject(); - if (!objectp) - continue; - for (S32 te = 0; te < objectp->getNumTEs(); ++te ) - { - if (node->isTESelected(te)) - { - llinfos << "Object " << objectp << " te " << te << llendl; - } - } - } - - llinfos << mHighlightedObjects->getNumNodes() << " objects currently highlighted." << llendl; - - llinfos << "Center global " << mSelectionCenterGlobal << llendl; -} - -//----------------------------------------------------------------------------- -// cleanup() -//----------------------------------------------------------------------------- -void LLSelectMgr::cleanup() -{ - mSilhouetteImagep = NULL; -} - - -//--------------------------------------------------------------------------- -// Manipulate properties of selected objects -//--------------------------------------------------------------------------- - -struct LLSelectMgrSendFunctor : public LLSelectedObjectFunctor -{ - virtual bool apply(LLViewerObject* object) - { - if (object->permModify()) - { - object->sendTEUpdate(); - } - return true; - } -}; - -//----------------------------------------------------------------------------- -// selectionSetImage() -//----------------------------------------------------------------------------- -// *TODO: re-arch texture applying out of lltooldraganddrop -void LLSelectMgr::selectionSetImage(const LLUUID& imageid) -{ - // First for (no copy) textures and multiple object selection - LLViewerInventoryItem* item = gInventory.getItem(imageid); - // fffff - /* - // - if(item - && !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID()) - && (mSelectedObjects->getNumNodes() > 1) ) - { - llwarns << "Attempted to apply no-copy texture to multiple objects" - << llendl; - return; - } - // - */ - // - - struct f : public LLSelectedTEFunctor - { - LLViewerInventoryItem* mItem; - LLUUID mImageID; - f(LLViewerInventoryItem* item, const LLUUID& id) : mItem(item), mImageID(id) {} - bool apply(LLViewerObject* objectp, S32 te) - { - if (mItem) - { - if (te == -1) // all faces - { - LLToolDragAndDrop::dropTextureAllFaces(objectp, - mItem, - LLToolDragAndDrop::SOURCE_AGENT, - LLUUID::null); - } - else // one face - { - LLToolDragAndDrop::dropTextureOneFace(objectp, - te, - mItem, - LLToolDragAndDrop::SOURCE_AGENT, - LLUUID::null); - } - } - else // not an inventory item - { - // Texture picker defaults aren't inventory items - // * Don't need to worry about permissions for them - // * Can just apply the texture and be done with it. - objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); - } - return true; - } - } setfunc(item, imageid); - getSelection()->applyToTEs(&setfunc); - - struct g : public LLSelectedObjectFunctor - { - LLViewerInventoryItem* mItem; - g(LLViewerInventoryItem* item) : mItem(item) {} - virtual bool apply(LLViewerObject* object) - { - if (!mItem) - { - object->sendTEUpdate(); - // 1 particle effect per object - // - if(!gSavedSettings.getBOOL("DisablePointAtAndBeam")) - { - // - LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); - effectp->setTargetObject(object); - effectp->setDuration(LL_HUD_DUR_SHORT); - effectp->setColor(LLColor4U(gAgent.getEffectColor())); - // - } - // - } - return true; - } - } sendfunc(item); - getSelection()->applyToObjects(&sendfunc); -} - -//----------------------------------------------------------------------------- -// selectionSetColor() -//----------------------------------------------------------------------------- -void LLSelectMgr::selectionSetColor(const LLColor4 &color) -{ - struct f : public LLSelectedTEFunctor - { - LLColor4 mColor; - f(const LLColor4& c) : mColor(c) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - object->setTEColor(te, mColor); - } - return true; - } - } setfunc(color); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - -//----------------------------------------------------------------------------- -// selectionSetColorOnly() -//----------------------------------------------------------------------------- -void LLSelectMgr::selectionSetColorOnly(const LLColor4 &color) -{ - struct f : public LLSelectedTEFunctor - { - LLColor4 mColor; - f(const LLColor4& c) : mColor(c) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - LLColor4 prev_color = object->getTE(te)->getColor(); - mColor.mV[VALPHA] = prev_color.mV[VALPHA]; - // update viewer side color in anticipation of update from simulator - object->setTEColor(te, mColor); - } - return true; - } - } setfunc(color); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - -//----------------------------------------------------------------------------- -// selectionSetAlphaOnly() -//----------------------------------------------------------------------------- -void LLSelectMgr::selectionSetAlphaOnly(const F32 alpha) -{ - struct f : public LLSelectedTEFunctor - { - F32 mAlpha; - f(const F32& a) : mAlpha(a) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - LLColor4 prev_color = object->getTE(te)->getColor(); - prev_color.mV[VALPHA] = mAlpha; - // update viewer side color in anticipation of update from simulator - object->setTEColor(te, prev_color); - } - return true; - } - } setfunc(alpha); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - -void LLSelectMgr::selectionRevertColors() -{ - struct f : public LLSelectedTEFunctor - { - LLObjectSelectionHandle mSelectedObjects; - f(LLObjectSelectionHandle sel) : mSelectedObjects(sel) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - LLSelectNode* nodep = mSelectedObjects->findNode(object); - if (nodep && te < (S32)nodep->mSavedColors.size()) - { - LLColor4 color = nodep->mSavedColors[te]; - // update viewer side color in anticipation of update from simulator - object->setTEColor(te, color); - } - } - return true; - } - } setfunc(mSelectedObjects); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - -BOOL LLSelectMgr::selectionRevertTextures() -{ - struct f : public LLSelectedTEFunctor - { - LLObjectSelectionHandle mSelectedObjects; - f(LLObjectSelectionHandle sel) : mSelectedObjects(sel) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - LLSelectNode* nodep = mSelectedObjects->findNode(object); - if (nodep && te < (S32)nodep->mSavedTextures.size()) - { - LLUUID id = nodep->mSavedTextures[te]; - // update textures on viewer side - if (id.isNull()) - { - // this was probably a no-copy texture, leave image as-is - return FALSE; - } - else - { - object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); - } - } - } - return true; - } - } setfunc(mSelectedObjects); - BOOL revert_successful = getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); - - return revert_successful; -} - -void LLSelectMgr::selectionSetBumpmap(U8 bumpmap) -{ - struct f : public LLSelectedTEFunctor - { - U8 mBump; - f(const U8& b) : mBump(b) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - // update viewer side color in anticipation of update from simulator - object->setTEBumpmap(te, mBump); - } - return true; - } - } setfunc(bumpmap); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - -void LLSelectMgr::selectionSetTexGen(U8 texgen) -{ - struct f : public LLSelectedTEFunctor - { - U8 mTexgen; - f(const U8& t) : mTexgen(t) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - // update viewer side color in anticipation of update from simulator - object->setTETexGen(te, mTexgen); - } - return true; - } - } setfunc(texgen); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - - -void LLSelectMgr::selectionSetShiny(U8 shiny) -{ - struct f : public LLSelectedTEFunctor - { - U8 mShiny; - f(const U8& t) : mShiny(t) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - // update viewer side color in anticipation of update from simulator - object->setTEShiny(te, mShiny); - } - return true; - } - } setfunc(shiny); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - -void LLSelectMgr::selectionSetFullbright(U8 fullbright) -{ - struct f : public LLSelectedTEFunctor - { - U8 mFullbright; - f(const U8& t) : mFullbright(t) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - // update viewer side color in anticipation of update from simulator - object->setTEFullbright(te, mFullbright); - } - return true; - } - } setfunc(fullbright); - getSelection()->applyToTEs(&setfunc); - - struct g : public LLSelectedObjectFunctor - { - U8 mFullbright; - g(const U8& t) : mFullbright(t) {} - virtual bool apply(LLViewerObject* object) - { - if (object->permModify()) - { - object->sendTEUpdate(); - if (mFullbright) - { - U8 material = object->getMaterial(); - U8 mcode = material & LL_MCODE_MASK; - if (mcode == LL_MCODE_LIGHT) - { - mcode = LL_MCODE_GLASS; - material = (material & ~LL_MCODE_MASK) | mcode; - object->setMaterial(material); - object->sendMaterialUpdate(); - } - } - } - return true; - } - } sendfunc(fullbright); - getSelection()->applyToObjects(&sendfunc); -} - -void LLSelectMgr::selectionSetMediaTypeAndURL(U8 media_type, const std::string& media_url) -{ - U8 media_flags = LLTextureEntry::MF_NONE; - if (media_type == LLViewerObject::MEDIA_TYPE_WEB_PAGE) - { - media_flags = LLTextureEntry::MF_HAS_MEDIA; - } - - struct f : public LLSelectedTEFunctor - { - U8 mMediaFlags; - f(const U8& t) : mMediaFlags(t) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - // update viewer side color in anticipation of update from simulator - object->setTEMediaFlags(te, mMediaFlags); - } - return true; - } - } setfunc(media_flags); - getSelection()->applyToTEs(&setfunc); - - struct g : public LLSelectedObjectFunctor - { - U8 media_type; - const std::string& media_url ; - g(U8 a, const std::string& b) : media_type(a), media_url(b) {} - virtual bool apply(LLViewerObject* object) - { - if (object->permModify()) - { - object->sendTEUpdate(); - object->setMediaType(media_type); - object->setMediaURL(media_url); - } - return true; - } - } sendfunc(media_type, media_url); - getSelection()->applyToObjects(&sendfunc); -} - -void LLSelectMgr::selectionSetGlow(F32 glow) -{ - struct f1 : public LLSelectedTEFunctor - { - F32 mGlow; - f1(F32 glow) : mGlow(glow) {}; - bool apply(LLViewerObject* object, S32 face) - { - if (object->permModify()) - { - // update viewer side color in anticipation of update from simulator - object->setTEGlow(face, mGlow); - } - return true; - } - } func1(glow); - mSelectedObjects->applyToTEs( &func1 ); - - struct f2 : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - if (object->permModify()) - { - object->sendTEUpdate(); - } - return true; - } - } func2; - mSelectedObjects->applyToObjects( &func2 ); -} - - -//----------------------------------------------------------------------------- -// findObjectPermissions() -//----------------------------------------------------------------------------- -LLPermissions* LLSelectMgr::findObjectPermissions(const LLViewerObject* object) -{ - for (LLObjectSelection::valid_iterator iter = getSelection()->valid_begin(); - iter != getSelection()->valid_end(); iter++ ) - { - LLSelectNode* nodep = *iter; - if (nodep->getObject() == object) - { - return nodep->mPermissions; - } - } - - return NULL; -} - - -//----------------------------------------------------------------------------- -// selectionGetGlow() -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectionGetGlow(F32 *glow) -{ - BOOL identical; - F32 lglow = 0.f; - struct f1 : public LLSelectedTEGetFunctor - { - F32 get(LLViewerObject* object, S32 face) - { - return object->getTE(face)->getGlow(); - } - } func; - identical = mSelectedObjects->getSelectedTEValue( &func, lglow ); - - *glow = lglow; - return identical; -} - -//----------------------------------------------------------------------------- -// selectionSetMaterial() -//----------------------------------------------------------------------------- -void LLSelectMgr::selectionSetMaterial(U8 material) -{ - struct f : public LLSelectedObjectFunctor - { - U8 mMaterial; - f(const U8& t) : mMaterial(t) {} - virtual bool apply(LLViewerObject* object) - { - if (object->permModify()) - { - U8 cur_material = object->getMaterial(); - U8 material = mMaterial | (cur_material & ~LL_MCODE_MASK); - object->setMaterial(material); - object->sendMaterialUpdate(); - } - return true; - } - } sendfunc(material); - getSelection()->applyToObjects(&sendfunc); -} - -// TRUE if all selected objects have this PCode -BOOL LLSelectMgr::selectionAllPCode(LLPCode code) -{ - struct f : public LLSelectedObjectFunctor - { - LLPCode mCode; - f(const LLPCode& t) : mCode(t) {} - virtual bool apply(LLViewerObject* object) - { - if (object->getPCode() != mCode) - { - return FALSE; - } - return true; - } - } func(code); - BOOL res = getSelection()->applyToObjects(&func); - return res; -} - -bool LLSelectMgr::selectionGetIncludeInSearch(bool* include_in_search_out) -{ - LLViewerObject *object = mSelectedObjects->getFirstRootObject(); - if (!object) return FALSE; - - bool include_in_search = object->getIncludeInSearch(); - - bool identical = true; - - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++) - { - LLViewerObject* object = (*iter)->getObject(); - - if ( include_in_search != object->getIncludeInSearch()) - { - identical = false; - break; - } - } - - *include_in_search_out = include_in_search; - return identical; -} - -void LLSelectMgr::selectionSetIncludeInSearch(bool include_in_search) -{ - LLViewerObject* object = NULL; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++) - { - object = (*iter)->getObject(); - object->setIncludeInSearch(include_in_search); - } - sendListToRegions( - "ObjectIncludeInSearch", - packAgentAndSessionID, - packObjectIncludeInSearch, - &include_in_search, - SEND_ONLY_ROOTS); -} - -BOOL LLSelectMgr::selectionGetClickAction(U8 *out_action) -{ - LLViewerObject *object = mSelectedObjects->getFirstObject(); - if (!object) - { - return FALSE; - } - - U8 action = object->getClickAction(); - *out_action = action; - - struct f : public LLSelectedObjectFunctor - { - U8 mAction; - f(const U8& t) : mAction(t) {} - virtual bool apply(LLViewerObject* object) - { - if ( mAction != object->getClickAction()) - { - return false; - } - return true; - } - } func(action); - BOOL res = getSelection()->applyToObjects(&func); - return res; -} - -void LLSelectMgr::selectionSetClickAction(U8 action) -{ - struct f : public LLSelectedObjectFunctor - { - U8 mAction; - f(const U8& t) : mAction(t) {} - virtual bool apply(LLViewerObject* object) - { - object->setClickAction(mAction); - return true; - } - } func(action); - getSelection()->applyToObjects(&func); - - sendListToRegions("ObjectClickAction", - packAgentAndSessionID, - packObjectClickAction, - &action, - SEND_INDIVIDUALS); -} - - -//----------------------------------------------------------------------------- -// godlike requests -//----------------------------------------------------------------------------- - -typedef std::pair godlike_request_t; - -void LLSelectMgr::sendGodlikeRequest(const std::string& request, const std::string& param) -{ - // If the agent is neither godlike nor an estate owner, the server - // will reject the request. - std::string message_type; - if (gAgent.isGodlike()) - { - message_type = "GodlikeMessage"; - } - else - { - message_type = "EstateOwnerMessage"; - } - - godlike_request_t data(request, param); - if(!mSelectedObjects->getRootObjectCount()) - { - LLMessageSystem* msg = gMessageSystem; - msg->newMessage(message_type.c_str()); - LLSelectMgr::packGodlikeHead(&data); - gAgent.sendReliableMessage(); - } - else - { - sendListToRegions(message_type, packGodlikeHead, packObjectIDAsParam, &data, SEND_ONLY_ROOTS); - } -} - -void LLSelectMgr::packGodlikeHead(void* user_data) -{ - LLMessageSystem* msg = gMessageSystem; - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addUUID("TransactionID", LLUUID::null); - godlike_request_t* data = (godlike_request_t*)user_data; - msg->nextBlock("MethodData"); - msg->addString("Method", data->first); - msg->addUUID("Invoice", LLUUID::null); - - // The parameters used to be restricted to either string or - // integer. This mimics that behavior under the new 'string-only' - // parameter list by not packing a string if there wasn't one - // specified. The object ids will be packed in the - // packObjectIDAsParam() method. - if(data->second.size() > 0) - { - msg->nextBlock("ParamList"); - msg->addString("Parameter", data->second); - } -} - -// static -void LLSelectMgr::packObjectIDAsParam(LLSelectNode* node, void *) -{ - std::string buf = llformat("%u", node->getObject()->getLocalID()); - gMessageSystem->nextBlock("ParamList"); - gMessageSystem->addString("Parameter", buf); -} - -//----------------------------------------------------------------------------- -// Rotation options -//----------------------------------------------------------------------------- -void LLSelectMgr::selectionResetRotation() -{ - struct f : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - LLQuaternion identity(0.f, 0.f, 0.f, 1.f); - object->setRotation(identity); - if (object->mDrawable.notNull()) - { - gPipeline.markMoved(object->mDrawable, TRUE); - } - object->sendRotationUpdate(); - return true; - } - } func; - getSelection()->applyToRootObjects(&func); -} - -void LLSelectMgr::selectionRotateAroundZ(F32 degrees) -{ - LLQuaternion rot( degrees * DEG_TO_RAD, LLVector3(0,0,1) ); - struct f : public LLSelectedObjectFunctor - { - LLQuaternion mRot; - f(const LLQuaternion& rot) : mRot(rot) {} - virtual bool apply(LLViewerObject* object) - { - object->setRotation( object->getRotationEdit() * mRot ); - if (object->mDrawable.notNull()) - { - gPipeline.markMoved(object->mDrawable, TRUE); - } - object->sendRotationUpdate(); - return true; - } - } func(rot); - getSelection()->applyToRootObjects(&func); -} - - -//----------------------------------------------------------------------------- -// selectionTexScaleAutofit() -//----------------------------------------------------------------------------- -void LLSelectMgr::selectionTexScaleAutofit(F32 repeats_per_meter) -{ - struct f : public LLSelectedTEFunctor - { - F32 mRepeatsPerMeter; - f(const F32& t) : mRepeatsPerMeter(t) {} - bool apply(LLViewerObject* object, S32 te) - { - - if (object->permModify()) - { - // Compute S,T to axis mapping - U32 s_axis, t_axis; - if (!LLPrimitive::getTESTAxes(te, &s_axis, &t_axis)) - { - return TRUE; - } - - F32 new_s = object->getScale().mV[s_axis] * mRepeatsPerMeter; - F32 new_t = object->getScale().mV[t_axis] * mRepeatsPerMeter; - - object->setTEScale(te, new_s, new_t); - } - return true; - } - } setfunc(repeats_per_meter); - getSelection()->applyToTEs(&setfunc); - - LLSelectMgrSendFunctor sendfunc; - getSelection()->applyToObjects(&sendfunc); -} - - - -// Called at the end of a scale operation, this adjusts the textures to attempt to -// maintain a constant repeats per meter. -// BUG: Only works for flex boxes. -//----------------------------------------------------------------------------- -// adjustTexturesByScale() -//----------------------------------------------------------------------------- -void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch) -{ - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); iter++) - { - LLSelectNode* selectNode = *iter; - LLViewerObject* object = selectNode->getObject(); - - if (!object) - { - continue; - } - - if (!object->permModify()) - { - continue; - } - - if (object->getNumTEs() == 0) - { - continue; - } - - BOOL send = FALSE; - - for (U8 te_num = 0; te_num < object->getNumTEs(); te_num++) - { - const LLTextureEntry* tep = object->getTE(te_num); - - BOOL planar = tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR; - if (planar == stretch) - { - // Figure out how S,T changed with scale operation - U32 s_axis, t_axis; - if (!LLPrimitive::getTESTAxes(te_num, &s_axis, &t_axis)) - { - continue; - } - - LLVector3 scale_ratio = selectNode->mTextureScaleRatios[te_num]; - LLVector3 object_scale = object->getScale(); - - // Apply new scale to face - if (planar) - { - object->setTEScale(te_num, 1.f/object_scale.mV[s_axis]*scale_ratio.mV[s_axis], - 1.f/object_scale.mV[t_axis]*scale_ratio.mV[t_axis]); - } - else - { - object->setTEScale(te_num, scale_ratio.mV[s_axis]*object_scale.mV[s_axis], - scale_ratio.mV[t_axis]*object_scale.mV[t_axis]); - } - send = send_to_sim; - } - } - - if (send) - { - object->sendTEUpdate(); - } - } -} - -//----------------------------------------------------------------------------- -// selectGetAllRootsValid() -// Returns TRUE if the viewer has information on all selected objects -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetAllRootsValid() -{ - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); ++iter ) - { - LLSelectNode* node = *iter; - if( !node->mValid ) - { - return FALSE; - } - } - return TRUE; -} - - -//----------------------------------------------------------------------------- -// selectGetAllValid() -// Returns TRUE if the viewer has information on all selected objects -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetAllValid() -{ - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); ++iter ) - { - LLSelectNode* node = *iter; - if( !node->mValid ) - { - return FALSE; - } - } - return TRUE; -} - - -//----------------------------------------------------------------------------- -// selectGetModify() - return TRUE if current agent can modify all -// selected objects. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetModify() -{ - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); iter++ ) - { - LLSelectNode* node = *iter; - LLViewerObject* object = node->getObject(); - if( !object || !node->mValid ) - { - return FALSE; - } - if( !object->permModify() ) - { - return FALSE; - } - } - return TRUE; -} - -//----------------------------------------------------------------------------- -// selectGetRootsModify() - return TRUE if current agent can modify all -// selected root objects. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetRootsModify() -{ - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - LLViewerObject* object = node->getObject(); - if( !node->mValid ) - { - return FALSE; - } - if( !object->permModify() ) - { - return FALSE; - } - } - - return TRUE; -} - - -//----------------------------------------------------------------------------- -// selectGetRootsTransfer() - return TRUE if current agent can transfer all -// selected root objects. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetRootsTransfer() -{ - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - LLViewerObject* object = node->getObject(); - if( !node->mValid ) - { - return FALSE; - } - if(!object->permTransfer()) - { - return FALSE; - } - } - return TRUE; -} - -//----------------------------------------------------------------------------- -// selectGetRootsCopy() - return TRUE if current agent can copy all -// selected root objects. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetRootsCopy() -{ - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - LLViewerObject* object = node->getObject(); - if( !node->mValid ) - { - return FALSE; - } - if(!object->permCopy()) - { - return FALSE; - } - } - return TRUE; -} - -//----------------------------------------------------------------------------- -// selectGetCreator() -// Creator information only applies to root objects. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetCreator(LLUUID& result_id, std::string& name) -{ - BOOL identical = TRUE; - BOOL first = TRUE; - LLUUID first_id; - for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); - iter != getSelection()->root_object_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - first_id = node->mPermissions->getCreator(); - first = FALSE; - } - else - { - if ( !(first_id == node->mPermissions->getCreator() ) ) - { - identical = FALSE; - break; - } - } - } - if (first_id.isNull()) - { - return FALSE; - } - - result_id = first_id; - - if (identical) - { - gCacheName->getFullName(first_id, name); - } - else - { - name.assign( "(multiple)" ); - } - - return identical; -} - - -//----------------------------------------------------------------------------- -// selectGetOwner() -// Owner information only applies to roots. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetOwner(LLUUID& result_id, std::string& name) -{ - BOOL identical = TRUE; - BOOL first = TRUE; - BOOL first_group_owned = FALSE; - LLUUID first_id; - for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); - iter != getSelection()->root_object_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - node->mPermissions->getOwnership(first_id, first_group_owned); - first = FALSE; - } - else - { - LLUUID owner_id; - BOOL is_group_owned = FALSE; - if (!(node->mPermissions->getOwnership(owner_id, is_group_owned)) - || owner_id != first_id || is_group_owned != first_group_owned) - { - identical = FALSE; - break; - } - } - } - if (first_id.isNull()) - { - return FALSE; - } - - result_id = first_id; - - if (identical) - { - BOOL public_owner = (first_id.isNull() && !first_group_owned); - if (first_group_owned) - { - name.assign( "(Group Owned)"); - } - else if(!public_owner) - { - gCacheName->getFullName(first_id, name); - } - else - { - name.assign("Public"); - } - } - else - { - name.assign( "(multiple)" ); - } - - return identical; -} - - -//----------------------------------------------------------------------------- -// selectGetLastOwner() -// Owner information only applies to roots. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetLastOwner(LLUUID& result_id, std::string& name) -{ - BOOL identical = TRUE; - BOOL first = TRUE; - LLUUID first_id; - for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); - iter != getSelection()->root_object_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - first_id = node->mPermissions->getLastOwner(); - first = FALSE; - } - else - { - if ( !(first_id == node->mPermissions->getLastOwner() ) ) - { - identical = FALSE; - break; - } - } - } - if (first_id.isNull()) - { - return FALSE; - } - - result_id = first_id; - - if (identical) - { - BOOL public_owner = (first_id.isNull()); - if(!public_owner) - { - gCacheName->getFullName(first_id, name); - } - else - { - name.assign("Public or Group"); - } - } - else - { - name.assign( "" ); - } - - return identical; -} - - -//----------------------------------------------------------------------------- -// selectGetGroup() -// Group information only applies to roots. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id) -{ - BOOL identical = TRUE; - BOOL first = TRUE; - LLUUID first_id; - for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); - iter != getSelection()->root_object_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - first_id = node->mPermissions->getGroup(); - first = FALSE; - } - else - { - if ( !(first_id == node->mPermissions->getGroup() ) ) - { - identical = FALSE; - break; - } - } - } - - result_id = first_id; - - return identical; -} - -//----------------------------------------------------------------------------- -// selectIsGroupOwned() -// Only operates on root nodes. -// Returns TRUE if all have valid data and they are all group owned. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectIsGroupOwned() -{ - BOOL found_one = FALSE; - for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); - iter != getSelection()->root_object_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - found_one = TRUE; - if (!node->mPermissions->isGroupOwned()) - { - return FALSE; - } - } - return found_one ? TRUE : FALSE; -} - -//----------------------------------------------------------------------------- -// selectGetPerm() -// Only operates on root nodes. -// Returns TRUE if all have valid data. -// mask_on has bits set to TRUE where all permissions are TRUE -// mask_off has bits set to TRUE where all permissions are FALSE -// if a bit is off both in mask_on and mask_off, the values differ within -// the selection. -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::selectGetPerm(U8 which_perm, U32* mask_on, U32* mask_off) -{ - U32 mask; - U32 mask_and = 0xffffffff; - U32 mask_or = 0x00000000; - BOOL all_valid = FALSE; - - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++) - { - LLSelectNode* node = *iter; - - if (!node->mValid) - { - all_valid = FALSE; - break; - } - - all_valid = TRUE; - - switch( which_perm ) - { - case PERM_BASE: - mask = node->mPermissions->getMaskBase(); - break; - case PERM_OWNER: - mask = node->mPermissions->getMaskOwner(); - break; - case PERM_GROUP: - mask = node->mPermissions->getMaskGroup(); - break; - case PERM_EVERYONE: - mask = node->mPermissions->getMaskEveryone(); - break; - case PERM_NEXT_OWNER: - mask = node->mPermissions->getMaskNextOwner(); - break; - default: - mask = 0x0; - break; - } - mask_and &= mask; - mask_or |= mask; - } - - if (all_valid) - { - // ...TRUE through all ANDs means all TRUE - *mask_on = mask_and; - - // ...FALSE through all ORs means all FALSE - *mask_off = ~mask_or; - return TRUE; - } - else - { - *mask_on = 0; - *mask_off = 0; - return FALSE; - } -} - - - -BOOL LLSelectMgr::selectGetOwnershipCost(S32* out_cost) -{ - return mSelectedObjects->getOwnershipCost(*out_cost); -} - -BOOL LLSelectMgr::selectGetPermissions(LLPermissions& result_perm) -{ - BOOL first = TRUE; - LLPermissions perm; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - perm = *(node->mPermissions); - first = FALSE; - } - else - { - perm.accumulate(*(node->mPermissions)); - } - } - - result_perm = perm; - - return TRUE; -} - - -void LLSelectMgr::selectDelete() -{ - S32 deleteable_count = 0; - - BOOL locked_but_deleteable_object = FALSE; - BOOL no_copy_but_deleteable_object = FALSE; - BOOL all_owned_by_you = TRUE; - - for (LLObjectSelection::iterator iter = getSelection()->begin(); - iter != getSelection()->end(); iter++) - { - LLViewerObject* obj = (*iter)->getObject(); - - if( obj->isAttachment() ) - { - continue; - } - - deleteable_count++; - - // Check to see if you can delete objects which are locked. - if(!obj->permMove()) - { - locked_but_deleteable_object = TRUE; - } - if(!obj->permCopy()) - { - no_copy_but_deleteable_object = TRUE; - } - if(!obj->permYouOwner()) - { - all_owned_by_you = FALSE; - } - } - - if( 0 == deleteable_count ) - { - make_ui_sound("UISndInvalidOp"); - return; - } - - LLNotification::Params params("ConfirmObjectDeleteLock"); - params.functor(boost::bind(&LLSelectMgr::confirmDelete, _1, _2, getSelection())); - - if(locked_but_deleteable_object || - no_copy_but_deleteable_object || - !all_owned_by_you) - { - // convert any transient pie-menu selections to full selection so this operation - // has some context - // NOTE: if user cancels delete operation, this will potentially leave objects selected outside of build mode - // but this is ok, if not ideal - convertTransient(); - - //This is messy, but needed to get all english our of the UI. - if(locked_but_deleteable_object && !no_copy_but_deleteable_object && all_owned_by_you) - { - //Locked only - params.name("ConfirmObjectDeleteLock"); - } - else if(!locked_but_deleteable_object && no_copy_but_deleteable_object && all_owned_by_you) - { - //No Copy only - params.name("ConfirmObjectDeleteNoCopy"); - } - else if(!locked_but_deleteable_object && !no_copy_but_deleteable_object && !all_owned_by_you) - { - //not owned only - params.name("ConfirmObjectDeleteNoOwn"); - } - else if(locked_but_deleteable_object && no_copy_but_deleteable_object && all_owned_by_you) - { - //locked and no copy - params.name("ConfirmObjectDeleteLockNoCopy"); - } - else if(locked_but_deleteable_object && !no_copy_but_deleteable_object && !all_owned_by_you) - { - //locked and not owned - params.name("ConfirmObjectDeleteLockNoOwn"); - } - else if(!locked_but_deleteable_object && no_copy_but_deleteable_object && !all_owned_by_you) - { - //no copy and not owned - params.name("ConfirmObjectDeleteNoCopyNoOwn"); - } - else - { - //locked, no copy and not owned - params.name("ConfirmObjectDeleteLockNoCopyNoOwn"); - } - - LLNotifications::instance().add(params); - } - else - { - LLNotifications::instance().forceResponse(params, 0); - } -} - -// static -bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle handle) -{ - S32 option = LLNotification::getSelectedOption(notification, response); - if (!handle->getObjectCount()) - { - llwarns << "Nothing to delete!" << llendl; - return false; - } - - switch(option) - { - case 0: - { - // TODO: Make sure you have delete permissions on all of them. - LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); - // attempt to derez into the trash. - LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id); - LLSelectMgr::getInstance()->sendListToRegions("DeRezObject", - packDeRezHeader, - packObjectLocalID, - (void*)info, - SEND_ONLY_ROOTS); - // VEFFECT: Delete Object - one effect for all deletes - if(!gSavedSettings.getBOOL("DisablePointAtAndBeam")) - { - if (LLSelectMgr::getInstance()->mSelectedObjects->mSelectType != SELECT_TYPE_HUD) - { - LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); - effectp->setPositionGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal() ); - effectp->setColor(LLColor4U(gAgent.getEffectColor())); - F32 duration = 0.5f; - duration += LLSelectMgr::getInstance()->mSelectedObjects->getObjectCount() / 64.f; - effectp->setDuration(duration); - } - } - - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); - - // Keep track of how many objects have been deleted. - F64 obj_delete_count = LLViewerStats::getInstance()->getStat(LLViewerStats::ST_OBJECT_DELETE_COUNT); - obj_delete_count += LLSelectMgr::getInstance()->mSelectedObjects->getObjectCount(); - LLViewerStats::getInstance()->setStat(LLViewerStats::ST_OBJECT_DELETE_COUNT, obj_delete_count ); - } - break; - case 1: - default: - break; - } - return false; -} - - -void LLSelectMgr::selectForceDelete() -{ - sendListToRegions( - "ObjectDelete", - packDeleteHeader, - packObjectLocalID, - (void*)TRUE, - SEND_ONLY_ROOTS); -} - -void LLSelectMgr::selectGetAggregateSaleInfo(U32 &num_for_sale, - BOOL &is_for_sale_mixed, - BOOL &is_sale_price_mixed, - S32 &total_sale_price, - S32 &individual_sale_price) -{ - num_for_sale = 0; - is_for_sale_mixed = FALSE; - is_sale_price_mixed = FALSE; - total_sale_price = 0; - individual_sale_price = 0; - - - // Empty set. - if (getSelection()->root_begin() == getSelection()->root_end()) - return; - - LLSelectNode *node = *(getSelection()->root_begin()); - const BOOL first_node_for_sale = node->mSaleInfo.isForSale(); - const S32 first_node_sale_price = node->mSaleInfo.getSalePrice(); - - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++) - { - LLSelectNode* node = *iter; - const BOOL node_for_sale = node->mSaleInfo.isForSale(); - const S32 node_sale_price = node->mSaleInfo.getSalePrice(); - - // Set mixed if the fields don't match the first node's fields. - if (node_for_sale != first_node_for_sale) - is_for_sale_mixed = TRUE; - if (node_sale_price != first_node_sale_price) - is_sale_price_mixed = TRUE; - - if (node_for_sale) - { - total_sale_price += node_sale_price; - num_for_sale ++; - } - } - - individual_sale_price = first_node_sale_price; - if (is_for_sale_mixed) - { - is_sale_price_mixed = TRUE; - individual_sale_price = 0; - } -} - -// returns TRUE if all nodes are valid. method also stores an -// accumulated sale info. -BOOL LLSelectMgr::selectGetSaleInfo(LLSaleInfo& result_sale_info) -{ - BOOL first = TRUE; - LLSaleInfo sale_info; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - sale_info = node->mSaleInfo; - first = FALSE; - } - else - { - sale_info.accumulate(node->mSaleInfo); - } - } - - result_sale_info = sale_info; - - return TRUE; -} - -BOOL LLSelectMgr::selectGetAggregatePermissions(LLAggregatePermissions& result_perm) -{ - BOOL first = TRUE; - LLAggregatePermissions perm; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - if (first) - { - perm = node->mAggregatePerm; - first = FALSE; - } - else - { - perm.aggregate(node->mAggregatePerm); - } - } - - result_perm = perm; - - return TRUE; -} - -BOOL LLSelectMgr::selectGetAggregateTexturePermissions(LLAggregatePermissions& result_perm) -{ - BOOL first = TRUE; - LLAggregatePermissions perm; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mValid) - { - return FALSE; - } - - LLAggregatePermissions t_perm = node->getObject()->permYouOwner() ? node->mAggregateTexturePermOwner : node->mAggregateTexturePerm; - if (first) - { - perm = t_perm; - first = FALSE; - } - else - { - perm.aggregate(t_perm); - } - } - - result_perm = perm; - - return TRUE; -} - - -//-------------------------------------------------------------------- -// Duplicate objects -//-------------------------------------------------------------------- - -// JC - If this doesn't work right, duplicate the selection list -// before doing anything, do a deselect, then send the duplicate -// messages. -struct LLDuplicateData -{ - LLVector3 offset; - U32 flags; -}; - -void LLSelectMgr::selectDuplicate(const LLVector3& offset, BOOL select_copy) -{ - if (mSelectedObjects->isAttachment()) - { - //RN: do not duplicate attachments - make_ui_sound("UISndInvalidOp"); - return; - } - LLDuplicateData data; - - data.offset = offset; - data.flags = (select_copy ? FLAGS_CREATE_SELECTED : 0x0); - - sendListToRegions("ObjectDuplicate", packDuplicateHeader, packDuplicate, &data, SEND_ONLY_ROOTS); - - if (select_copy) - { - // the new copy will be coming in selected - deselectAll(); - } - else - { - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - node->mDuplicated = TRUE; - node->mDuplicatePos = node->getObject()->getPositionGlobal(); - node->mDuplicateRot = node->getObject()->getRotation(); - } - } -} - -void LLSelectMgr::repeatDuplicate() -{ - if (mSelectedObjects->isAttachment()) - { - //RN: do not duplicate attachments - make_ui_sound("UISndInvalidOp"); - return; - } - - std::vector non_duplicated_objects; - - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (!node->mDuplicated) - { - non_duplicated_objects.push_back(node->getObject()); - } - } - - // make sure only previously duplicated objects are selected - for (std::vector::iterator iter = non_duplicated_objects.begin(); - iter != non_duplicated_objects.end(); ++iter) - { - LLViewerObject* objectp = *iter; - deselectObjectAndFamily(objectp); - } - - // duplicate objects in place - LLDuplicateData data; - - data.offset = LLVector3::zero; - data.flags = 0x0; - - sendListToRegions("ObjectDuplicate", packDuplicateHeader, packDuplicate, &data, SEND_ONLY_ROOTS); - - // move current selection based on delta from duplication position and update duplication position - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) - { - LLSelectNode* node = *iter; - if (node->mDuplicated) - { - LLQuaternion cur_rot = node->getObject()->getRotation(); - LLQuaternion rot_delta = (~node->mDuplicateRot * cur_rot); - LLQuaternion new_rot = cur_rot * rot_delta; - LLVector3d cur_pos = node->getObject()->getPositionGlobal(); - LLVector3d new_pos = cur_pos + ((cur_pos - node->mDuplicatePos) * rot_delta); - - node->mDuplicatePos = node->getObject()->getPositionGlobal(); - node->mDuplicateRot = node->getObject()->getRotation(); - node->getObject()->setPositionGlobal(new_pos); - node->getObject()->setRotation(new_rot); - } - } - - sendMultipleUpdate(UPD_ROTATION | UPD_POSITION); -} - -// static -void LLSelectMgr::packDuplicate( LLSelectNode* node, void *duplicate_data ) -{ - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID()); -} - - -//-------------------------------------------------------------------- -// Duplicate On Ray -//-------------------------------------------------------------------- - -// Duplicates the selected objects, but places the copy along a cast -// ray. -struct LLDuplicateOnRayData -{ - LLVector3 mRayStartRegion; - LLVector3 mRayEndRegion; - BOOL mBypassRaycast; - BOOL mRayEndIsIntersection; - LLUUID mRayTargetID; - BOOL mCopyCenters; - BOOL mCopyRotates; - U32 mFlags; -}; - -void LLSelectMgr::selectDuplicateOnRay(const LLVector3 &ray_start_region, - const LLVector3 &ray_end_region, - BOOL bypass_raycast, - BOOL ray_end_is_intersection, - const LLUUID &ray_target_id, - BOOL copy_centers, - BOOL copy_rotates, - BOOL select_copy) -{ - if (mSelectedObjects->isAttachment()) - { - // do not duplicate attachments - make_ui_sound("UISndInvalidOp"); - return; - } - - LLDuplicateOnRayData data; - - data.mRayStartRegion = ray_start_region; - data.mRayEndRegion = ray_end_region; - data.mBypassRaycast = bypass_raycast; - data.mRayEndIsIntersection = ray_end_is_intersection; - data.mRayTargetID = ray_target_id; - data.mCopyCenters = copy_centers; - data.mCopyRotates = copy_rotates; - data.mFlags = (select_copy ? FLAGS_CREATE_SELECTED : 0x0); - - sendListToRegions("ObjectDuplicateOnRay", - packDuplicateOnRayHead, packObjectLocalID, &data, SEND_ONLY_ROOTS); - - if (select_copy) - { - // the new copy will be coming in selected - deselectAll(); - } -} - -// static -void LLSelectMgr::packDuplicateOnRayHead(void *user_data) -{ - LLMessageSystem *msg = gMessageSystem; - LLDuplicateOnRayData *data = (LLDuplicateOnRayData *)user_data; - - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - msg->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID() ); - msg->addVector3Fast(_PREHASH_RayStart, data->mRayStartRegion ); - msg->addVector3Fast(_PREHASH_RayEnd, data->mRayEndRegion ); - msg->addBOOLFast(_PREHASH_BypassRaycast, data->mBypassRaycast ); - msg->addBOOLFast(_PREHASH_RayEndIsIntersection, data->mRayEndIsIntersection ); - msg->addBOOLFast(_PREHASH_CopyCenters, data->mCopyCenters ); - msg->addBOOLFast(_PREHASH_CopyRotates, data->mCopyRotates ); - msg->addUUIDFast(_PREHASH_RayTargetID, data->mRayTargetID ); - msg->addU32Fast(_PREHASH_DuplicateFlags, data->mFlags ); -} - - - -//------------------------------------------------------------------------ -// Object position, scale, rotation update, all-in-one -//------------------------------------------------------------------------ - -void LLSelectMgr::sendMultipleUpdate(U32 type) -{ - if (type == UPD_NONE) return; - // send individual updates when selecting textures or individual objects - ESendType send_type = (!gSavedSettings.getBOOL("EditLinkedParts") && !getTEMode()) ? SEND_ONLY_ROOTS : SEND_ROOTS_FIRST; - if (send_type == SEND_ONLY_ROOTS) - { - // tell simulator to apply to whole linked sets - type |= UPD_LINKED_SETS; - } - - sendListToRegions( - "MultipleObjectUpdate", - packAgentAndSessionID, - packMultipleUpdate, - &type, - send_type); -} - -// static -void LLSelectMgr::packMultipleUpdate(LLSelectNode* node, void *user_data) -{ - LLViewerObject* object = node->getObject(); - U32 *type32 = (U32 *)user_data; - U8 type = (U8)*type32; - U8 data[256]; - - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); - gMessageSystem->addU8Fast(_PREHASH_Type, type ); - - S32 offset = 0; - - // JC: You MUST pack the data in this order. The receiving - // routine process_multiple_update_message on simulator will - // extract them in this order. - - if (type & UPD_POSITION) - { - htonmemcpy(&data[offset], &(object->getPosition().mV), MVT_LLVector3, 12); - offset += 12; - } - if (type & UPD_ROTATION) - { - LLQuaternion quat = object->getRotation(); - LLVector3 vec = quat.packToVector3(); - htonmemcpy(&data[offset], &(vec.mV), MVT_LLQuaternion, 12); - offset += 12; - } - if (type & UPD_SCALE) - { - //llinfos << "Sending object scale " << object->getScale() << llendl; - htonmemcpy(&data[offset], &(object->getScale().mV), MVT_LLVector3, 12); - offset += 12; - } - gMessageSystem->addBinaryDataFast(_PREHASH_Data, data, offset); -} - -//------------------------------------------------------------------------ -// Ownership -//------------------------------------------------------------------------ -struct LLOwnerData -{ - LLUUID owner_id; - LLUUID group_id; - BOOL override; -}; - -void LLSelectMgr::sendOwner(const LLUUID& owner_id, - const LLUUID& group_id, - BOOL override) -{ - LLOwnerData data; - - data.owner_id = owner_id; - data.group_id = group_id; - data.override = override; - - sendListToRegions("ObjectOwner", packOwnerHead, packObjectLocalID, &data, SEND_ONLY_ROOTS); -} - -// static -void LLSelectMgr::packOwnerHead(void *user_data) -{ - LLOwnerData *data = (LLOwnerData *)user_data; - - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - gMessageSystem->nextBlockFast(_PREHASH_HeaderData); - gMessageSystem->addBOOLFast(_PREHASH_Override, data->override); - gMessageSystem->addUUIDFast(_PREHASH_OwnerID, data->owner_id); - gMessageSystem->addUUIDFast(_PREHASH_GroupID, data->group_id); -} - -//------------------------------------------------------------------------ -// Group -//------------------------------------------------------------------------ - -void LLSelectMgr::sendGroup(const LLUUID& group_id) -{ - LLUUID local_group_id(group_id); - sendListToRegions("ObjectGroup", packAgentAndSessionAndGroupID, packObjectLocalID, &local_group_id, SEND_ONLY_ROOTS); -} - - -//------------------------------------------------------------------------ -// Buy -//------------------------------------------------------------------------ - -struct LLBuyData -{ - std::vector mObjectsSent; - LLUUID mCategoryID; - LLSaleInfo mSaleInfo; -}; - -// *NOTE: does not work for multiple object buy, which UI does not -// currently support sale info is used for verification only, if it -// doesn't match region info then sale is canceled Need to get sale -// info -as displayed in the UI- for every item. -void LLSelectMgr::sendBuy(const LLUUID& buyer_id, const LLUUID& category_id, const LLSaleInfo sale_info) -{ - LLBuyData buy; - buy.mCategoryID = category_id; - buy.mSaleInfo = sale_info; - sendListToRegions("ObjectBuy", packAgentGroupAndCatID, packBuyObjectIDs, &buy, SEND_ONLY_ROOTS); -} - -// static -void LLSelectMgr::packBuyObjectIDs(LLSelectNode* node, void* data) -{ - LLBuyData* buy = (LLBuyData*)data; - - LLViewerObject* object = node->getObject(); - if (std::find(buy->mObjectsSent.begin(), buy->mObjectsSent.end(), object) == buy->mObjectsSent.end()) - { - buy->mObjectsSent.push_back(object); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); - gMessageSystem->addU8Fast(_PREHASH_SaleType, buy->mSaleInfo.getSaleType()); - gMessageSystem->addS32Fast(_PREHASH_SalePrice, buy->mSaleInfo.getSalePrice()); - } -} - -//------------------------------------------------------------------------ -// Permissions -//------------------------------------------------------------------------ - -struct LLPermData -{ - U8 mField; - BOOL mSet; - U32 mMask; - BOOL mOverride; -}; - -// TODO: Make this able to fail elegantly. -void LLSelectMgr::selectionSetObjectPermissions(U8 field, - BOOL set, - U32 mask, - BOOL override) -{ - LLPermData data; - - data.mField = field; - data.mSet = set; - data.mMask = mask; - data.mOverride = override; - - sendListToRegions("ObjectPermissions", packPermissionsHead, packPermissions, &data, SEND_ONLY_ROOTS); -} - -void LLSelectMgr::packPermissionsHead(void* user_data) -{ - LLPermData* data = (LLPermData*)user_data; - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->nextBlockFast(_PREHASH_HeaderData); - gMessageSystem->addBOOLFast(_PREHASH_Override, data->mOverride); -} - - -// Now that you've added a bunch of objects, send a select message -// on the entire list for efficiency. -/* -void LLSelectMgr::sendSelect() -{ - llerrs << "Not implemented" << llendl; -} -*/ - -void LLSelectMgr::deselectAll() -{ - if (!mSelectedObjects->getNumNodes()) - { - return; - } - - // Zap the angular velocity, as the sim will set it to zero - for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); - iter != mSelectedObjects->end(); iter++ ) - { - LLViewerObject *objectp = (*iter)->getObject(); - objectp->setAngularVelocity( 0,0,0 ); - objectp->setVelocity( 0,0,0 ); - } - - sendListToRegions( - "ObjectDeselect", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_INDIVIDUALS); - - removeAll(); - - mLastSentSelectionCenterGlobal.clearVec(); - - updatePointAt(); -} - -void LLSelectMgr::deselectAllForStandingUp() -{ - /* - This function is similar deselectAll() except for the first if statement - which was removed. This is needed as a workaround for DEV-2854 - */ - - // Zap the angular velocity, as the sim will set it to zero - for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); - iter != mSelectedObjects->end(); iter++ ) - { - LLViewerObject *objectp = (*iter)->getObject(); - objectp->setAngularVelocity( 0,0,0 ); - objectp->setVelocity( 0,0,0 ); - } - - sendListToRegions( - "ObjectDeselect", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_INDIVIDUALS); - - removeAll(); - - mLastSentSelectionCenterGlobal.clearVec(); - - updatePointAt(); -} - -void LLSelectMgr::deselectUnused() -{ - // no more outstanding references to this selection - if (mSelectedObjects->getNumRefs() == 1) - { - deselectAll(); - } -} - - -void LLSelectMgr::convertTransient() -{ - LLObjectSelection::iterator node_it; - for (node_it = mSelectedObjects->begin(); node_it != mSelectedObjects->end(); ++node_it) - { - LLSelectNode *nodep = *node_it; - nodep->setTransient(FALSE); - } -} - - -void LLSelectMgr::deselectAllIfTooFar() -{ - if (mSelectedObjects->isEmpty() || mSelectedObjects->mSelectType == SELECT_TYPE_HUD) - { - return; - } - -// [RLVa:KB] - Checked: 2010-01-02 (RLVa-1.1.0l) | Modified: RLVa-1.1.0l -#ifdef RLV_EXTENSION_CMD_INTERACT - // [Fall-back code] Don't allow an active selection (except for HUD attachments - see above) when @interact=n restricted - if (gRlvHandler.hasBehaviour(RLV_BHVR_INTERACT)) - { - deselectAll(); - return; - } -#endif // RLV_EXTENSION_CMD_INTERACT -// [/RLVa:KB] - - // HACK: Don't deselect when we're navigating to rate an object's - // owner or creator. JC - if (gPieObject->getVisible() || gPieRate->getVisible() ) - { - return; - } - - LLVector3d selectionCenter = getSelectionCenterGlobal(); - -// if (gSavedSettings.getBOOL("LimitSelectDistance") -// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f - BOOL fRlvFartouch = gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH) && gFloaterTools->getVisible(); - if ( (gSavedSettings.getBOOL("LimitSelectDistance") || (fRlvFartouch) ) -// [/RLVa:KB] - && (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar()) - && !mSelectedObjects->isAttachment() - && !selectionCenter.isExactlyZero()) - { -// F32 deselect_dist = gSavedSettings.getF32("MaxSelectDistance"); -// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f - F32 deselect_dist = (!fRlvFartouch) ? gSavedSettings.getF32("MaxSelectDistance") : 1.5f; -// [/RLVa:KB] - F32 deselect_dist_sq = deselect_dist * deselect_dist; - - LLVector3d select_delta = gAgent.getPositionGlobal() - selectionCenter; - F32 select_dist_sq = (F32) select_delta.magVecSquared(); - - if (select_dist_sq > deselect_dist_sq) - { - if (gDebugSelectMgr) - { - llinfos << "Selection manager: auto-deselecting, select_dist = " << fsqrtf(select_dist_sq) << llendl; - llinfos << "agent pos global = " << gAgent.getPositionGlobal() << llendl; - llinfos << "selection pos global = " << selectionCenter << llendl; - } - - deselectAll(); - } - } -} - -void LLSelectMgr::selectionSetObjectName(const std::string& name) -{ - // we only work correctly if 1 object is selected. - if(mSelectedObjects->getRootObjectCount() == 1) - { - sendListToRegions("ObjectName", - packAgentAndSessionID, - packObjectName, - (void*)(new std::string(name)), - SEND_ONLY_ROOTS); - } - else if(mSelectedObjects->getObjectCount() == 1) - { - sendListToRegions("ObjectName", - packAgentAndSessionID, - packObjectName, - (void*)(new std::string(name)), - SEND_INDIVIDUALS); - } -} - -void LLSelectMgr::selectionSetObjectDescription(const std::string& desc) -{ - // we only work correctly if 1 object is selected. - if(mSelectedObjects->getRootObjectCount() == 1) - { - sendListToRegions("ObjectDescription", - packAgentAndSessionID, - packObjectDescription, - (void*)(new std::string(desc)), - SEND_ONLY_ROOTS); - } - else if(mSelectedObjects->getObjectCount() == 1) - { - sendListToRegions("ObjectDescription", - packAgentAndSessionID, - packObjectDescription, - (void*)(new std::string(desc)), - SEND_INDIVIDUALS); - } -} - -void LLSelectMgr::selectionSetObjectCategory(const LLCategory& category) -{ - // for now, we only want to be able to set one root category at - // a time. - if(mSelectedObjects->getRootObjectCount() != 1) return; - sendListToRegions("ObjectCategory", - packAgentAndSessionID, - packObjectCategory, - (void*)(&category), - SEND_ONLY_ROOTS); -} - -void LLSelectMgr::selectionSetObjectSaleInfo(const LLSaleInfo& sale_info) -{ - sendListToRegions("ObjectSaleInfo", - packAgentAndSessionID, - packObjectSaleInfo, - (void*)(&sale_info), - SEND_ONLY_ROOTS); -} - -//---------------------------------------------------------------------- -// Attachments -//---------------------------------------------------------------------- - -void LLSelectMgr::sendAttach(U8 attachment_point) -{ - LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject(); - - if (!attach_object || !isAgentAvatarValid() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD) - { - return; - } - - BOOL build_mode = LLToolMgr::getInstance()->inEdit(); - // Special case: Attach to default location for this object. - if (0 == attachment_point || - get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) - { - if (attachment_point != 0 && gHippoGridManager->getConnectedGrid()->supportsInvLinks()) - { - // If we know the attachment point then we got here by clicking an - // "Attach to..." context menu item, so we should add, not replace. - attachment_point |= ATTACHMENT_ADD; - } - - sendListToRegions( - "ObjectAttach", - packAgentIDAndSessionAndAttachment, - packObjectIDAndRotation, - &attachment_point, - SEND_ONLY_ROOTS ); - if (!build_mode) - { - deselectAll(); - } - } -} - -void LLSelectMgr::sendDetach() -{ - if (!mSelectedObjects->getNumNodes() || mSelectedObjects->mSelectType == SELECT_TYPE_WORLD) - { - return; - } - - sendListToRegions( - "ObjectDetach", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_ONLY_ROOTS ); -} - - -void LLSelectMgr::sendDropAttachment() -{ - if (!mSelectedObjects->getNumNodes() || mSelectedObjects->mSelectType == SELECT_TYPE_WORLD) - { - return; - } - - sendListToRegions( - "ObjectDrop", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_ONLY_ROOTS); -} - -//---------------------------------------------------------------------- -// Links -//---------------------------------------------------------------------- - -void LLSelectMgr::sendLink() -{ - if (!mSelectedObjects->getNumNodes()) - { - return; - } - - sendListToRegions( - "ObjectLink", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_ONLY_ROOTS); -} - -void LLSelectMgr::sendDelink() -{ - if (!mSelectedObjects->getNumNodes()) - { - return; - } - - // Delink needs to send individuals so you can unlink a single object from - // a linked set. - sendListToRegions( - "ObjectDelink", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_INDIVIDUALS); -} - - -//---------------------------------------------------------------------- -// Hinges -//---------------------------------------------------------------------- - -/* -void LLSelectMgr::sendHinge(U8 type) -{ - if (!mSelectedObjects->getNumNodes()) - { - return; - } - - sendListToRegions( - "ObjectHinge", - packHingeHead, - packObjectLocalID, - &type, - SEND_ONLY_ROOTS); -} - - -void LLSelectMgr::sendDehinge() -{ - if (!mSelectedObjects->getNumNodes()) - { - return; - } - - sendListToRegions( - "ObjectDehinge", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_ONLY_ROOTS); -}*/ - -void LLSelectMgr::sendSelect() -{ - if (!mSelectedObjects->getNumNodes()) - { - return; - } - - sendListToRegions( - "ObjectSelect", - packAgentAndSessionID, - packObjectLocalID, - NULL, - SEND_INDIVIDUALS); -} - -// static -void LLSelectMgr::packHingeHead(void *user_data) -{ - U8 *type = (U8 *)user_data; - - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - gMessageSystem->nextBlockFast(_PREHASH_JointType); - gMessageSystem->addU8Fast(_PREHASH_Type, *type ); -} - - -void LLSelectMgr::selectionDump() -{ - struct f : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - object->dump(); - return true; - } - } func; - getSelection()->applyToObjects(&func); -} - -void LLSelectMgr::saveSelectedObjectColors() -{ - struct f : public LLSelectedNodeFunctor - { - virtual bool apply(LLSelectNode* node) - { - node->saveColors(); - return true; - } - } func; - getSelection()->applyToNodes(&func); -} - -void LLSelectMgr::saveSelectedObjectTextures() -{ - // invalidate current selection so we update saved textures - struct f : public LLSelectedNodeFunctor - { - virtual bool apply(LLSelectNode* node) - { - node->mValid = FALSE; - return true; - } - } func; - getSelection()->applyToNodes(&func); - - // request object properties message to get updated permissions data - sendSelect(); -} - - -// This routine should be called whenever a drag is initiated. -// also need to know to which simulator to send update message -void LLSelectMgr::saveSelectedObjectTransform(EActionType action_type) -{ - if (mSelectedObjects->isEmpty()) - { - // nothing selected, so nothing to save - return; - } - - struct f : public LLSelectedNodeFunctor - { - EActionType mActionType; - f(EActionType a) : mActionType(a) {} - virtual bool apply(LLSelectNode* selectNode) - { - LLViewerObject* object = selectNode->getObject(); - if (!object) - { - return true; // skip - } - selectNode->mSavedPositionLocal = object->getPosition(); - if (object->isAttachment()) - { - if (object->isRootEdit()) - { - LLXform* parent_xform = object->mDrawable->getXform()->getParent(); - if (parent_xform) - { - selectNode->mSavedPositionGlobal = gAgent.getPosGlobalFromAgent((object->getPosition() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition()); - } - else - { - selectNode->mSavedPositionGlobal = object->getPositionGlobal(); - } - } - else - { - LLViewerObject* attachment_root = (LLViewerObject*)object->getParent(); - LLXform* parent_xform = attachment_root ? attachment_root->mDrawable->getXform()->getParent() : NULL; - if (parent_xform) - { - LLVector3 root_pos = (attachment_root->getPosition() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition(); - LLQuaternion root_rot = (attachment_root->getRotation() * parent_xform->getWorldRotation()); - selectNode->mSavedPositionGlobal = gAgent.getPosGlobalFromAgent((object->getPosition() * root_rot) + root_pos); - } - else - { - selectNode->mSavedPositionGlobal = object->getPositionGlobal(); - } - } - selectNode->mSavedRotation = object->getRenderRotation(); - } - else - { - selectNode->mSavedPositionGlobal = object->getPositionGlobal(); - selectNode->mSavedRotation = object->getRotationRegion(); - } - - selectNode->mSavedScale = object->getScale(); - selectNode->saveTextureScaleRatios(); - return true; - } - } func(action_type); - getSelection()->applyToNodes(&func); - - mSavedSelectionBBox = getBBoxOfSelection(); -} - -struct LLSelectMgrApplyFlags : public LLSelectedObjectFunctor -{ - LLSelectMgrApplyFlags(U32 flags, BOOL state) : mFlags(flags), mState(state) {} - U32 mFlags; - BOOL mState; - virtual bool apply(LLViewerObject* object) - { - if ( object->permModify() && // preemptive permissions check - object->isRoot() && // don't send for child objects - !object->isJointChild()) - { - object->setFlags( mFlags, mState); - } - return true; - } -}; - -void LLSelectMgr::selectionUpdatePhysics(BOOL physics) -{ - LLSelectMgrApplyFlags func( FLAGS_USE_PHYSICS, physics); - getSelection()->applyToObjects(&func); -} - -void LLSelectMgr::selectionUpdateTemporary(BOOL is_temporary) -{ - LLSelectMgrApplyFlags func( FLAGS_TEMPORARY_ON_REZ, is_temporary); - getSelection()->applyToObjects(&func); -} - -void LLSelectMgr::selectionUpdatePhantom(BOOL is_phantom) -{ - LLSelectMgrApplyFlags func( FLAGS_PHANTOM, is_phantom); - getSelection()->applyToObjects(&func); -} - -void LLSelectMgr::selectionUpdateCastShadows(BOOL cast_shadows) -{ - LLSelectMgrApplyFlags func( FLAGS_CAST_SHADOWS, cast_shadows); - getSelection()->applyToObjects(&func); -} - - -//---------------------------------------------------------------------- -// Helpful packing functions for sendObjectMessage() -//---------------------------------------------------------------------- - -// static -void LLSelectMgr::packAgentIDAndSessionAndAttachment( void *user_data) -{ - U8 *attachment_point = (U8*)user_data; - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->addU8Fast(_PREHASH_AttachmentPoint, *attachment_point); -} - -// static -void LLSelectMgr::packAgentID( void *user_data) -{ - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); -} - -// static -void LLSelectMgr::packAgentAndSessionID(void* user_data) -{ - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -} - -// static -void LLSelectMgr::packAgentAndGroupID(void* user_data) -{ - LLOwnerData *data = (LLOwnerData *)user_data; - - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, data->owner_id ); - gMessageSystem->addUUIDFast(_PREHASH_GroupID, data->group_id ); -} - -// static -void LLSelectMgr::packAgentAndSessionAndGroupID(void* user_data) -{ - LLUUID* group_idp = (LLUUID*) user_data; - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->addUUIDFast(_PREHASH_GroupID, *group_idp); -} - -// static -void LLSelectMgr::packDuplicateHeader(void* data) -{ - LLUUID group_id(gAgent.getGroupID()); - packAgentAndSessionAndGroupID(&group_id); - - LLDuplicateData* dup_data = (LLDuplicateData*) data; - - gMessageSystem->nextBlockFast(_PREHASH_SharedData); - gMessageSystem->addVector3Fast(_PREHASH_Offset, dup_data->offset); - gMessageSystem->addU32Fast(_PREHASH_DuplicateFlags, dup_data->flags); -} - -// static -void LLSelectMgr::packDeleteHeader(void* userdata) -{ - BOOL force = (BOOL)(intptr_t)userdata; - - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->addBOOLFast(_PREHASH_Force, force); -} - -// static -void LLSelectMgr::packAgentGroupAndCatID(void* user_data) -{ - LLBuyData* buy = (LLBuyData*)user_data; - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID()); - gMessageSystem->addUUIDFast(_PREHASH_CategoryID, buy->mCategoryID); -} - -//static -void LLSelectMgr::packDeRezHeader(void* user_data) -{ - LLDeRezInfo* info = (LLDeRezInfo*)user_data; - gMessageSystem->nextBlockFast(_PREHASH_AgentData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gMessageSystem->nextBlockFast(_PREHASH_AgentBlock); - gMessageSystem->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID()); - gMessageSystem->addU8Fast(_PREHASH_Destination, (U8)info->mDestination); - gMessageSystem->addUUIDFast(_PREHASH_DestinationID, info->mDestinationID); - LLUUID tid; - tid.generate(); - gMessageSystem->addUUIDFast(_PREHASH_TransactionID, tid); - const U8 PACKET = 1; - gMessageSystem->addU8Fast(_PREHASH_PacketCount, PACKET); - gMessageSystem->addU8Fast(_PREHASH_PacketNumber, PACKET); -} - -// static -void LLSelectMgr::packObjectID(LLSelectNode* node, void *user_data) -{ - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addUUIDFast(_PREHASH_ObjectID, node->getObject()->mID ); -} - -void LLSelectMgr::packObjectIDAndRotation(LLSelectNode* node, void *user_data) -{ - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); - gMessageSystem->addQuatFast(_PREHASH_Rotation, node->getObject()->getRotation()); -} - -void LLSelectMgr::packObjectClickAction(LLSelectNode* node, void *user_data) -{ - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); - gMessageSystem->addU8("ClickAction", node->getObject()->getClickAction()); -} - -void LLSelectMgr::packObjectIncludeInSearch(LLSelectNode* node, void *user_data) -{ - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); - gMessageSystem->addBOOL("IncludeInSearch", node->getObject()->getIncludeInSearch()); -} - -// static -void LLSelectMgr::packObjectLocalID(LLSelectNode* node, void *) -{ - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID()); -} - -// static -void LLSelectMgr::packObjectName(LLSelectNode* node, void* user_data) -{ - const std::string* name = (const std::string*)user_data; - if(!name->empty()) - { - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); - gMessageSystem->addStringFast(_PREHASH_Name, *name); - } - delete name; -} - -// static -void LLSelectMgr::packObjectDescription(LLSelectNode* node, void* user_data) -{ - const std::string* desc = (const std::string*)user_data; - if(!desc->empty()) - { - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); - gMessageSystem->addStringFast(_PREHASH_Description, *desc); - } -} - -// static -void LLSelectMgr::packObjectCategory(LLSelectNode* node, void* user_data) -{ - LLCategory* category = (LLCategory*)user_data; - if(!category) return; - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); - category->packMessage(gMessageSystem); -} - -// static -void LLSelectMgr::packObjectSaleInfo(LLSelectNode* node, void* user_data) -{ - LLSaleInfo* sale_info = (LLSaleInfo*)user_data; - if(!sale_info) return; - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); - sale_info->packMessage(gMessageSystem); -} - -// static -void LLSelectMgr::packPhysics(LLSelectNode* node, void *user_data) -{ -} - -// static -void LLSelectMgr::packShape(LLSelectNode* node, void *user_data) -{ -} - -// static -void LLSelectMgr::packPermissions(LLSelectNode* node, void *user_data) -{ - LLPermData *data = (LLPermData *)user_data; - - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID()); - - gMessageSystem->addU8Fast(_PREHASH_Field, data->mField); - gMessageSystem->addBOOLFast(_PREHASH_Set, data->mSet); - gMessageSystem->addU32Fast(_PREHASH_Mask, data->mMask); -} - -// Utility function to send some information to every region containing -// an object on the selection list. We want to do this to reduce the total -// number of packets sent by the viewer. -void LLSelectMgr::sendListToRegions(const std::string& message_name, - void (*pack_header)(void *user_data), - void (*pack_body)(LLSelectNode* node, void *user_data), - void *user_data, - ESendType send_type) -{ - LLSelectNode* node; - LLViewerRegion* last_region; - LLViewerRegion* current_region; - - S32 objects_sent = 0; - S32 packets_sent = 0; - S32 objects_in_this_packet = 0; - - //clear update override data (allow next update through) - struct f : public LLSelectedNodeFunctor - { - virtual bool apply(LLSelectNode* node) - { - node->mLastPositionLocal.setVec(0,0,0); - node->mLastRotation = LLQuaternion(); - node->mLastScale.setVec(0,0,0); - return true; - } - } func; - getSelection()->applyToNodes(&func); - - std::queue nodes_to_send; - - struct push_all : public LLSelectedNodeFunctor - { - std::queue& nodes_to_send; - push_all(std::queue& n) : nodes_to_send(n) {} - virtual bool apply(LLSelectNode* node) - { - if (node->getObject()) - { - nodes_to_send.push(node); - } - return true; - } - }; - struct push_some : public LLSelectedNodeFunctor - { - std::queue& nodes_to_send; - bool mRoots; - push_some(std::queue& n, bool roots) : nodes_to_send(n), mRoots(roots) {} - virtual bool apply(LLSelectNode* node) - { - if (node->getObject()) - { - BOOL is_root = node->getObject()->isRootEdit(); - if ((mRoots && is_root) || (!mRoots && !is_root)) - { - nodes_to_send.push(node); - } - } - return true; - } - }; - struct push_all pushall(nodes_to_send); - struct push_some pushroots(nodes_to_send, TRUE); - struct push_some pushnonroots(nodes_to_send, FALSE); - - switch(send_type) - { - case SEND_ONLY_ROOTS: - if(message_name == "ObjectBuy") - getSelection()->applyToRootNodes(&pushroots); - else - getSelection()->applyToRootNodes(&pushall); - - break; - case SEND_INDIVIDUALS: - getSelection()->applyToNodes(&pushall); - break; - case SEND_ROOTS_FIRST: - // first roots... - getSelection()->applyToNodes(&pushroots); - // then children... - getSelection()->applyToNodes(&pushnonroots); - break; - case SEND_CHILDREN_FIRST: - // first children... - getSelection()->applyToNodes(&pushnonroots); - // then roots... - getSelection()->applyToNodes(&pushroots); - break; - - default: - llerrs << "Bad send type " << send_type << " passed to SendListToRegions()" << llendl; - } - - // bail if nothing selected - if (nodes_to_send.empty()) - { - return; - } - - node = nodes_to_send.front(); - nodes_to_send.pop(); - - // cache last region information - current_region = node->getObject()->getRegion(); - - // Start duplicate message - // CRO: this isn't - gMessageSystem->newMessage(message_name.c_str()); - (*pack_header)(user_data); - - // For each object - while (node != NULL) - { - // remember the last region, look up the current one - last_region = current_region; - current_region = node->getObject()->getRegion(); - - // if to same simulator and message not too big - if ((current_region == last_region) - && (! gMessageSystem->isSendFull(NULL)) - && (objects_in_this_packet < MAX_OBJECTS_PER_PACKET)) - { - // add another instance of the body of the data - (*pack_body)(node, user_data); - ++objects_sent; - ++objects_in_this_packet; - - // and on to the next object - if(nodes_to_send.empty()) - { - node = NULL; - } - else - { - node = nodes_to_send.front(); - nodes_to_send.pop(); - } - } - else - { - // otherwise send current message and start new one - gMessageSystem->sendReliable( last_region->getHost()); - packets_sent++; - objects_in_this_packet = 0; - - gMessageSystem->newMessage(message_name.c_str()); - (*pack_header)(user_data); - - // don't move to the next object, we still need to add the - // body data. - } - } - - // flush messages - if (gMessageSystem->getCurrentSendTotal() > 0) - { - gMessageSystem->sendReliable( current_region->getHost()); - packets_sent++; - } - else - { - gMessageSystem->clearMessage(); - } - - // llinfos << "sendListToRegions " << message_name << " obj " << objects_sent << " pkt " << packets_sent << llendl; -} - - -// -// Network communications -// - -void LLSelectMgr::requestObjectPropertiesFamily(LLViewerObject* object) -{ - // Remember that we asked the properties of this object. - sObjectPropertiesFamilyRequests.insert(object->mID); - //llinfos << "Registered an ObjectPropertiesFamily request for object " << object->mID << llendl; - - LLMessageSystem* msg = gMessageSystem; - - msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_ObjectData); - msg->addU32Fast(_PREHASH_RequestFlags, 0x0 ); - msg->addUUIDFast(_PREHASH_ObjectID, object->mID ); - - LLViewerRegion* regionp = object->getRegion(); - msg->sendReliable( regionp->getHost() ); -} - - -// static -void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data) -{ - S32 i; - S32 count = msg->getNumberOfBlocksFast(_PREHASH_ObjectData); - for (i = 0; i < count; i++) - { - LLUUID id; - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, id, i); - - LLUUID creator_id; - LLUUID owner_id; - LLUUID group_id; - LLUUID last_owner_id; - U64 creation_date; - LLUUID extra_id; - U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask; - LLSaleInfo sale_info; - LLCategory category; - LLAggregatePermissions ag_perms; - LLAggregatePermissions ag_texture_perms; - LLAggregatePermissions ag_texture_perms_owner; - - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_CreatorID, creator_id, i); - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id, i); - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id, i); - msg->getU64Fast(_PREHASH_ObjectData, _PREHASH_CreationDate, creation_date, i); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask, i); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask, i); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_GroupMask, group_mask, i); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_EveryoneMask, everyone_mask, i); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_NextOwnerMask, next_owner_mask, i); - sale_info.unpackMultiMessage(msg, _PREHASH_ObjectData, i); - - ag_perms.unpackMessage(msg, _PREHASH_ObjectData, _PREHASH_AggregatePerms, i); - ag_texture_perms.unpackMessage(msg, _PREHASH_ObjectData, _PREHASH_AggregatePermTextures, i); - ag_texture_perms_owner.unpackMessage(msg, _PREHASH_ObjectData, _PREHASH_AggregatePermTexturesOwner, i); - category.unpackMultiMessage(msg, _PREHASH_ObjectData, i); - - S16 inv_serial = 0; - msg->getS16Fast(_PREHASH_ObjectData, _PREHASH_InventorySerial, inv_serial, i); - - LLUUID item_id; - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ItemID, item_id, i); - LLUUID folder_id; - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FolderID, folder_id, i); - LLUUID from_task_id; - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FromTaskID, from_task_id, i); - - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_LastOwnerID, last_owner_id, i); - - std::string name; - msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, name, i); - std::string desc; - msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc, i); - - std::string touch_name; - msg->getStringFast(_PREHASH_ObjectData, _PREHASH_TouchName, touch_name, i); - std::string sit_name; - msg->getStringFast(_PREHASH_ObjectData, _PREHASH_SitName, sit_name, i); - - //unpack TE IDs - std::vector texture_ids; - S32 size = msg->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_TextureID); - if (size > 0) - { - S8 packed_buffer[SELECT_MAX_TES * UUID_BYTES]; - msg->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureID, packed_buffer, 0, i, SELECT_MAX_TES * UUID_BYTES); - - for (S32 buf_offset = 0; buf_offset < size; buf_offset += UUID_BYTES) - { - LLUUID tid; - memcpy(tid.mData, packed_buffer + buf_offset, UUID_BYTES); /* Flawfinder: ignore */ - texture_ids.push_back(tid); - } - } - - // Iterate through nodes at end, since it can be on both the regular AND hover list - struct f : public LLSelectedNodeFunctor - { - LLUUID mID; - f(const LLUUID& id) : mID(id) {} - virtual bool apply(LLSelectNode* node) - { - return (node->getObject() && node->getObject()->mID == mID); - } - } func(id); - LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode(&func); - - if (node) - { - if (node->mInventorySerial != inv_serial) - { - node->getObject()->dirtyInventory(); - } - - // save texture data as soon as we get texture perms first time - if (!node->mValid) - { - BOOL can_copy = FALSE; - BOOL can_transfer = FALSE; - - LLAggregatePermissions::EValue value = LLAggregatePermissions::AP_NONE; - if(node->getObject()->permYouOwner()) - { - value = ag_texture_perms_owner.getValue(PERM_COPY); - if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) - { - can_copy = TRUE; - } - value = ag_texture_perms_owner.getValue(PERM_TRANSFER); - if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) - { - can_transfer = TRUE; - } - } - else - { - value = ag_texture_perms.getValue(PERM_COPY); - if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) - { - can_copy = TRUE; - } - value = ag_texture_perms.getValue(PERM_TRANSFER); - if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) - { - can_transfer = TRUE; - } - } - - if (can_copy && can_transfer) - { - // this should be the only place that saved textures is called - node->saveTextures(texture_ids); - } - } - - node->mValid = TRUE; - node->mPermissions->init(creator_id, owner_id, - last_owner_id, group_id); - node->mPermissions->initMasks(base_mask, owner_mask, everyone_mask, group_mask, next_owner_mask); - node->mCreationDate = creation_date; - node->mItemID = item_id; - node->mFolderID = folder_id; - node->mFromTaskID = from_task_id; - node->mName.assign(name); - node->mDescription.assign(desc); - node->mSaleInfo = sale_info; - node->mAggregatePerm = ag_perms; - node->mAggregateTexturePerm = ag_texture_perms; - node->mAggregateTexturePermOwner = ag_texture_perms_owner; - node->mCategory = category; - node->mInventorySerial = inv_serial; - node->mSitName.assign(sit_name); - node->mTouchName.assign(touch_name); - } - } - - dialog_refresh_all(); - - // silly hack to allow 'save into inventory' - if(gPopupMenuView->getVisible()) - { - gPopupMenuView->setItemEnabled(SAVE_INTO_INVENTORY, - enable_save_into_inventory(NULL)); - } - - // hack for left-click buy object - LLToolPie::selectionPropertiesReceived(); -} - -// static -void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data) -{ - U32 request_flags; - LLUUID id; - LLUUID creator_id; - LLUUID owner_id; - LLUUID group_id; - LLUUID extra_id; - U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask; - LLSaleInfo sale_info; - LLCategory category; - - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_RequestFlags, request_flags ); - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, id ); - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id ); - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id ); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask ); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask ); - msg->getU32Fast(_PREHASH_ObjectData,_PREHASH_GroupMask, group_mask ); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_EveryoneMask, everyone_mask ); - msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_NextOwnerMask, next_owner_mask); - sale_info.unpackMessage(msg, _PREHASH_ObjectData); - category.unpackMessage(msg, _PREHASH_ObjectData); - - LLUUID last_owner_id; - msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_LastOwnerID, last_owner_id ); - - // unpack name & desc - std::string name; - msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, name); - - std::string desc; - msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc); - - //llinfos << "Got ObjectPropertiesFamily reply for object " << id << llendl; - if(sObjectPropertiesFamilyRequests.count(id) != 0 ) - { - // Send to export floaters - //LLFloaterExport::receiveObjectProperties(id, name, desc); - // We got the reply, so remove the object from the list of pending requests - sObjectPropertiesFamilyRequests.erase(id); - } - - // the reporter widget askes the server for info about picked objects - if (request_flags & (COMPLAINT_REPORT_REQUEST | BUG_REPORT_REQUEST)) - { - EReportType report_type = (COMPLAINT_REPORT_REQUEST & request_flags) ? COMPLAINT_REPORT : BUG_REPORT; - LLFloaterReporter *reporterp = LLFloaterReporter::getReporter(report_type); - if (reporterp) - { - std::string fullname; - gCacheName->getFullName(owner_id, fullname); - reporterp->setPickedObjectProperties(name, fullname, owner_id); - } - } - else if (request_flags & OBJECT_PAY_REQUEST) - { - // check if the owner of the paid object is muted - LLMuteList::getInstance()->autoRemove(owner_id, LLMuteList::AR_MONEY); - } - - // Now look through all of the hovered nodes - struct f : public LLSelectedNodeFunctor - { - LLUUID mID; - f(const LLUUID& id) : mID(id) {} - virtual bool apply(LLSelectNode* node) - { - return (node->getObject() && node->getObject()->mID == mID); - } - } func(id); - LLSelectNode* node = LLSelectMgr::getInstance()->getHoverObjects()->getFirstNode(&func); - - if (node) - { - node->mValid = TRUE; - node->mPermissions->init(LLUUID::null, owner_id, - last_owner_id, group_id); - node->mPermissions->initMasks(base_mask, owner_mask, everyone_mask, group_mask, next_owner_mask); - node->mSaleInfo = sale_info; - node->mCategory = category; - node->mName.assign(name); - node->mDescription.assign(desc); - } - - dialog_refresh_all(); -} - - -// static -void LLSelectMgr::processForceObjectSelect(LLMessageSystem* msg, void**) -{ - BOOL reset_list; - msg->getBOOL("Header", "ResetList", reset_list); - - if (reset_list) - { - LLSelectMgr::getInstance()->deselectAll(); - } - - LLUUID full_id; - S32 local_id; - LLViewerObject* object; - std::vector objects; - S32 i; - S32 block_count = msg->getNumberOfBlocks("Data"); - - for (i = 0; i < block_count; i++) - { - msg->getS32("Data", "LocalID", local_id, i); - - gObjectList.getUUIDFromLocal(full_id, - local_id, - msg->getSenderIP(), - msg->getSenderPort()); - object = gObjectList.findObject(full_id); - if (object) - { - objects.push_back(object); - } - } - - // Don't select, just highlight - LLSelectMgr::getInstance()->highlightObjectAndFamily(objects); -} - - -extern LLGLdouble gGLModelView[16]; - -void LLSelectMgr::updateSilhouettes() -{ - S32 num_sils_genned = 0; - - LLVector3d cameraPos = gAgent.getCameraPositionGlobal(); - F32 currentCameraZoom = gAgent.getCurrentCameraBuildOffset(); - - if (!mSilhouetteImagep) - { - mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLViewerTexture::BOOST_UI); - } - - mHighlightedObjects->cleanupNodes(); - - if((cameraPos - mLastCameraPos).magVecSquared() > SILHOUETTE_UPDATE_THRESHOLD_SQUARED * currentCameraZoom * currentCameraZoom) - { - struct f : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - object->setChanged(LLXform::SILHOUETTE); - return true; - } - } func; - getSelection()->applyToObjects(&func); - - mLastCameraPos = gAgent.getCameraPositionGlobal(); - } - - std::vector changed_objects; - - updateSelectionSilhouette(mSelectedObjects, num_sils_genned, changed_objects); - if (mRectSelectedObjects.size() > 0) - { - //gGLSPipelineSelection.set(); - - //mSilhouetteImagep->bindTexture(); - //glAlphaFunc(GL_GREATER, sHighlightAlphaTest); - - std::set roots; - - // sync mHighlightedObjects with mRectSelectedObjects since the latter is rebuilt every frame and former - // persists from frame to frame to avoid regenerating object silhouettes - // mHighlightedObjects includes all siblings of rect selected objects - - BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); - - // generate list of roots from current object selection - for (std::set >::iterator iter = mRectSelectedObjects.begin(); - iter != mRectSelectedObjects.end(); iter++) - { - LLViewerObject *objectp = *iter; - if (select_linked_set) - { - LLViewerObject *rootp = (LLViewerObject*)objectp->getRoot(); - roots.insert(rootp); - } - else - { - roots.insert(objectp); - } - } - - // remove highlight nodes not in roots list - std::vector remove_these_nodes; - std::vector remove_these_roots; - - for (LLObjectSelection::iterator iter = mHighlightedObjects->begin(); - iter != mHighlightedObjects->end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* objectp = node->getObject(); - if (!objectp) - continue; - if (objectp->isRoot() || !select_linked_set) - { - if (roots.count(objectp) == 0) - { - remove_these_nodes.push_back(node); - } - else - { - remove_these_roots.push_back(objectp); - } - } - else - { - LLViewerObject* rootp = (LLViewerObject*)objectp->getRoot(); - - if (roots.count(rootp) == 0) - { - remove_these_nodes.push_back(node); - } - } - } - - // remove all highlight nodes no longer in rectangle selection - for (std::vector::iterator iter = remove_these_nodes.begin(); - iter != remove_these_nodes.end(); ++iter) - { - LLSelectNode* nodep = *iter; - mHighlightedObjects->removeNode(nodep); - } - - // remove all root objects already being highlighted - for (std::vector::iterator iter = remove_these_roots.begin(); - iter != remove_these_roots.end(); ++iter) - { - LLViewerObject* objectp = *iter; - roots.erase(objectp); - } - - // add all new objects in rectangle selection - for (std::set::iterator iter = roots.begin(); - iter != roots.end(); iter++) - { - LLViewerObject* objectp = *iter; - if (!canSelectObject(objectp)) - { - continue; - } - - LLSelectNode* rect_select_root_node = new LLSelectNode(objectp, TRUE); - rect_select_root_node->selectAllTEs(TRUE); - - if (!select_linked_set) - { - rect_select_root_node->mIndividualSelection = TRUE; - } - else - { - LLViewerObject::const_child_list_t& child_list = objectp->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); iter++) - { - LLViewerObject* child_objectp = *iter; - - if (!canSelectObject(child_objectp)) - { - continue; - } - - LLSelectNode* rect_select_node = new LLSelectNode(child_objectp, TRUE); - rect_select_node->selectAllTEs(TRUE); - mHighlightedObjects->addNodeAtEnd(rect_select_node); - } - } - - // Add the root last, to preserve order for link operations. - mHighlightedObjects->addNodeAtEnd(rect_select_root_node); - } - - num_sils_genned = 0; - - // render silhouettes for highlighted objects - //BOOL subtracting_from_selection = (gKeyboard->currentMask(TRUE) == MASK_CONTROL); - for (S32 pass = 0; pass < 2; pass++) - { - for (LLObjectSelection::iterator iter = mHighlightedObjects->begin(); - iter != mHighlightedObjects->end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* objectp = node->getObject(); - if (!objectp) - continue; - - // do roots first, then children so that root flags are cleared ASAP - BOOL roots_only = (pass == 0); - BOOL is_root = objectp->isRootEdit(); - if (roots_only != is_root) - { - continue; - } - - if (!node->mSilhouetteExists - || objectp->isChanged(LLXform::SILHOUETTE) - || (objectp->getParent() && objectp->getParent()->isChanged(LLXform::SILHOUETTE))) - { - if (num_sils_genned++ < MAX_SILS_PER_FRAME) - { - generateSilhouette(node, LLViewerCamera::getInstance()->getOrigin()); - changed_objects.push_back(objectp); - } - else if (objectp->isAttachment() && objectp->getRootEdit()->mDrawable.notNull()) - { - //RN: hack for orthogonal projection of HUD attachments - LLViewerJointAttachment* attachment_pt = (LLViewerJointAttachment*)objectp->getRootEdit()->mDrawable->getParent(); - if (attachment_pt && attachment_pt->getIsHUDAttachment()) - { - LLVector3 camera_pos = LLVector3(-10000.f, 0.f, 0.f); - generateSilhouette(node, camera_pos); - } - } - } - //LLColor4 highlight_color; - // - //if (subtracting_from_selection) - //{ - // node->renderOneSilhouette(LLColor4::red); - //} - //else if (!objectp->isSelected()) - //{ - // highlight_color = objectp->isRoot() ? sHighlightParentColor : sHighlightChildColor; - // node->renderOneSilhouette(highlight_color); - //} - } - } - //mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D); - } - else - { - mHighlightedObjects->deleteAllNodes(); - } - - for (std::vector::iterator iter = changed_objects.begin(); - iter != changed_objects.end(); ++iter) - { - // clear flags after traversing node list (as child objects need to refer to parent flags, etc) - LLViewerObject* objectp = *iter; - objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE); - } - - //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); -} - -void LLSelectMgr::updateSelectionSilhouette(LLObjectSelectionHandle object_handle, S32& num_sils_genned, std::vector& changed_objects) -{ - if (object_handle->getNumNodes()) - { - //gGLSPipelineSelection.set(); - - //mSilhouetteImagep->bindTexture(); - //glAlphaFunc(GL_GREATER, sHighlightAlphaTest); - - for (S32 pass = 0; pass < 2; pass++) - { - for (LLObjectSelection::iterator iter = object_handle->begin(); - iter != object_handle->end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* objectp = node->getObject(); - if (!objectp) - continue; - // do roots first, then children so that root flags are cleared ASAP - BOOL roots_only = (pass == 0); - BOOL is_root = (objectp->isRootEdit()); - if (roots_only != is_root || objectp->mDrawable.isNull()) - { - continue; - } - - if (!node->mSilhouetteExists - || objectp->isChanged(LLXform::SILHOUETTE) - || (objectp->getParent() && objectp->getParent()->isChanged(LLXform::SILHOUETTE))) - { - if (num_sils_genned++ < MAX_SILS_PER_FRAME)// && objectp->mDrawable->isVisible()) - { - generateSilhouette(node, LLViewerCamera::getInstance()->getOrigin()); - changed_objects.push_back(objectp); - } - else if (objectp->isAttachment() && objectp->getRootEdit() && objectp->getRootEdit()->mDrawable.notNull()) - { - //RN: hack for orthogonal projection of HUD attachments - LLViewerJointAttachment* attachment_pt = (LLViewerJointAttachment*)objectp->getRootEdit()->mDrawable->getParent(); - if (attachment_pt && attachment_pt->getIsHUDAttachment()) - { - LLVector3 camera_pos = LLVector3(-10000.f, 0.f, 0.f); - generateSilhouette(node, camera_pos); - } - } - } - } - } - } -} -void LLSelectMgr::renderSilhouettes(BOOL for_hud) -{ - if (!mRenderSilhouettes || !LLSelectMgr::sRenderSelectionHighlights) - { - return; - } - - gGL.getTexUnit(0)->bind(mSilhouetteImagep.get()); - LLGLSPipelineSelection gls_select; - gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); - LLGLEnable blend(GL_BLEND); - LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - - if (isAgentAvatarValid() && for_hud) - { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - LLBBox hud_bbox = avatar->getHUDBBox(); - - F32 cur_zoom = gAgent.mHUDCurZoom; - - // set up transform to encompass bounding box of HUD - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f); - glOrtho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glLoadMatrixf(OGL_TO_CFR_ROTATION); // Load Cory's favorite reference frame - glTranslatef(-hud_bbox.getCenterLocal().mV[VX] + (depth *0.5f), 0.f, 0.f); - glScalef(cur_zoom, cur_zoom, cur_zoom); - } - if (mSelectedObjects->getNumNodes()) - { - LLUUID inspect_item_id = LLFloaterInspect::getSelectedUUID(); - - // - //for (S32 pass = 0; pass < 2; pass++) - //{ - // - for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); - iter != mSelectedObjects->end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* objectp = node->getObject(); - if (!objectp) - continue; - if (objectp->isHUDAttachment() != for_hud) - { - continue; - } - if(objectp->getID() == inspect_item_id) - { - node->renderOneSilhouette(sHighlightInspectColor); - } - else if (node->isTransient()) - { - BOOL oldHidden = LLSelectMgr::sRenderHiddenSelections; - LLSelectMgr::sRenderHiddenSelections = FALSE; - node->renderOneSilhouette(sContextSilhouetteColor); - LLSelectMgr::sRenderHiddenSelections = oldHidden; - } - else if (objectp->isRootEdit()) - { - node->renderOneSilhouette(sSilhouetteParentColor); - } - else - { - node->renderOneSilhouette(sSilhouetteChildColor); - } - } - // - //} - // - } - - if (mHighlightedObjects->getNumNodes()) - { - // render silhouettes for highlighted objects - BOOL subtracting_from_selection = (gKeyboard->currentMask(TRUE) == MASK_CONTROL); - for (S32 pass = 0; pass < 2; pass++) - { - for (LLObjectSelection::iterator iter = mHighlightedObjects->begin(); - iter != mHighlightedObjects->end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* objectp = node->getObject(); - if (!objectp) - continue; - if (objectp->isHUDAttachment() != for_hud) - { - continue; - } - - if (subtracting_from_selection) - { - node->renderOneSilhouette(LLColor4::red); - } - else if (!objectp->isSelected()) - { - LLColor4 highlight_color = objectp->isRoot() ? sHighlightParentColor : sHighlightChildColor; - node->renderOneSilhouette(highlight_color); - } - } - } - } - - if (isAgentAvatarValid() && for_hud) - { - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - stop_glerror(); - } - - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); -} - -void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point) -{ - LLViewerObject* objectp = nodep->getObject(); - - if (objectp && objectp->getPCode() == LL_PCODE_VOLUME) - { - ((LLVOVolume*)objectp)->generateSilhouette(nodep, view_point); - } -} - -// -// Utility classes -// -LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow) -: mObject(object), - mIndividualSelection(FALSE), - mTransient(FALSE), - mValid(FALSE), - mPermissions(new LLPermissions()), - mInventorySerial(0), - mSilhouetteExists(FALSE), - mDuplicated(FALSE), - mTESelectMask(0), - mLastTESelected(0), - mName(LLStringUtil::null), - mDescription(LLStringUtil::null), - mTouchName(LLStringUtil::null), - mSitName(LLStringUtil::null), - mCreationDate(0) -{ - selectAllTEs(FALSE); - saveColors(); -} - -LLSelectNode::LLSelectNode(const LLSelectNode& nodep) -{ - mTESelectMask = nodep.mTESelectMask; - mLastTESelected = nodep.mLastTESelected; - - mIndividualSelection = nodep.mIndividualSelection; - - mValid = nodep.mValid; - mTransient = nodep.mTransient; - mPermissions = new LLPermissions(*nodep.mPermissions); - mSaleInfo = nodep.mSaleInfo;; - mAggregatePerm = nodep.mAggregatePerm; - mAggregateTexturePerm = nodep.mAggregateTexturePerm; - mAggregateTexturePermOwner = nodep.mAggregateTexturePermOwner; - mName = nodep.mName; - mDescription = nodep.mDescription; - mCategory = nodep.mCategory; - mInventorySerial = 0; - mSavedPositionLocal = nodep.mSavedPositionLocal; - mSavedPositionGlobal = nodep.mSavedPositionGlobal; - mSavedScale = nodep.mSavedScale; - mSavedRotation = nodep.mSavedRotation; - mDuplicated = nodep.mDuplicated; - mDuplicatePos = nodep.mDuplicatePos; - mDuplicateRot = nodep.mDuplicateRot; - mItemID = nodep.mItemID; - mFolderID = nodep.mFolderID; - mFromTaskID = nodep.mFromTaskID; - mTouchName = nodep.mTouchName; - mSitName = nodep.mSitName; - mCreationDate = nodep.mCreationDate; - - mSilhouetteVertices = nodep.mSilhouetteVertices; - mSilhouetteNormals = nodep.mSilhouetteNormals; - mSilhouetteSegments = nodep.mSilhouetteSegments; - mSilhouetteExists = nodep.mSilhouetteExists; - mObject = nodep.mObject; - - std::vector::const_iterator color_iter; - mSavedColors.clear(); - for (color_iter = nodep.mSavedColors.begin(); color_iter != nodep.mSavedColors.end(); ++color_iter) - { - mSavedColors.push_back(*color_iter); - } - - saveTextures(nodep.mSavedTextures); -} - -LLSelectNode::~LLSelectNode() -{ - delete mPermissions; - mPermissions = NULL; -} - -void LLSelectNode::selectAllTEs(BOOL b) -{ - mTESelectMask = b ? TE_SELECT_MASK_ALL : 0x0; - mLastTESelected = 0; -} - -void LLSelectNode::selectTE(S32 te_index, BOOL selected) -{ - if (te_index < 0 || te_index >= SELECT_MAX_TES) - { - return; - } - if (selected) - { - mTESelectMask |= (0x1 << te_index); - } - else - { - mTESelectMask &= ~(0x1 << te_index); - } - mLastTESelected = te_index; -} - -BOOL LLSelectNode::isTESelected(S32 te_index) -{ - if (te_index < 0 || te_index >= mObject->getNumTEs()) - { - return FALSE; - } - return (mTESelectMask & (0x1 << te_index)) != 0; -} - -S32 LLSelectNode::getLastSelectedTE() -{ - if (!isTESelected(mLastTESelected)) - { - return -1; - } - return mLastTESelected; -} - -LLViewerObject* LLSelectNode::getObject() -{ - if (!mObject) - { - return NULL; - } - else if (mObject->isDead()) - { - mObject = NULL; - } - return mObject; -} - -void LLSelectNode::setObject(LLViewerObject* object) -{ - mObject = object; -} - -void LLSelectNode::saveColors() -{ - if (mObject.notNull()) - { - mSavedColors.clear(); - for (S32 i = 0; i < mObject->getNumTEs(); i++) - { - const LLTextureEntry* tep = mObject->getTE(i); - mSavedColors.push_back(tep->getColor()); - } - } -} - -void LLSelectNode::saveTextures(const std::vector& textures) -{ - if (mObject.notNull()) - { - mSavedTextures.clear(); - - for (std::vector::const_iterator texture_it = textures.begin(); - texture_it != textures.end(); ++texture_it) - { - mSavedTextures.push_back(*texture_it); - } - } -} - -void LLSelectNode::saveTextureScaleRatios() -{ - mTextureScaleRatios.clear(); - if (mObject.notNull()) - { - for (U8 i = 0; i < mObject->getNumTEs(); i++) - { - F32 s,t; - const LLTextureEntry* tep = mObject->getTE(i); - tep->getScale(&s,&t); - U32 s_axis = 0; - U32 t_axis = 0; - - LLPrimitive::getTESTAxes(i, &s_axis, &t_axis); - - LLVector3 v; - LLVector3 scale = mObject->getScale(); - - if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR) - { - v.mV[s_axis] = s*scale.mV[s_axis]; - v.mV[t_axis] = t*scale.mV[t_axis]; - } - else - { - v.mV[s_axis] = s/scale.mV[s_axis]; - v.mV[t_axis] = t/scale.mV[t_axis]; - } - - mTextureScaleRatios.push_back(v); - } - } -} - - -// This implementation should be similar to LLTask::allowOperationOnTask -BOOL LLSelectNode::allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const -{ - // Extract ownership. - BOOL object_is_group_owned = FALSE; - LLUUID object_owner_id; - mPermissions->getOwnership(object_owner_id, object_is_group_owned); - - // Operations on invalid or public objects is not allowed. - if (!mObject || (mObject->isDead()) || !mPermissions->isOwned()) - { - return FALSE; - } - - // The transfer permissions can never be given through proxy. - if (PERM_TRANSFER == op) - { - // The owner of an agent-owned object can transfer to themselves. - if ( !object_is_group_owned - && (gAgent.getID() == object_owner_id) ) - { - return TRUE; - } - else - { - // Otherwise check aggregate permissions. - return mObject->permTransfer(); - } - } - - if (PERM_MOVE == op - || PERM_MODIFY == op) - { - // only owners can move or modify their attachments - // no proxy allowed. - if (mObject->isAttachment() && object_owner_id != gAgent.getID()) - { - return FALSE; - } - } - - // Calculate proxy_agent_id and group_id to use for permissions checks. - // proxy_agent_id may be set to the object owner through group powers. - // group_id can only be set to the object's group, if the agent is in that group. - LLUUID group_id = LLUUID::null; - LLUUID proxy_agent_id = gAgent.getID(); - - // Gods can always operate. - if (gAgent.isGodlike()) - { - return TRUE; - } - - // Check if the agent is in the same group as the object. - LLUUID object_group_id = mPermissions->getGroup(); - if (object_group_id.notNull() && - gAgent.isInGroup(object_group_id)) - { - // Assume the object's group during this operation. - group_id = object_group_id; - } - - // Only allow proxy powers for PERM_COPY if the actual agent can - // receive the item (ie has PERM_TRANSFER permissions). - // NOTE: op == PERM_TRANSFER has already been handled, but if - // that ever changes we need to BLOCK proxy powers for PERM_TRANSFER. DK 03/28/06 - if (PERM_COPY != op || mPermissions->allowTransferTo(gAgent.getID())) - { - // Check if the agent can assume ownership through group proxy or agent-granted proxy. - if ( ( object_is_group_owned - && gAgent.hasPowerInGroup(object_owner_id, group_proxy_power)) - // Only allow proxy for move, modify, and copy. - || ( (PERM_MOVE == op || PERM_MODIFY == op || PERM_COPY == op) - && (!object_is_group_owned - && gAgent.isGrantedProxy(*mPermissions)))) - { - // This agent is able to assume the ownership role for this operation. - proxy_agent_id = object_owner_id; - } - } - - // We now have max ownership information. - if (PERM_OWNER == op) - { - // This this was just a check for ownership, we can now return the answer. - return (proxy_agent_id == object_owner_id ? TRUE : FALSE); - } - - // check permissions to see if the agent can operate - return (mPermissions->allowOperationBy(op, proxy_agent_id, group_id)); -} - -//----------------------------------------------------------------------------- -// renderOneSilhouette() -//----------------------------------------------------------------------------- -void LLSelectNode::renderOneSilhouette(const LLColor4 &color) -{ - LLViewerObject* objectp = getObject(); - if (!objectp) - { - return; - } - - LLDrawable* drawable = objectp->mDrawable; - if(!drawable) - { - return; - } - - if (!mSilhouetteExists) - { - return; - } - - BOOL is_hud_object = objectp->isHUDAttachment(); - - if (mSilhouetteVertices.size() == 0 || mSilhouetteNormals.size() != mSilhouetteVertices.size()) - { - return; - } - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - if (!is_hud_object) - { - glLoadIdentity(); - glMultMatrixd(gGLModelView); - } - - - if (drawable->isActive()) - { - glMultMatrixf((F32*) objectp->getRenderMatrix().mMatrix); - } - - LLVolume *volume = objectp->getVolume(); - if (volume) - { - F32 silhouette_thickness; - if (isAgentAvatarValid() && is_hud_object) - { - silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgent.mHUDCurZoom; - } - else - { - LLVector3 view_vector = LLViewerCamera::getInstance()->getOrigin() - objectp->getRenderPosition(); - silhouette_thickness = view_vector.magVec() * LLSelectMgr::sHighlightThickness * (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV()); - } - F32 animationTime = (F32)LLFrameTimer::getElapsedSeconds(); - - F32 u_coord = fmod(animationTime * LLSelectMgr::sHighlightUAnim, 1.f); - F32 v_coord = 1.f - fmod(animationTime * LLSelectMgr::sHighlightVAnim, 1.f); - F32 u_divisor = 1.f / ((F32)(mSilhouetteVertices.size() - 1)); - - if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible()) - { - gGL.flush(); - gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE); - LLGLEnable fog(GL_FOG); - glFogi(GL_FOG_MODE, GL_LINEAR); - float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec(); - LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgent.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0); - glFogf(GL_FOG_START, d); - glFogf(GL_FOG_END, d*(1 + (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV()))); - glFogfv(GL_FOG_COLOR, fogCol.mV); - - LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); - gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); - gGL.begin(LLRender::LINES); - { - S32 i = 0; - for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++) - { - for(; i < mSilhouetteSegments[seg_num]; i++) - { - u_coord += u_divisor * LLSelectMgr::sHighlightUScale; - - gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); - gGL.texCoord2f( u_coord, v_coord ); - gGL.vertex3fv( mSilhouetteVertices[i].mV ); - } - } - } - gGL.end(); - u_coord = fmod(animationTime * LLSelectMgr::sHighlightUAnim, 1.f); - } - - gGL.flush(); - gGL.setSceneBlendType(LLRender::BT_ALPHA); - gGL.begin(LLRender::TRIANGLES); - { - S32 i = 0; - for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++) - { - S32 first_i = i; - LLVector3 v; - LLVector2 t; - - for(; i < mSilhouetteSegments[seg_num]; i++) - { - - if (i == first_i) { - LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness; - vert += mSilhouetteVertices[i]; - - gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); - gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale ); - gGL.vertex3fv( vert.mV ); - - u_coord += u_divisor * LLSelectMgr::sHighlightUScale; - - gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); - gGL.texCoord2f( u_coord, v_coord ); - gGL.vertex3fv( mSilhouetteVertices[i].mV ); - - v = mSilhouetteVertices[i]; - t = LLVector2(u_coord, v_coord); - } - else { - LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness; - vert += mSilhouetteVertices[i]; - - gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); - gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale ); - gGL.vertex3fv( vert.mV ); - gGL.vertex3fv( vert.mV ); - - gGL.texCoord2fv(t.mV); - u_coord += u_divisor * LLSelectMgr::sHighlightUScale; - gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); - gGL.vertex3fv(v.mV); - gGL.texCoord2f( u_coord, v_coord ); - gGL.vertex3fv( mSilhouetteVertices[i].mV ); - - } - } - } - } - gGL.end(); - gGL.flush(); - } - glPopMatrix(); -} - -// -// Utility Functions -// - -// Update everyone who cares about the selection list -void dialog_refresh_all() -{ - if (gNoRender) - { - return; - } - - //could refresh selected object info in toolbar here - - gFloaterTools->dirty(); - - if( gPieObject->getVisible() ) - { - gPieObject->arrange(); - } - - if( gPieAttachment->getVisible() ) - { - gPieAttachment->arrange(); - } - - LLFloaterProperties::dirtyAll(); - LLFloaterInspect::dirty(); -} - -S32 get_family_count(LLViewerObject *parent) -{ - if (!parent) - { - llwarns << "Trying to get_family_count on null parent!" << llendl; - } - S32 count = 1; // for this object - LLViewerObject::const_child_list_t& child_list = parent->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); iter++) - { - LLViewerObject* child = *iter; - - if (!child) - { - llwarns << "Family object has NULL child! Show Doug." << llendl; - } - else if (child->isDead()) - { - llwarns << "Family object has dead child object. Show Doug." << llendl; - } - else - { - if (LLSelectMgr::getInstance()->canSelectObject(child)) - { - count += get_family_count( child ); - } - } - } - return count; -} - -//----------------------------------------------------------------------------- -// updateSelectionCenter -//----------------------------------------------------------------------------- -void LLSelectMgr::updateSelectionCenter() -{ - const F32 MOVE_SELECTION_THRESHOLD = 1.f; // Movement threshold in meters for updating selection - // center (tractor beam) - - //override any object updates received - //for selected objects - overrideObjectUpdates(); - - LLViewerObject* object = mSelectedObjects->getFirstObject(); - if (!object) - { - // nothing selected, probably grabbing - // Ignore by setting to avatar origin. - mSelectionCenterGlobal.clearVec(); - mShowSelection = FALSE; - mSelectionBBox = LLBBox(); - mPauseRequest = NULL; - resetAgentHUDZoom(); - - } - else - { - mSelectedObjects->mSelectType = getSelectTypeForObject(object); - - if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) - { - mPauseRequest = gAgent.getAvatarObject()->requestPause(); - } - else - { - mPauseRequest = NULL; - } - - if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && isAgentAvatarValid()) - { - // reset hud ZOOM - gAgent.mHUDTargetZoom = 1.f; - gAgent.mHUDCurZoom = 1.f; - } - - mShowSelection = FALSE; - LLBBox bbox; - - // have stuff selected - LLVector3d select_center; - // keep a list of jointed objects for showing the joint HUDEffects - - // Initialize the bounding box to the root prim, so the BBox orientation - // matches the root prim's (affecting the orientation of the manipulators). - bbox.addBBoxAgent( (mSelectedObjects->getFirstRootObject(TRUE))->getBoundingBoxAgent() ); - - std::vector < LLViewerObject *> jointed_objects; - - for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); - iter != mSelectedObjects->end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* object = node->getObject(); - if (!object) - continue; - LLViewerObject *myAvatar = gAgent.getAvatarObject(); - LLViewerObject *root = object->getRootEdit(); - if (mSelectedObjects->mSelectType == SELECT_TYPE_WORLD && // not an attachment - !root->isChild(myAvatar) && // not the object you're sitting on - !object->isAvatar()) // not another avatar - { - mShowSelection = TRUE; - } - - bbox.addBBoxAgent( object->getBoundingBoxAgent() ); - - if (object->isJointChild()) - { - jointed_objects.push_back(object); - } - } - - LLVector3 bbox_center_agent = bbox.getCenterAgent(); - mSelectionCenterGlobal = gAgent.getPosGlobalFromAgent(bbox_center_agent); - mSelectionBBox = bbox; - - } - - if ( !(gAgentID == LLUUID::null)) - { - LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); - if (mShowSelection) - { - LLVector3d select_center_global; - - if( tool->isEditing() ) - { - select_center_global = tool->getEditingPointGlobal(); - } - else - { - select_center_global = mSelectionCenterGlobal; - } - - // Send selection center if moved beyond threshold (used to animate tractor beam) - LLVector3d diff; - diff = select_center_global - mLastSentSelectionCenterGlobal; - - if ( diff.magVecSquared() > MOVE_SELECTION_THRESHOLD*MOVE_SELECTION_THRESHOLD ) - { - // Transmit updated selection center - mLastSentSelectionCenterGlobal = select_center_global; - } - } - } - - // give up edit menu if no objects selected - if (gEditMenuHandler == this && mSelectedObjects->getObjectCount() == 0) - { - gEditMenuHandler = NULL; - } -} - -void LLSelectMgr::updatePointAt() -{ - if (mShowSelection) - { - if (mSelectedObjects->getObjectCount()) - { - LLVector3 select_offset; - const LLPickInfo& pick = gViewerWindow->getLastPick(); - LLViewerObject *click_object = pick.getObject(); - if (click_object && click_object->isSelected()) - { - // clicked on another object in our selection group, use that as target - select_offset.setVec(pick.mObjectOffset); - select_offset.rotVec(~click_object->getRenderRotation()); - - gAgent.setPointAt(POINTAT_TARGET_SELECT, click_object, select_offset); - gAgent.setLookAt(LOOKAT_TARGET_SELECT, click_object, select_offset); - } - else - { - // didn't click on an object this time, revert to pointing at center of first object - gAgent.setPointAt(POINTAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); - gAgent.setLookAt(LOOKAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); - } - } - else - { - gAgent.setPointAt(POINTAT_TARGET_CLEAR); - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); - } - } - else - { - gAgent.setPointAt(POINTAT_TARGET_CLEAR); - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); - } -} - -//----------------------------------------------------------------------------- -// getBBoxOfSelection() -//----------------------------------------------------------------------------- -LLBBox LLSelectMgr::getBBoxOfSelection() const -{ - return mSelectionBBox; -} - - -//----------------------------------------------------------------------------- -// canUndo() -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::canUndo() const -{ - return const_cast(this)->mSelectedObjects->getFirstEditableObject() != NULL; // HACK: casting away constness - MG -} - -//----------------------------------------------------------------------------- -// undo() -//----------------------------------------------------------------------------- -void LLSelectMgr::undo() -{ - BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); - LLUUID group_id(gAgent.getGroupID()); - sendListToRegions("Undo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST); -} - -//----------------------------------------------------------------------------- -// canRedo() -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::canRedo() const -{ - return const_cast(this)->mSelectedObjects->getFirstEditableObject() != NULL; // HACK: casting away constness - MG -} - -//----------------------------------------------------------------------------- -// redo() -//----------------------------------------------------------------------------- -void LLSelectMgr::redo() -{ - BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); - LLUUID group_id(gAgent.getGroupID()); - sendListToRegions("Redo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST); -} - -//----------------------------------------------------------------------------- -// canDoDelete() -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::canDoDelete() const -{ - bool can_delete = false; - // This function is "logically const" - it does not change state in - // a way visible outside the selection manager. - LLSelectMgr* self = const_cast(this); - LLViewerObject* obj = self->mSelectedObjects->getFirstDeleteableObject(); - // Note: Can only delete root objects (see getFirstDeleteableObject() for more info) - if (obj!= NULL) - { - // all the faces needs to be selected - if(self->mSelectedObjects->contains(obj,SELECT_ALL_TES )) - { - can_delete = true; - } - } - - return can_delete; -} - -//----------------------------------------------------------------------------- -// doDelete() -//----------------------------------------------------------------------------- -void LLSelectMgr::doDelete() -{ - selectDelete(); -} - -//----------------------------------------------------------------------------- -// canDeselect() -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::canDeselect() const -{ - return !mSelectedObjects->isEmpty(); -} - -//----------------------------------------------------------------------------- -// deselect() -//----------------------------------------------------------------------------- -void LLSelectMgr::deselect() -{ - deselectAll(); -} -//----------------------------------------------------------------------------- -// canDuplicate() -//----------------------------------------------------------------------------- -BOOL LLSelectMgr::canDuplicate() const -{ - return const_cast(this)->mSelectedObjects->getFirstCopyableObject() != NULL; // HACK: casting away constness - MG -} -//----------------------------------------------------------------------------- -// duplicate() -//----------------------------------------------------------------------------- -void LLSelectMgr::duplicate() -{ - LLVector3 offset(0.5f, 0.5f, 0.f); - selectDuplicate(offset, TRUE); -} - -ESelectType LLSelectMgr::getSelectTypeForObject(LLViewerObject* object) -{ - if (!object) - { - return SELECT_TYPE_WORLD; - } - if (object->isHUDAttachment()) - { - return SELECT_TYPE_HUD; - } - else if (object->isAttachment()) - { - return SELECT_TYPE_ATTACHMENT; - } - else - { - return SELECT_TYPE_WORLD; - } -} - -void LLSelectMgr::validateSelection() -{ - struct f : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - if (!LLSelectMgr::getInstance()->canSelectObject(object)) - { - LLSelectMgr::getInstance()->deselectObjectOnly(object); - } - return true; - } - } func; - getSelection()->applyToObjects(&func); -} - -BOOL LLSelectMgr::canSelectObject(LLViewerObject* object) -{ - // Never select dead objects - if (!object || object->isDead()) - { - return FALSE; - } - - if (mForceSelection) - { - return TRUE; - } - - if ((gSavedSettings.getBOOL("SelectOwnedOnly") && !object->permYouOwner()) || - (gSavedSettings.getBOOL("SelectMovableOnly") && !object->permMove())) - { - // only select my own objects - return FALSE; - } - - // Can't select orphans - if (object->isOrphaned()) return FALSE; - - // Can't select avatars - if (object->isAvatar()) return FALSE; - - // Can't select land - if (object->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH) return FALSE; - - // - //ESelectType selection_type = getSelectTypeForObject(object); - //if (mSelectedObjects->getObjectCount() > 0 && mSelectedObjects->mSelectType != selection_type) return FALSE; - // - - return TRUE; -} - -BOOL LLSelectMgr::setForceSelection(BOOL force) -{ - std::swap(mForceSelection,force); - return force; -} - -void LLSelectMgr::resetAgentHUDZoom() -{ - gAgent.mHUDTargetZoom = 1.f; - gAgent.mHUDCurZoom = 1.f; -} - -void LLSelectMgr::getAgentHUDZoom(F32 &target_zoom, F32 ¤t_zoom) const -{ - target_zoom = gAgent.mHUDTargetZoom; - current_zoom = gAgent.mHUDCurZoom; -} - -void LLSelectMgr::setAgentHUDZoom(F32 target_zoom, F32 current_zoom) -{ - gAgent.mHUDTargetZoom = target_zoom; - gAgent.mHUDCurZoom = current_zoom; -} - -LLObjectSelection::LLObjectSelection() : - LLRefCount(), - mSelectType(SELECT_TYPE_WORLD) -{ -} - -LLObjectSelection::~LLObjectSelection() -{ - deleteAllNodes(); -} - -void LLObjectSelection::cleanupNodes() -{ - for (list_t::iterator iter = mList.begin(); iter != mList.end(); ) - { - list_t::iterator curiter = iter++; - LLSelectNode* node = *curiter; - if (node->getObject() == NULL || node->getObject()->isDead()) - { - mList.erase(curiter); - delete node; - } - } -} - -void LLObjectSelection::updateEffects() -{ -} - -S32 LLObjectSelection::getNumNodes() -{ - return mList.size(); -} - -void LLObjectSelection::addNode(LLSelectNode *nodep) -{ - llassert_always(nodep->getObject() && !nodep->getObject()->isDead()); - mList.push_front(nodep); - mSelectNodeMap[nodep->getObject()] = nodep; -} - -void LLObjectSelection::addNodeAtEnd(LLSelectNode *nodep) -{ - llassert_always(nodep->getObject() && !nodep->getObject()->isDead()); - mList.push_back(nodep); - mSelectNodeMap[nodep->getObject()] = nodep; -} - -void LLObjectSelection::moveNodeToFront(LLSelectNode *nodep) -{ - mList.remove(nodep); - mList.push_front(nodep); -} - -void LLObjectSelection::removeNode(LLSelectNode *nodep) -{ - mSelectNodeMap.erase(nodep->getObject()); - if (nodep->getObject() == mPrimaryObject) - { - mPrimaryObject = NULL; - } - nodep->setObject(NULL); // Will get erased in cleanupNodes() - mList.remove(nodep); -} - -void LLObjectSelection::deleteAllNodes() -{ - std::for_each(mList.begin(), mList.end(), DeletePointer()); - mList.clear(); - mSelectNodeMap.clear(); - mPrimaryObject = NULL; -} - -LLSelectNode* LLObjectSelection::findNode(LLViewerObject* objectp) -{ - std::map, LLSelectNode*>::iterator found_it = mSelectNodeMap.find(objectp); - if (found_it != mSelectNodeMap.end()) - { - return found_it->second; - } - return NULL; -} - -//----------------------------------------------------------------------------- -// isEmpty() -//----------------------------------------------------------------------------- -BOOL LLObjectSelection::isEmpty() const -{ - return (mList.size() == 0); -} - -//----------------------------------------------------------------------------- -// getOwnershipCost() -//----------------------------------------------------------------------------- -BOOL LLObjectSelection::getOwnershipCost(S32 &cost) -{ - S32 count = getObjectCount(); - cost = count * OWNERSHIP_COST_PER_OBJECT; - return (count > 0); -} - - -//----------------------------------------------------------------------------- -// getObjectCount() - returns number of non null objects -//----------------------------------------------------------------------------- -S32 LLObjectSelection::getObjectCount() -{ - cleanupNodes(); - S32 count = mList.size(); - return count; -} - - -//----------------------------------------------------------------------------- -// getTECount() -//----------------------------------------------------------------------------- -S32 LLObjectSelection::getTECount() -{ - S32 count = 0; - for (LLObjectSelection::iterator iter = begin(); iter != end(); iter++) - { - LLSelectNode* node = *iter; - LLViewerObject* object = node->getObject(); - if (!object) - continue; - S32 num_tes = object->getNumTEs(); - for (S32 te = 0; te < num_tes; te++) - { - if (node->isTESelected(te)) - { - ++count; - } - } - } - return count; -} - -//----------------------------------------------------------------------------- -// getRootObjectCount() -//----------------------------------------------------------------------------- -S32 LLObjectSelection::getRootObjectCount() -{ - S32 count = 0; - for (LLObjectSelection::root_iterator iter = root_begin(); iter != root_end(); iter++) - { - ++count; - } - return count; -} - -bool LLObjectSelection::applyToObjects(LLSelectedObjectFunctor* func) -{ - bool result = true; - for (iterator iter = begin(); iter != end(); ) - { - iterator nextiter = iter++; - LLViewerObject* object = (*nextiter)->getObject(); - if (!object) - continue; - bool r = func->apply(object); - result = result && r; - } - return result; -} - -bool LLObjectSelection::applyToRootObjects(LLSelectedObjectFunctor* func, bool firstonly) -{ - bool result = firstonly ? false : true; - for (root_iterator iter = root_begin(); iter != root_end(); ) - { - root_iterator nextiter = iter++; - LLViewerObject* object = (*nextiter)->getObject(); - if (!object) - continue; - bool r = func->apply(object); - if (firstonly && r) - return true; - else - result = result && r; - } - return result; -} - -bool LLObjectSelection::applyToTEs(LLSelectedTEFunctor* func, bool firstonly) -{ - bool result = firstonly ? false : true; - for (iterator iter = begin(); iter != end(); ) - { - iterator nextiter = iter++; - LLSelectNode* node = *nextiter; - LLViewerObject* object = (*nextiter)->getObject(); - if (!object) - continue; - S32 num_tes = llmin((S32)object->getNumTEs(), (S32)object->getNumFaces()); // avatars have TEs but no faces - for (S32 te = 0; te < num_tes; ++te) - { - if (node->isTESelected(te)) - { - bool r = func->apply(object, te); - if (firstonly && r) - return true; - else - result = result && r; - } - } - } - return result; -} - -bool LLObjectSelection::applyToNodes(LLSelectedNodeFunctor *func, bool firstonly) -{ - bool result = firstonly ? false : true; - for (iterator iter = begin(); iter != end(); ) - { - iterator nextiter = iter++; - LLSelectNode* node = *nextiter; - bool r = func->apply(node); - if (firstonly && r) - return true; - else - result = result && r; - } - return result; -} - -bool LLObjectSelection::applyToRootNodes(LLSelectedNodeFunctor *func, bool firstonly) -{ - bool result = firstonly ? false : true; - for (root_iterator iter = root_begin(); iter != root_end(); ) - { - root_iterator nextiter = iter++; - LLSelectNode* node = *nextiter; - bool r = func->apply(node); - if (firstonly && r) - return true; - else - result = result && r; - } - return result; -} - -//----------------------------------------------------------------------------- -// contains() -//----------------------------------------------------------------------------- -BOOL LLObjectSelection::contains(LLViewerObject* object) -{ - return findNode(object) != NULL; -} - - -//----------------------------------------------------------------------------- -// contains() -//----------------------------------------------------------------------------- -BOOL LLObjectSelection::contains(LLViewerObject* object, S32 te) -{ - if (te == SELECT_ALL_TES) - { - // ...all faces - for (LLObjectSelection::iterator iter = begin(); - iter != end(); iter++) - { - LLSelectNode* nodep = *iter; - if (nodep->getObject() == object) - { - // Optimization - if (nodep->getTESelectMask() == TE_SELECT_MASK_ALL) - { - return TRUE; - } - - BOOL all_selected = TRUE; - for (S32 i = 0; i < object->getNumTEs(); i++) - { - all_selected = all_selected && nodep->isTESelected(i); - } - return all_selected; - } - } - return FALSE; - } - else - { - // ...one face - for (LLObjectSelection::iterator iter = begin(); iter != end(); iter++) - { - LLSelectNode* nodep = *iter; - if (nodep->getObject() == object && nodep->isTESelected(te)) - { - return TRUE; - } - } - return FALSE; - } -} - -// returns TRUE is any node is currenly worn as an attachment -BOOL LLObjectSelection::isAttachment() -{ - return (mSelectType == SELECT_TYPE_ATTACHMENT || mSelectType == SELECT_TYPE_HUD); -} - -//----------------------------------------------------------------------------- -// getSelectedParentObject() -//----------------------------------------------------------------------------- -LLViewerObject* getSelectedParentObject(LLViewerObject *object) -{ - LLViewerObject *parent; - while (object && (parent = (LLViewerObject*)object->getParent())) - { - if (parent->isSelected()) - { - object = parent; - } - else - { - break; - } - } - return object; -} - -//----------------------------------------------------------------------------- -// getFirstNode -//----------------------------------------------------------------------------- -LLSelectNode* LLObjectSelection::getFirstNode(LLSelectedNodeFunctor* func) -{ - for (iterator iter = begin(); iter != end(); ++iter) - { - LLSelectNode* node = *iter; - if (func == NULL || func->apply(node)) - { - return node; - } - } - return NULL; -} - -LLSelectNode* LLObjectSelection::getFirstRootNode(LLSelectedNodeFunctor* func, BOOL non_root_ok) -{ - for (root_iterator iter = root_begin(); iter != root_end(); ++iter) - { - LLSelectNode* node = *iter; - if (func == NULL || func->apply(node)) - { - return node; - } - } - if (non_root_ok) - { - // Get non root - return getFirstNode(func); - } - return NULL; -} - - -//----------------------------------------------------------------------------- -// getFirstSelectedObject -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstSelectedObject(LLSelectedNodeFunctor* func, BOOL get_parent) -{ - LLSelectNode* res = getFirstNode(func); - if (res && get_parent) - { - return getSelectedParentObject(res->getObject()); - } - else if (res) - { - return res->getObject(); - } - return NULL; -} - -//----------------------------------------------------------------------------- -// getFirstObject() -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstObject() -{ - LLSelectNode* res = getFirstNode(NULL); - return res ? res->getObject() : NULL; -} - -//----------------------------------------------------------------------------- -// getFirstRootObject() -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstRootObject(BOOL non_root_ok) -{ - LLSelectNode* res = getFirstRootNode(NULL, non_root_ok); - return res ? res->getObject() : NULL; -} - -//----------------------------------------------------------------------------- -// getFirstMoveableNode() -//----------------------------------------------------------------------------- -LLSelectNode* LLObjectSelection::getFirstMoveableNode(BOOL get_root_first) -{ - struct f : public LLSelectedNodeFunctor - { - bool apply(LLSelectNode* node) - { - LLViewerObject* obj = node->getObject(); - return obj && obj->permMove(); - } - } func; - LLSelectNode* res = get_root_first ? getFirstRootNode(&func, TRUE) : getFirstNode(&func); - return res; -} - -//----------------------------------------------------------------------------- -// getFirstCopyableObject() -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstCopyableObject(BOOL get_parent) -{ - struct f : public LLSelectedNodeFunctor - { - bool apply(LLSelectNode* node) - { - LLViewerObject* obj = node->getObject(); - return obj && obj->permCopy() && !obj->isAttachment(); - } - } func; - return getFirstSelectedObject(&func, get_parent); -} - -//----------------------------------------------------------------------------- -// getFirstDeleteableObject() -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstDeleteableObject() -{ - //RN: don't currently support deletion of child objects, as that requires separating them first - // then derezzing to trash - - struct f : public LLSelectedNodeFunctor - { - bool apply(LLSelectNode* node) - { - LLViewerObject* obj = node->getObject(); - // you can delete an object if you are the owner - // or you have permission to modify it. - if( obj && ( (obj->permModify()) || - (obj->permYouOwner()) || - (!obj->permAnyOwner()) )) // public - { - if( !obj->isAttachment() ) - { - return true; - } - } - return false; - } - } func; - LLSelectNode* node = getFirstNode(&func); - return node ? node->getObject() : NULL; -} - -//----------------------------------------------------------------------------- -// getFirstEditableObject() -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstEditableObject(BOOL get_parent) -{ - struct f : public LLSelectedNodeFunctor - { - bool apply(LLSelectNode* node) - { - LLViewerObject* obj = node->getObject(); - return obj && obj->permModify(); - } - } func; - return getFirstSelectedObject(&func, get_parent); -} - -//----------------------------------------------------------------------------- -// getFirstMoveableObject() -//----------------------------------------------------------------------------- -LLViewerObject* LLObjectSelection::getFirstMoveableObject(BOOL get_parent) -{ - struct f : public LLSelectedNodeFunctor - { - bool apply(LLSelectNode* node) - { - LLViewerObject* obj = node->getObject(); - return obj && obj->permMove(); - } - } func; - return getFirstSelectedObject(&func, get_parent); -} - -//----------------------------------------------------------------------------- -// Position + Rotation update methods called from LLViewerJoystick -//----------------------------------------------------------------------------- -bool LLSelectMgr::selectionMove(const LLVector3& displ, - F32 roll, F32 pitch, F32 yaw, U32 update_type) -{ - if (update_type == UPD_NONE) - { - return false; - } - - LLVector3 displ_global; - bool update_success = true; - bool update_position = update_type & UPD_POSITION; - bool update_rotation = update_type & UPD_ROTATION; - const bool noedit_linked_parts = !gSavedSettings.getBOOL("EditLinkedParts"); - - if (update_position) - { - // calculate the distance of the object closest to the camera origin - F32 min_dist = 1e+30f; - LLVector3 obj_pos; - for (LLObjectSelection::root_iterator it = getSelection()->root_begin(); - it != getSelection()->root_end(); ++it) - { - obj_pos = (*it)->getObject()->getPositionEdit(); - - F32 obj_dist = dist_vec(obj_pos, LLViewerCamera::getInstance()->getOrigin()); - if (obj_dist < min_dist) - { - min_dist = obj_dist; - } - } - - // factor the distance inside the displacement vector. This will get us - // equally visible movements for both close and far away selections. - min_dist = sqrt(min_dist) / 2; - displ_global.setVec(displ.mV[0]*min_dist, - displ.mV[1]*min_dist, - displ.mV[2]*min_dist); - - // equates to: Displ_global = Displ * M_cam_axes_in_global_frame - displ_global = LLViewerCamera::getInstance()->rotateToAbsolute(displ_global); - } - - LLQuaternion new_rot; - if (update_rotation) - { - // let's calculate the rotation around each camera axes - LLQuaternion qx(roll, LLViewerCamera::getInstance()->getAtAxis()); - LLQuaternion qy(pitch, LLViewerCamera::getInstance()->getLeftAxis()); - LLQuaternion qz(yaw, LLViewerCamera::getInstance()->getUpAxis()); - new_rot.setQuat(qx * qy * qz); - } - - LLViewerObject *obj; - S32 obj_count = getSelection()->getObjectCount(); - for (LLObjectSelection::root_iterator it = getSelection()->root_begin(); - it != getSelection()->root_end(); ++it ) - { - obj = (*it)->getObject(); - bool enable_pos = false, enable_rot = false; - bool perm_move = obj->permMove(); - bool perm_mod = obj->permModify(); - - LLVector3d sel_center(getSelectionCenterGlobal()); - - if (update_rotation) - { - enable_rot = perm_move - && ((perm_mod && !obj->isAttachment()) || noedit_linked_parts); - - if (enable_rot) - { - int children_count = obj->getChildren().size(); - if (obj_count > 1 && children_count > 0) - { - // for linked sets, rotate around the group center - const LLVector3 t(obj->getPositionGlobal() - sel_center); - - // Ra = T x R x T^-1 - LLMatrix4 mt; mt.setTranslation(t); - const LLMatrix4 mnew_rot(new_rot); - LLMatrix4 mt_1; mt_1.setTranslation(-t); - mt *= mnew_rot; - mt *= mt_1; - - // Rfin = Rcur * Ra - obj->setRotation(obj->getRotationEdit() * mt.quaternion()); - displ_global += mt.getTranslation(); - } - else - { - obj->setRotation(obj->getRotationEdit() * new_rot); - } - } - else - { - update_success = false; - } - } - - if (update_position) - { - // establish if object can be moved or not - enable_pos = perm_move && !obj->isAttachment() - && (perm_mod || noedit_linked_parts); - - if (enable_pos) - { - obj->setPosition(obj->getPositionEdit() + displ_global); - } - else - { - update_success = false; - } - } - - if (enable_pos && enable_rot && obj->mDrawable.notNull()) - { - gPipeline.markMoved(obj->mDrawable, TRUE); - } - } - - if (update_position && update_success && obj_count > 1) - { - updateSelectionCenter(); - } - - return update_success; -} - -void LLSelectMgr::sendSelectionMove() -{ - LLSelectNode *node = mSelectedObjects->getFirstRootNode(); - if (node == NULL) - { - return; - } - - //saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - - U32 update_type = UPD_POSITION | UPD_ROTATION; - LLViewerRegion *last_region, *curr_region = node->getObject()->getRegion(); - S32 objects_in_this_packet = 0; - - // apply to linked objects if unable to select their individual parts - if (!gSavedSettings.getBOOL("EditLinkedParts") && !getTEMode()) - { - // tell simulator to apply to whole linked sets - update_type |= UPD_LINKED_SETS; - } - - // prepare first bulk message - gMessageSystem->newMessage("MultipleObjectUpdate"); - packAgentAndSessionID(&update_type); - - LLViewerObject *obj = NULL; - for (LLObjectSelection::root_iterator it = getSelection()->root_begin(); - it != getSelection()->root_end(); ++it) - { - obj = (*it)->getObject(); - - // note: following code adapted from sendListToRegions() (@3924) - last_region = curr_region; - curr_region = obj->getRegion(); - - // if not simulator or message too big - if (curr_region != last_region - || gMessageSystem->isSendFull(NULL) - || objects_in_this_packet >= MAX_OBJECTS_PER_PACKET) - { - // send sim the current message and start new one - gMessageSystem->sendReliable(last_region->getHost()); - objects_in_this_packet = 0; - gMessageSystem->newMessage("MultipleObjectUpdate"); - packAgentAndSessionID(&update_type); - } - - // add another instance of the body of data - packMultipleUpdate(*it, &update_type); - ++objects_in_this_packet; - } - - // flush remaining messages - if (gMessageSystem->getCurrentSendTotal() > 0) - { - gMessageSystem->sendReliable(curr_region->getHost()); - } - else - { - gMessageSystem->clearMessage(); - } - - //saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); -} +/** + * @file llselectmgr.cpp + * @brief A manager for selected objects and faces. + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-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" + +// file include +#include "llselectmgr.h" + +// library includes +#include "llcachename.h" +#include "lldbstrings.h" +#include "lleconomy.h" +#include "llgl.h" +#include "llrender.h" +#include "llpermissions.h" +#include "llpermissionsflags.h" +#include "llundo.h" +#include "lluuid.h" +#include "llvolume.h" +#include "message.h" +#include "object_flags.h" +#include "llquaternion.h" + +// viewer includes +#include "llagent.h" +#include "llviewerwindow.h" +#include "lldrawable.h" +#include "llfloaterinspect.h" +#include "llfloaterproperties.h" +#include "llfloaterreporter.h" +#include "llfloatertools.h" +#include "llframetimer.h" +#include "llfocusmgr.h" +#include "llhudeffecttrail.h" +#include "llhudmanager.h" +#include "llinventorymodel.h" +#include "llmenugl.h" +#include "llmutelist.h" +#include "llstatusbar.h" +#include "llsurface.h" +#include "lltool.h" +#include "lltooldraganddrop.h" +#include "lltoolmgr.h" +#include "lltoolpie.h" +#include "llui.h" +#include "llviewercamera.h" +#include "llviewercontrol.h" +#include "llviewertexturelist.h" +#include "llviewermedia.h" +#include "llviewermediafocus.h" +#include "llviewermenu.h" +#include "llviewerobject.h" +#include "llviewerobjectlist.h" +#include "llviewerregion.h" +#include "llviewerstats.h" +#include "llvoavatar.h" +#include "llvovolume.h" +#include "pipeline.h" + +#include "llglheaders.h" +#include "hippogridmanager.h" + +// [RLVa:KB] +#include "rlvhandler.h" +// [/RLVa:KB] + +#include "llglheaders.h" + +LLViewerObject* getSelectedParentObject(LLViewerObject *object) ; +// +// Consts +// + +const S32 NUM_SELECTION_UNDO_ENTRIES = 200; +const F32 SILHOUETTE_UPDATE_THRESHOLD_SQUARED = 0.02f; +const S32 OWNERSHIP_COST_PER_OBJECT = 10; // Must be the same as economy_constants.price_object_claim in the database. +const S32 MAX_ACTION_QUEUE_SIZE = 20; +const S32 MAX_SILS_PER_FRAME = 50; +const S32 MAX_OBJECTS_PER_PACKET = 254; +const S32 TE_SELECT_MASK_ALL = 0xFFFFFFFF; + +// +// Globals +// + +BOOL gDebugSelectMgr = FALSE; + +BOOL gHideSelectedObjects = FALSE; +BOOL gAllowSelectAvatar = FALSE; + +BOOL LLSelectMgr::sRectSelectInclusive = TRUE; +BOOL LLSelectMgr::sRenderSelectionHighlights = TRUE; +BOOL LLSelectMgr::sRenderHiddenSelections = TRUE; +BOOL LLSelectMgr::sRenderLightRadius = FALSE; +F32 LLSelectMgr::sHighlightThickness = 0.f; +F32 LLSelectMgr::sHighlightUScale = 0.f; +F32 LLSelectMgr::sHighlightVScale = 0.f; +F32 LLSelectMgr::sHighlightAlpha = 0.f; +F32 LLSelectMgr::sHighlightAlphaTest = 0.f; +F32 LLSelectMgr::sHighlightUAnim = 0.f; +F32 LLSelectMgr::sHighlightVAnim = 0.f; +LLColor4 LLSelectMgr::sSilhouetteParentColor; +LLColor4 LLSelectMgr::sSilhouetteChildColor; +LLColor4 LLSelectMgr::sHighlightInspectColor; +LLColor4 LLSelectMgr::sHighlightParentColor; +LLColor4 LLSelectMgr::sHighlightChildColor; +LLColor4 LLSelectMgr::sContextSilhouetteColor; +std::set LLSelectMgr::sObjectPropertiesFamilyRequests; + +static LLObjectSelection *get_null_object_selection(); +template<> + const LLSafeHandle::NullFunc + LLSafeHandle::sNullFunc = get_null_object_selection; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// struct LLDeRezInfo +// +// Used to keep track of important derez info. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +struct LLDeRezInfo +{ + EDeRezDestination mDestination; + LLUUID mDestinationID; + LLDeRezInfo(EDeRezDestination dest, const LLUUID& dest_id) : + mDestination(dest), mDestinationID(dest_id) {} +}; + +// +// Imports +// + + +static LLPointer sNullSelection; + +// +// Functions +// + +void LLSelectMgr::cleanupGlobals() +{ + sNullSelection = NULL; + LLSelectMgr::getInstance()->clearSelections(); +} + +LLObjectSelection *get_null_object_selection() +{ + if (sNullSelection.isNull()) + { + sNullSelection = new LLObjectSelection; + } + return sNullSelection; +} + + +//----------------------------------------------------------------------------- +// LLSelectMgr() +//----------------------------------------------------------------------------- +LLSelectMgr::LLSelectMgr() +{ + mTEMode = FALSE; + mLastCameraPos.clearVec(); + + sHighlightThickness = gSavedSettings.getF32("SelectionHighlightThickness"); + sHighlightUScale = gSavedSettings.getF32("SelectionHighlightUScale"); + sHighlightVScale = gSavedSettings.getF32("SelectionHighlightVScale"); + sHighlightAlpha = gSavedSettings.getF32("SelectionHighlightAlpha"); + sHighlightAlphaTest = gSavedSettings.getF32("SelectionHighlightAlphaTest"); + sHighlightUAnim = gSavedSettings.getF32("SelectionHighlightUAnim"); + sHighlightVAnim = gSavedSettings.getF32("SelectionHighlightVAnim"); + + sSilhouetteParentColor = gColors.getColor("SilhouetteParentColor"); + sSilhouetteChildColor = gColors.getColor("SilhouetteChildColor"); + sHighlightParentColor = gColors.getColor("HighlightParentColor"); + sHighlightChildColor = gColors.getColor("HighlightChildColor"); + sHighlightInspectColor = gColors.getColor("HighlightInspectColor"); + sContextSilhouetteColor = gColors.getColor("ContextSilhouetteColor")*0.5f; + + sRenderLightRadius = gSavedSettings.getBOOL("RenderLightRadius"); + + mRenderSilhouettes = TRUE; + + mGridMode = GRID_MODE_WORLD; + gSavedSettings.setS32("GridMode", (S32)GRID_MODE_WORLD); + mGridValid = FALSE; + + mSelectedObjects = new LLObjectSelection(); + mHoverObjects = new LLObjectSelection(); + mHighlightedObjects = new LLObjectSelection(); + + mForceSelection = FALSE; + mShowSelection = FALSE; +} + + +//----------------------------------------------------------------------------- +// ~LLSelectMgr() +//----------------------------------------------------------------------------- +LLSelectMgr::~LLSelectMgr() +{ + clearSelections(); +} + +void LLSelectMgr::clearSelections() +{ + mHoverObjects->deleteAllNodes(); + mSelectedObjects->deleteAllNodes(); + mHighlightedObjects->deleteAllNodes(); + mRectSelectedObjects.clear(); + mGridObjects.deleteAllNodes(); +} + +void LLSelectMgr::update() +{ + mSelectedObjects->cleanupNodes(); +} + +void LLSelectMgr::updateEffects() +{ + //keep reference grid objects active + struct f : public LLSelectedObjectFunctor + { + virtual bool apply(LLViewerObject* object) + { + LLDrawable* drawable = object->mDrawable; + if (drawable) + { + gPipeline.markMoved(drawable); + } + return true; + } + } func; + mGridObjects.applyToObjects(&func); + + if (mEffectsTimer.getElapsedTimeF32() > 1.f) + { + mSelectedObjects->updateEffects(); + mEffectsTimer.reset(); + } +} + +void LLSelectMgr::overrideObjectUpdates() +{ + //override any position updates from simulator on objects being edited + struct f : public LLSelectedNodeFunctor + { + virtual bool apply(LLSelectNode* selectNode) + { + LLViewerObject* object = selectNode->getObject(); + if (object && object->permMove()) + { + if (!selectNode->mLastPositionLocal.isExactlyZero()) + { + object->setPosition(selectNode->mLastPositionLocal); + } + if (selectNode->mLastRotation != LLQuaternion()) + { + object->setRotation(selectNode->mLastRotation); + } + if (!selectNode->mLastScale.isExactlyZero()) + { + object->setScale(selectNode->mLastScale); + } + } + return true; + } + } func; + getSelection()->applyToNodes(&func); +} + +//----------------------------------------------------------------------------- +// Select just the object, not any other group members. +//----------------------------------------------------------------------------- +LLObjectSelectionHandle LLSelectMgr::selectObjectOnly(LLViewerObject* object, S32 face) +{ + llassert( object ); + + //remember primary object + mSelectedObjects->mPrimaryObject = object; + + // Don't add an object that is already in the list + if (object->isSelected() ) { + // make sure point at position is updated + updatePointAt(); + gEditMenuHandler = this; + return NULL; + } + + if (!canSelectObject(object)) + { + //make_ui_sound("UISndInvalidOp"); + return NULL; + } + + // llinfos << "Adding object to selected object list" << llendl; + + // Place it in the list and tag it. + // This will refresh dialogs. + addAsIndividual(object, face); + + // Stop the object from moving (this anticipates changes on the + // simulator in LLTask::userSelect) + // *FIX: shouldn't zero out these either + object->setVelocity(LLVector3::zero); + object->setAcceleration(LLVector3::zero); + //object->setAngularVelocity(LLVector3::zero); + object->resetRot(); + + // Always send to simulator, so you get a copy of the + // permissions structure back. + gMessageSystem->newMessageFast(_PREHASH_ObjectSelect); + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); + LLViewerRegion* regionp = object->getRegion(); + gMessageSystem->sendReliable( regionp->getHost()); + + updatePointAt(); + updateSelectionCenter(); + saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + + // have selection manager handle edit menu immediately after + // user selects an object + if (mSelectedObjects->getObjectCount()) + { + gEditMenuHandler = this; + } + + return mSelectedObjects; +} + +//----------------------------------------------------------------------------- +// Select the object, parents and children. +//----------------------------------------------------------------------------- +LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(LLViewerObject* obj, BOOL add_to_end) +{ + llassert( obj ); + + //remember primary object + mSelectedObjects->mPrimaryObject = obj; + + // This may be incorrect if things weren't family selected before... - djs 07/08/02 + // Don't add an object that is already in the list + if (obj->isSelected() ) + { + // make sure pointat position is updated + updatePointAt(); + gEditMenuHandler = this; + return NULL; + } + + if (!canSelectObject(obj)) + { + //make_ui_sound("UISndInvalidOp"); + return NULL; + } + + // Since we're selecting a family, start at the root, but + // don't include an avatar. + LLViewerObject* root = obj; + + while(!root->isAvatar() && root->getParent() && !root->isJointChild()) + { + LLViewerObject* parent = (LLViewerObject*)root->getParent(); + if (parent->isAvatar()) + { + break; + } + root = parent; + } + + // Collect all of the objects + std::vector objects; + + root->addThisAndNonJointChildren(objects); + addAsFamily(objects, add_to_end); + + updateSelectionCenter(); + saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + updatePointAt(); + + dialog_refresh_all(); + + // Always send to simulator, so you get a copy of the permissions + // structure back. + sendSelect(); + + // Stop the object from moving (this anticipates changes on the + // simulator in LLTask::userSelect) + root->setVelocity(LLVector3::zero); + root->setAcceleration(LLVector3::zero); + //root->setAngularVelocity(LLVector3::zero); + root->resetRot(); + + // leave component mode + if (gSavedSettings.getBOOL("EditLinkedParts")) + { + gSavedSettings.setBOOL("EditLinkedParts", FALSE); + promoteSelectionToRoot(); + } + + // have selection manager handle edit menu immediately after + // user selects an object + if (mSelectedObjects->getObjectCount()) + { + gEditMenuHandler = this; + } + + return mSelectedObjects; +} + +//----------------------------------------------------------------------------- +// Select the object, parents and children. +//----------------------------------------------------------------------------- +LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(const std::vector& object_list, + BOOL send_to_sim) +{ + // Collect all of the objects, children included + std::vector objects; + + //clear primary object (no primary object) + mSelectedObjects->mPrimaryObject = NULL; + + if (object_list.size() < 1) + { + return NULL; + } + + // NOTE -- we add the objects in REVERSE ORDER + // to preserve the order in the mSelectedObjects list + for (std::vector::const_reverse_iterator riter = object_list.rbegin(); + riter != object_list.rend(); ++riter) + { + LLViewerObject *object = *riter; + + llassert( object ); + + if (!canSelectObject(object)) continue; + + object->addThisAndNonJointChildren(objects); + addAsFamily(objects); + + // Stop the object from moving (this anticipates changes on the + // simulator in LLTask::userSelect) + object->setVelocity(LLVector3::zero); + object->setAcceleration(LLVector3::zero); + //object->setAngularVelocity(LLVector3::zero); + object->resetRot(); + } + + updateSelectionCenter(); + saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + updatePointAt(); + dialog_refresh_all(); + + // Almost always send to simulator, so you get a copy of the permissions + // structure back. + // JC: The one case where you don't want to do this is if you're selecting + // all the objects on a sim. + if (send_to_sim) + { + sendSelect(); + } + + // leave component mode + if (gSavedSettings.getBOOL("EditLinkedParts")) + { + gSavedSettings.setBOOL("EditLinkedParts", FALSE); + promoteSelectionToRoot(); + } + + // have selection manager handle edit menu immediately after + // user selects an object + if (mSelectedObjects->getObjectCount()) + { + gEditMenuHandler = this; + } + + return mSelectedObjects; +} + +// Use for when the simulator kills an object. This version also +// handles informing the current tool of the object's deletion. +// +// Caller needs to call dialog_refresh_all if necessary. +BOOL LLSelectMgr::removeObjectFromSelections(const LLUUID &id) +{ + BOOL object_found = FALSE; + LLTool *tool = NULL; + if (!gNoRender) + { + tool = LLToolMgr::getInstance()->getCurrentTool(); + + // It's possible that the tool is editing an object that is not selected + LLViewerObject* tool_editing_object = tool->getEditingObject(); + if( tool_editing_object && tool_editing_object->mID == id) + { + tool->stopEditing(); + object_found = TRUE; + } + } + + // Iterate through selected objects list and kill the object + if( !object_found ) + { + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); ) + { + LLObjectSelection::iterator curiter = iter++; + LLViewerObject* object = (*curiter)->getObject(); + if (object->mID == id) + { + if (tool) + { + tool->stopEditing(); + } + + // lose the selection, don't tell simulator, it knows + deselectObjectAndFamily(object, FALSE); + object_found = TRUE; + break; // must break here, may have removed multiple objects from list + } + else if (object->isAvatar() && object->getParent() && ((LLViewerObject*)object->getParent())->mID == id) + { + // It's possible the item being removed has an avatar sitting on it + // So remove the avatar that is sitting on the object. + deselectObjectAndFamily(object, FALSE); + break; // must break here, may have removed multiple objects from list + } + } + } + + return object_found; +} + +void LLSelectMgr::deselectObjectAndFamily(LLViewerObject* object, BOOL send_to_sim, BOOL include_entire_object) +{ + // bail if nothing selected or if object wasn't selected in the first place + if(!object) return; + if(!object->isSelected()) return; + + // Collect all of the objects, and remove them + std::vector objects; + + if (include_entire_object) + { + // Since we're selecting a family, start at the root, but + // don't include an avatar. + LLViewerObject* root = object; + + while(!root->isAvatar() && root->getParent() && !root->isJointChild()) + { + LLViewerObject* parent = (LLViewerObject*)root->getParent(); + if (parent->isAvatar()) + { + break; + } + root = parent; + } + + object = root; + } + else + { + object = (LLViewerObject*)object->getRoot(); + } + + object->addThisAndAllChildren(objects); + remove(objects); + + if (!send_to_sim) return; + + //----------------------------------------------------------- + // Inform simulator of deselection + //----------------------------------------------------------- + LLViewerRegion* regionp = object->getRegion(); + + BOOL start_new_message = TRUE; + S32 select_count = 0; + + LLMessageSystem* msg = gMessageSystem; + for (U32 i = 0; i < objects.size(); i++) + { + if (start_new_message) + { + msg->newMessageFast(_PREHASH_ObjectDeselect); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + select_count++; + start_new_message = FALSE; + } + + msg->nextBlockFast(_PREHASH_ObjectData); + msg->addU32Fast(_PREHASH_ObjectLocalID, (objects[i])->getLocalID()); + select_count++; + + // Zap the angular velocity, as the sim will set it to zero + objects[i]->setAngularVelocity( 0,0,0 ); + objects[i]->setVelocity( 0,0,0 ); + + if(msg->isSendFull(NULL) || select_count >= MAX_OBJECTS_PER_PACKET) + { + msg->sendReliable(regionp->getHost() ); + select_count = 0; + start_new_message = TRUE; + } + } + + if (!start_new_message) + { + msg->sendReliable(regionp->getHost() ); + } + + updatePointAt(); + updateSelectionCenter(); +} + +void LLSelectMgr::deselectObjectOnly(LLViewerObject* object, BOOL send_to_sim) +{ + // bail if nothing selected or if object wasn't selected in the first place + if (!object) return; + if (!object->isSelected() ) return; + + // Zap the angular velocity, as the sim will set it to zero + object->setAngularVelocity( 0,0,0 ); + object->setVelocity( 0,0,0 ); + + if (send_to_sim) + { + LLViewerRegion* region = object->getRegion(); + gMessageSystem->newMessageFast(_PREHASH_ObjectDeselect); + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); + gMessageSystem->sendReliable(region->getHost()); + } + + // This will refresh dialogs. + remove( object ); + + updatePointAt(); + updateSelectionCenter(); +} + + +//----------------------------------------------------------------------------- +// addAsFamily +//----------------------------------------------------------------------------- + +void LLSelectMgr::addAsFamily(std::vector& objects, BOOL add_to_end) +{ + for (std::vector::iterator iter = objects.begin(); + iter != objects.end(); ++iter) + { + LLViewerObject* objectp = *iter; + + // Can't select yourself + if (objectp->mID == gAgentID + && !gAllowSelectAvatar) + { + continue; + } + + if (!objectp->isSelected()) + { + LLSelectNode *nodep = new LLSelectNode(objectp, TRUE); + if (add_to_end) + { + mSelectedObjects->addNodeAtEnd(nodep); + } + else + { + mSelectedObjects->addNode(nodep); + } + objectp->setSelected(TRUE); + + if (objectp->getNumTEs() > 0) + { + nodep->selectAllTEs(TRUE); + } + else + { + // object has no faces, so don't mess with faces + } + } + else + { + // we want this object to be selected for real + // so clear transient flag + LLSelectNode* select_node = mSelectedObjects->findNode(objectp); + if (select_node) + { + select_node->setTransient(FALSE); + } + } + } + saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); +} + +//----------------------------------------------------------------------------- +// addAsIndividual() - a single object, face, etc +//----------------------------------------------------------------------------- +void LLSelectMgr::addAsIndividual(LLViewerObject *objectp, S32 face, BOOL undoable) +{ + // check to see if object is already in list + LLSelectNode *nodep = mSelectedObjects->findNode(objectp); + + // if not in list, add it + if (!nodep) + { + nodep = new LLSelectNode(objectp, TRUE); + mSelectedObjects->addNode(nodep); + llassert_always(nodep->getObject()); + } + else + { + // make this a full-fledged selection + nodep->setTransient(FALSE); + // Move it to the front of the list + mSelectedObjects->moveNodeToFront(nodep); + } + + // Make sure the object is tagged as selected + objectp->setSelected( TRUE ); + + // And make sure we don't consider it as part of a family + nodep->mIndividualSelection = TRUE; + + // Handle face selection + if (objectp->getNumTEs() <= 0) + { + // object has no faces, so don't do anything + } + else if (face == SELECT_ALL_TES) + { + nodep->selectAllTEs(TRUE); + } + else if (0 <= face && face < SELECT_MAX_TES) + { + nodep->selectTE(face, TRUE); + } + else + { + llerrs << "LLSelectMgr::add face " << face << " out-of-range" << llendl; + return; + } + + saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + updateSelectionCenter(); + dialog_refresh_all(); +} + + +LLObjectSelectionHandle LLSelectMgr::setHoverObject(LLViewerObject *objectp, S32 face) +{ + if (!objectp) + { + mHoverObjects->deleteAllNodes(); + return NULL; + } + + // Can't select yourself + if (objectp->mID == gAgentID) + { + mHoverObjects->deleteAllNodes(); + return NULL; + } + + // Can't select land + if (objectp->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH) + { + mHoverObjects->deleteAllNodes(); + return NULL; + } + + mHoverObjects->mPrimaryObject = objectp; + + objectp = objectp->getRootEdit(); + + // is the requested object the same as the existing hover object root? + // NOTE: there is only ever one linked set in mHoverObjects + if (mHoverObjects->getFirstRootObject() != objectp) + { + + // Collect all of the objects + std::vector objects; + objectp = objectp->getRootEdit(); + objectp->addThisAndNonJointChildren(objects); + + mHoverObjects->deleteAllNodes(); + for (std::vector::iterator iter = objects.begin(); + iter != objects.end(); ++iter) + { + LLViewerObject* cur_objectp = *iter; + LLSelectNode* nodep = new LLSelectNode(cur_objectp, FALSE); + nodep->selectTE(face, TRUE); + mHoverObjects->addNodeAtEnd(nodep); + } + + requestObjectPropertiesFamily(objectp); + } + + return mHoverObjects; +} + +LLSelectNode *LLSelectMgr::getHoverNode() +{ + return getHoverObjects()->getFirstRootNode(); +} + +void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp) +{ + if (!objectp) + { + return; + } + + if (objectp->getPCode() != LL_PCODE_VOLUME) + { + return; + } + + if ((gSavedSettings.getBOOL("SelectOwnedOnly") && !objectp->permYouOwner()) || + (gSavedSettings.getBOOL("SelectMovableOnly") && !objectp->permMove())) + { + // only select my own objects + return; + } + + mRectSelectedObjects.insert(objectp); +} + +void LLSelectMgr::highlightObjectAndFamily(LLViewerObject* objectp) +{ + if (!objectp) + { + return; + } + + LLViewerObject* root_obj = (LLViewerObject*)objectp->getRoot(); + + highlightObjectOnly(root_obj); + + LLViewerObject::const_child_list_t& child_list = root_obj->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); iter++) + { + LLViewerObject* child = *iter; + highlightObjectOnly(child); + } +} + +// Note that this ignores the "select owned only" flag +// It's also more efficient than calling the single-object version over and over. +void LLSelectMgr::highlightObjectAndFamily(const std::vector& objects) +{ + for (std::vector::const_iterator iter1 = objects.begin(); + iter1 != objects.end(); ++iter1) + { + LLViewerObject* object = *iter1; + + if (!object) + { + continue; + } + if (object->getPCode() != LL_PCODE_VOLUME) + { + continue; + } + + LLViewerObject* root = (LLViewerObject*)object->getRoot(); + mRectSelectedObjects.insert(root); + + LLViewerObject::const_child_list_t& child_list = root->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter2 = child_list.begin(); + iter2 != child_list.end(); iter2++) + { + LLViewerObject* child = *iter2; + mRectSelectedObjects.insert(child); + } + } +} + +void LLSelectMgr::unhighlightObjectOnly(LLViewerObject* objectp) +{ + if (!objectp || (objectp->getPCode() != LL_PCODE_VOLUME)) + { + return; + } + + mRectSelectedObjects.erase(objectp); +} + +void LLSelectMgr::unhighlightObjectAndFamily(LLViewerObject* objectp) +{ + if (!objectp) + { + return; + } + + LLViewerObject* root_obj = (LLViewerObject*)objectp->getRoot(); + + unhighlightObjectOnly(root_obj); + + LLViewerObject::const_child_list_t& child_list = root_obj->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); iter++) + { + LLViewerObject* child = *iter; + unhighlightObjectOnly(child); + } +} + + +void LLSelectMgr::unhighlightAll() +{ + mRectSelectedObjects.clear(); + mHighlightedObjects->deleteAllNodes(); +} + +LLObjectSelectionHandle LLSelectMgr::selectHighlightedObjects() +{ + if (!mHighlightedObjects->getNumNodes()) + { + return NULL; + } + + //clear primary object + mSelectedObjects->mPrimaryObject = NULL; + + for (LLObjectSelection::iterator iter = getHighlightedObjects()->begin(); + iter != getHighlightedObjects()->end(); ) + { + LLObjectSelection::iterator curiter = iter++; + + LLSelectNode *nodep = *curiter; + LLViewerObject* objectp = nodep->getObject(); + + if (!canSelectObject(objectp)) + { + continue; + } + + // already selected + if (objectp->isSelected()) + { + continue; + } + + LLSelectNode* new_nodep = new LLSelectNode(*nodep); + mSelectedObjects->addNode(new_nodep); + + // flag this object as selected + objectp->setSelected(TRUE); + + mSelectedObjects->mSelectType = getSelectTypeForObject(objectp); + + // request properties on root objects + if (objectp->isRootEdit()) + { + requestObjectPropertiesFamily(objectp); + } + } + + // pack up messages to let sim know these objects are selected + sendSelect(); + unhighlightAll(); + updateSelectionCenter(); + saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + updatePointAt(); + + if (mSelectedObjects->getObjectCount()) + { + gEditMenuHandler = this; + } + + return mSelectedObjects; +} + +void LLSelectMgr::deselectHighlightedObjects() +{ + BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); + for (std::set >::iterator iter = mRectSelectedObjects.begin(); + iter != mRectSelectedObjects.end(); iter++) + { + LLViewerObject *objectp = *iter; + if (!select_linked_set) + { + deselectObjectOnly(objectp); + } + else + { + LLViewerObject* root_object = (LLViewerObject*)objectp->getRoot(); + if (root_object->isSelected()) + { + deselectObjectAndFamily(root_object); + } + } + } + + unhighlightAll(); +} + +void LLSelectMgr::addGridObject(LLViewerObject* objectp) +{ + LLSelectNode* nodep = new LLSelectNode(objectp, FALSE); + mGridObjects.addNodeAtEnd(nodep); + + LLViewerObject::const_child_list_t& child_list = objectp->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); iter++) + { + LLViewerObject* child = *iter; + nodep = new LLSelectNode(child, FALSE); + mGridObjects.addNodeAtEnd(nodep); + } +} + +void LLSelectMgr::clearGridObjects() +{ + mGridObjects.deleteAllNodes(); +} + +void LLSelectMgr::setGridMode(EGridMode mode) +{ + mGridMode = mode; + gSavedSettings.setS32("GridMode", mode); + updateSelectionCenter(); + mGridValid = FALSE; +} + +void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &scale) +{ + mGridObjects.cleanupNodes(); + + LLViewerObject* first_grid_object = mGridObjects.getFirstObject(); + + if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) + { + //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); + LLBBox bbox = mSavedSelectionBBox; + mGridOrigin = mSavedSelectionBBox.getCenterAgent(); + mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; + + // DEV-12570 Just taking the saved selection box rotation prevents + // wild rotations of linked sets while in local grid mode + //if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull()) + { + mGridRotation = mSavedSelectionBBox.getRotation(); + } + /*else //set to the root object + { + mGridRotation = root->getRenderRotation(); + }*/ + } + else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) + { + mGridRotation = first_grid_object->getRenderRotation(); + LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition(); + + LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX); + LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX); + BOOL grid_changed = FALSE; + for (LLObjectSelection::iterator iter = mGridObjects.begin(); + iter != mGridObjects.end(); ++iter) + { + LLViewerObject* object = (*iter)->getObject(); + LLDrawable* drawable = object->mDrawable; + if (drawable) + { + const LLVector3* ext = drawable->getSpatialExtents(); + update_min_max(min_extents, max_extents, ext[0]); + update_min_max(min_extents, max_extents, ext[1]); + grid_changed = TRUE; + } + } + if (grid_changed) + { + mGridOrigin = lerp(min_extents, max_extents, 0.5f); + LLDrawable* drawable = first_grid_object->mDrawable; + if (drawable && drawable->isActive()) + { + mGridOrigin = mGridOrigin * first_grid_object->getRenderMatrix(); + } + mGridScale = (max_extents - min_extents) * 0.5f; + } + } + else // GRID_MODE_WORLD or just plain default + { + const BOOL non_root_ok = TRUE; + LLViewerObject* first_object = mSelectedObjects->getFirstRootObject(non_root_ok); + + mGridOrigin.clearVec(); + mGridRotation.loadIdentity(); + + mSelectedObjects->mSelectType = getSelectTypeForObject( first_object ); + + switch (mSelectedObjects->mSelectType) + { + case SELECT_TYPE_ATTACHMENT: + if (first_object && first_object->getRootEdit()->mDrawable.notNull()) + { + // this means this object *has* to be an attachment + LLXform* attachment_point_xform = first_object->getRootEdit()->mDrawable->mXform.getParent(); + if(attachment_point_xform) { + mGridOrigin = attachment_point_xform->getWorldPosition(); + mGridRotation = attachment_point_xform->getWorldRotation(); + } + mGridScale = LLVector3(1.f, 1.f, 1.f) * gSavedSettings.getF32("GridResolution"); + } + break; + case SELECT_TYPE_HUD: + // use HUD-scaled grid + mGridScale = LLVector3(0.25f, 0.25f, 0.25f); + break; + case SELECT_TYPE_WORLD: + mGridScale = LLVector3(1.f, 1.f, 1.f) * gSavedSettings.getF32("GridResolution"); + break; + } + } + llassert(mGridOrigin.isFinite()); + + origin = mGridOrigin; + rotation = mGridRotation; + scale = mGridScale; + mGridValid = TRUE; +} + +//----------------------------------------------------------------------------- +// remove() - an array of objects +//----------------------------------------------------------------------------- + +void LLSelectMgr::remove(std::vector& objects) +{ + for (std::vector::iterator iter = objects.begin(); + iter != objects.end(); ++iter) + { + LLViewerObject* objectp = *iter; + LLSelectNode* nodep = mSelectedObjects->findNode(objectp); + if (nodep) + { + objectp->setSelected(FALSE); + mSelectedObjects->removeNode(nodep); + nodep = NULL; + } + } + updateSelectionCenter(); + dialog_refresh_all(); +} + + +//----------------------------------------------------------------------------- +// remove() - a single object +//----------------------------------------------------------------------------- +void LLSelectMgr::remove(LLViewerObject *objectp, S32 te, BOOL undoable) +{ + // get object node (and verify it is in the selected list) + LLSelectNode *nodep = mSelectedObjects->findNode(objectp); + if (!nodep) + { + return; + } + + // if face = all, remove object from list + if ((objectp->getNumTEs() <= 0) || (te == SELECT_ALL_TES)) + { + // Remove all faces (or the object doesn't have faces) so remove the node + mSelectedObjects->removeNode(nodep); + nodep = NULL; + objectp->setSelected( FALSE ); + } + else if (0 <= te && te < SELECT_MAX_TES) + { + // ...valid face, check to see if it was on + if (nodep->isTESelected(te)) + { + nodep->selectTE(te, FALSE); + } + else + { + llerrs << "LLSelectMgr::remove - tried to remove TE " << te << " that wasn't selected" << llendl; + return; + } + + // ...check to see if this operation turned off all faces + BOOL found = FALSE; + for (S32 i = 0; i < nodep->getObject()->getNumTEs(); i++) + { + found = found || nodep->isTESelected(i); + } + + // ...all faces now turned off, so remove + if (!found) + { + mSelectedObjects->removeNode(nodep); + nodep = NULL; + objectp->setSelected( FALSE ); + // *FIXME: Doesn't update simulator that object is no longer selected + } + } + else + { + // ...out of range face + llerrs << "LLSelectMgr::remove - TE " << te << " out of range" << llendl; + } + + updateSelectionCenter(); + dialog_refresh_all(); +} + + +//----------------------------------------------------------------------------- +// removeAll() +//----------------------------------------------------------------------------- +void LLSelectMgr::removeAll() +{ + for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); + iter != mSelectedObjects->end(); iter++ ) + { + LLViewerObject *objectp = (*iter)->getObject(); + objectp->setSelected( FALSE ); + } + + mSelectedObjects->deleteAllNodes(); + + updateSelectionCenter(); + dialog_refresh_all(); +} + +//----------------------------------------------------------------------------- +// promoteSelectionToRoot() +//----------------------------------------------------------------------------- +void LLSelectMgr::promoteSelectionToRoot() +{ + std::set selection_set; + + BOOL selection_changed = FALSE; + + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); ) + { + LLObjectSelection::iterator curiter = iter++; + LLSelectNode* nodep = *curiter; + LLViewerObject* object = nodep->getObject(); + + if (nodep->mIndividualSelection) + { + selection_changed = TRUE; + } + + LLViewerObject* parentp = object; + while(parentp->getParent() && !(parentp->isRootEdit() || parentp->isJointChild())) + { + parentp = (LLViewerObject*)parentp->getParent(); + } + + selection_set.insert(parentp); + } + + if (selection_changed) + { + deselectAll(); + + std::set::iterator set_iter; + for (set_iter = selection_set.begin(); set_iter != selection_set.end(); ++set_iter) + { + selectObjectAndFamily(*set_iter); + } + } +} + +//----------------------------------------------------------------------------- +// demoteSelectionToIndividuals() +//----------------------------------------------------------------------------- +void LLSelectMgr::demoteSelectionToIndividuals() +{ + std::vector objects; + + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++) + { + LLViewerObject* object = (*iter)->getObject(); + object->addThisAndNonJointChildren(objects); + } + + if (!objects.empty()) + { + deselectAll(); + for (std::vector::iterator iter = objects.begin(); + iter != objects.end(); ++iter) + { + LLViewerObject* objectp = *iter; + selectObjectOnly(objectp); + } + } +} + +//----------------------------------------------------------------------------- +// dump() +//----------------------------------------------------------------------------- +void LLSelectMgr::dump() +{ + llinfos << "Selection Manager: " << mSelectedObjects->getNumNodes() << " items" << llendl; + + llinfos << "TE mode " << mTEMode << llendl; + + S32 count = 0; + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); iter++ ) + { + LLViewerObject* objectp = (*iter)->getObject(); + llinfos << "Object " << count << " type " << LLPrimitive::pCodeToString(objectp->getPCode()) << llendl; + llinfos << " hasLSL " << objectp->flagScripted() << llendl; + llinfos << " hasTouch " << objectp->flagHandleTouch() << llendl; + llinfos << " hasMoney " << objectp->flagTakesMoney() << llendl; + llinfos << " getposition " << objectp->getPosition() << llendl; + llinfos << " getpositionAgent " << objectp->getPositionAgent() << llendl; + llinfos << " getpositionRegion " << objectp->getPositionRegion() << llendl; + llinfos << " getpositionGlobal " << objectp->getPositionGlobal() << llendl; + LLDrawable* drawablep = objectp->mDrawable; + llinfos << " " << (drawablep&& drawablep->isVisible() ? "visible" : "invisible") << llendl; + llinfos << " " << (drawablep&& drawablep->isState(LLDrawable::FORCE_INVISIBLE) ? "force_invisible" : "") << llendl; + count++; + } + + // Face iterator + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); iter++ ) + { + LLSelectNode* node = *iter; + LLViewerObject* objectp = node->getObject(); + if (!objectp) + continue; + for (S32 te = 0; te < objectp->getNumTEs(); ++te ) + { + if (node->isTESelected(te)) + { + llinfos << "Object " << objectp << " te " << te << llendl; + } + } + } + + llinfos << mHighlightedObjects->getNumNodes() << " objects currently highlighted." << llendl; + + llinfos << "Center global " << mSelectionCenterGlobal << llendl; +} + +//----------------------------------------------------------------------------- +// cleanup() +//----------------------------------------------------------------------------- +void LLSelectMgr::cleanup() +{ + mSilhouetteImagep = NULL; +} + + +//--------------------------------------------------------------------------- +// Manipulate properties of selected objects +//--------------------------------------------------------------------------- + +struct LLSelectMgrSendFunctor : public LLSelectedObjectFunctor +{ + virtual bool apply(LLViewerObject* object) + { + if (object->permModify()) + { + object->sendTEUpdate(); + } + return true; + } +}; + +//----------------------------------------------------------------------------- +// selectionSetImage() +//----------------------------------------------------------------------------- +// *TODO: re-arch texture applying out of lltooldraganddrop +void LLSelectMgr::selectionSetImage(const LLUUID& imageid) +{ + // First for (no copy) textures and multiple object selection + LLViewerInventoryItem* item = gInventory.getItem(imageid); + // fffff + /* + // + if(item + && !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID()) + && (mSelectedObjects->getNumNodes() > 1) ) + { + llwarns << "Attempted to apply no-copy texture to multiple objects" + << llendl; + return; + } + // + */ + // + + struct f : public LLSelectedTEFunctor + { + LLViewerInventoryItem* mItem; + LLUUID mImageID; + f(LLViewerInventoryItem* item, const LLUUID& id) : mItem(item), mImageID(id) {} + bool apply(LLViewerObject* objectp, S32 te) + { + if (mItem) + { + if (te == -1) // all faces + { + LLToolDragAndDrop::dropTextureAllFaces(objectp, + mItem, + LLToolDragAndDrop::SOURCE_AGENT, + LLUUID::null); + } + else // one face + { + LLToolDragAndDrop::dropTextureOneFace(objectp, + te, + mItem, + LLToolDragAndDrop::SOURCE_AGENT, + LLUUID::null); + } + } + else // not an inventory item + { + // Texture picker defaults aren't inventory items + // * Don't need to worry about permissions for them + // * Can just apply the texture and be done with it. + objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); + } + return true; + } + } setfunc(item, imageid); + getSelection()->applyToTEs(&setfunc); + + struct g : public LLSelectedObjectFunctor + { + LLViewerInventoryItem* mItem; + g(LLViewerInventoryItem* item) : mItem(item) {} + virtual bool apply(LLViewerObject* object) + { + if (!mItem) + { + object->sendTEUpdate(); + // 1 particle effect per object + // + if(!gSavedSettings.getBOOL("DisablePointAtAndBeam")) + { + // + LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); + effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setTargetObject(object); + effectp->setDuration(LL_HUD_DUR_SHORT); + effectp->setColor(LLColor4U(gAgent.getEffectColor())); + // + } + // + } + return true; + } + } sendfunc(item); + getSelection()->applyToObjects(&sendfunc); +} + +//----------------------------------------------------------------------------- +// selectionSetColor() +//----------------------------------------------------------------------------- +void LLSelectMgr::selectionSetColor(const LLColor4 &color) +{ + struct f : public LLSelectedTEFunctor + { + LLColor4 mColor; + f(const LLColor4& c) : mColor(c) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + object->setTEColor(te, mColor); + } + return true; + } + } setfunc(color); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + +//----------------------------------------------------------------------------- +// selectionSetColorOnly() +//----------------------------------------------------------------------------- +void LLSelectMgr::selectionSetColorOnly(const LLColor4 &color) +{ + struct f : public LLSelectedTEFunctor + { + LLColor4 mColor; + f(const LLColor4& c) : mColor(c) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + LLColor4 prev_color = object->getTE(te)->getColor(); + mColor.mV[VALPHA] = prev_color.mV[VALPHA]; + // update viewer side color in anticipation of update from simulator + object->setTEColor(te, mColor); + } + return true; + } + } setfunc(color); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + +//----------------------------------------------------------------------------- +// selectionSetAlphaOnly() +//----------------------------------------------------------------------------- +void LLSelectMgr::selectionSetAlphaOnly(const F32 alpha) +{ + struct f : public LLSelectedTEFunctor + { + F32 mAlpha; + f(const F32& a) : mAlpha(a) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + LLColor4 prev_color = object->getTE(te)->getColor(); + prev_color.mV[VALPHA] = mAlpha; + // update viewer side color in anticipation of update from simulator + object->setTEColor(te, prev_color); + } + return true; + } + } setfunc(alpha); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + +void LLSelectMgr::selectionRevertColors() +{ + struct f : public LLSelectedTEFunctor + { + LLObjectSelectionHandle mSelectedObjects; + f(LLObjectSelectionHandle sel) : mSelectedObjects(sel) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + LLSelectNode* nodep = mSelectedObjects->findNode(object); + if (nodep && te < (S32)nodep->mSavedColors.size()) + { + LLColor4 color = nodep->mSavedColors[te]; + // update viewer side color in anticipation of update from simulator + object->setTEColor(te, color); + } + } + return true; + } + } setfunc(mSelectedObjects); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + +BOOL LLSelectMgr::selectionRevertTextures() +{ + struct f : public LLSelectedTEFunctor + { + LLObjectSelectionHandle mSelectedObjects; + f(LLObjectSelectionHandle sel) : mSelectedObjects(sel) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + LLSelectNode* nodep = mSelectedObjects->findNode(object); + if (nodep && te < (S32)nodep->mSavedTextures.size()) + { + LLUUID id = nodep->mSavedTextures[te]; + // update textures on viewer side + if (id.isNull()) + { + // this was probably a no-copy texture, leave image as-is + return FALSE; + } + else + { + object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); + } + } + } + return true; + } + } setfunc(mSelectedObjects); + BOOL revert_successful = getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); + + return revert_successful; +} + +void LLSelectMgr::selectionSetBumpmap(U8 bumpmap) +{ + struct f : public LLSelectedTEFunctor + { + U8 mBump; + f(const U8& b) : mBump(b) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + // update viewer side color in anticipation of update from simulator + object->setTEBumpmap(te, mBump); + } + return true; + } + } setfunc(bumpmap); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + +void LLSelectMgr::selectionSetTexGen(U8 texgen) +{ + struct f : public LLSelectedTEFunctor + { + U8 mTexgen; + f(const U8& t) : mTexgen(t) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + // update viewer side color in anticipation of update from simulator + object->setTETexGen(te, mTexgen); + } + return true; + } + } setfunc(texgen); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + + +void LLSelectMgr::selectionSetShiny(U8 shiny) +{ + struct f : public LLSelectedTEFunctor + { + U8 mShiny; + f(const U8& t) : mShiny(t) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + // update viewer side color in anticipation of update from simulator + object->setTEShiny(te, mShiny); + } + return true; + } + } setfunc(shiny); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + +void LLSelectMgr::selectionSetFullbright(U8 fullbright) +{ + struct f : public LLSelectedTEFunctor + { + U8 mFullbright; + f(const U8& t) : mFullbright(t) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + // update viewer side color in anticipation of update from simulator + object->setTEFullbright(te, mFullbright); + } + return true; + } + } setfunc(fullbright); + getSelection()->applyToTEs(&setfunc); + + struct g : public LLSelectedObjectFunctor + { + U8 mFullbright; + g(const U8& t) : mFullbright(t) {} + virtual bool apply(LLViewerObject* object) + { + if (object->permModify()) + { + object->sendTEUpdate(); + if (mFullbright) + { + U8 material = object->getMaterial(); + U8 mcode = material & LL_MCODE_MASK; + if (mcode == LL_MCODE_LIGHT) + { + mcode = LL_MCODE_GLASS; + material = (material & ~LL_MCODE_MASK) | mcode; + object->setMaterial(material); + object->sendMaterialUpdate(); + } + } + } + return true; + } + } sendfunc(fullbright); + getSelection()->applyToObjects(&sendfunc); +} + +void LLSelectMgr::selectionSetMediaTypeAndURL(U8 media_type, const std::string& media_url) +{ + U8 media_flags = LLTextureEntry::MF_NONE; + if (media_type == LLViewerObject::MEDIA_TYPE_WEB_PAGE) + { + media_flags = LLTextureEntry::MF_HAS_MEDIA; + } + + struct f : public LLSelectedTEFunctor + { + U8 mMediaFlags; + f(const U8& t) : mMediaFlags(t) {} + bool apply(LLViewerObject* object, S32 te) + { + if (object->permModify()) + { + // update viewer side color in anticipation of update from simulator + object->setTEMediaFlags(te, mMediaFlags); + } + return true; + } + } setfunc(media_flags); + getSelection()->applyToTEs(&setfunc); + + struct g : public LLSelectedObjectFunctor + { + U8 media_type; + const std::string& media_url ; + g(U8 a, const std::string& b) : media_type(a), media_url(b) {} + virtual bool apply(LLViewerObject* object) + { + if (object->permModify()) + { + object->sendTEUpdate(); + object->setMediaType(media_type); + object->setMediaURL(media_url); + } + return true; + } + } sendfunc(media_type, media_url); + getSelection()->applyToObjects(&sendfunc); +} + +void LLSelectMgr::selectionSetGlow(F32 glow) +{ + struct f1 : public LLSelectedTEFunctor + { + F32 mGlow; + f1(F32 glow) : mGlow(glow) {}; + bool apply(LLViewerObject* object, S32 face) + { + if (object->permModify()) + { + // update viewer side color in anticipation of update from simulator + object->setTEGlow(face, mGlow); + } + return true; + } + } func1(glow); + mSelectedObjects->applyToTEs( &func1 ); + + struct f2 : public LLSelectedObjectFunctor + { + virtual bool apply(LLViewerObject* object) + { + if (object->permModify()) + { + object->sendTEUpdate(); + } + return true; + } + } func2; + mSelectedObjects->applyToObjects( &func2 ); +} + + +//----------------------------------------------------------------------------- +// findObjectPermissions() +//----------------------------------------------------------------------------- +LLPermissions* LLSelectMgr::findObjectPermissions(const LLViewerObject* object) +{ + for (LLObjectSelection::valid_iterator iter = getSelection()->valid_begin(); + iter != getSelection()->valid_end(); iter++ ) + { + LLSelectNode* nodep = *iter; + if (nodep->getObject() == object) + { + return nodep->mPermissions; + } + } + + return NULL; +} + + +//----------------------------------------------------------------------------- +// selectionGetGlow() +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectionGetGlow(F32 *glow) +{ + BOOL identical; + F32 lglow = 0.f; + struct f1 : public LLSelectedTEGetFunctor + { + F32 get(LLViewerObject* object, S32 face) + { + return object->getTE(face)->getGlow(); + } + } func; + identical = mSelectedObjects->getSelectedTEValue( &func, lglow ); + + *glow = lglow; + return identical; +} + +//----------------------------------------------------------------------------- +// selectionSetMaterial() +//----------------------------------------------------------------------------- +void LLSelectMgr::selectionSetMaterial(U8 material) +{ + struct f : public LLSelectedObjectFunctor + { + U8 mMaterial; + f(const U8& t) : mMaterial(t) {} + virtual bool apply(LLViewerObject* object) + { + if (object->permModify()) + { + U8 cur_material = object->getMaterial(); + U8 material = mMaterial | (cur_material & ~LL_MCODE_MASK); + object->setMaterial(material); + object->sendMaterialUpdate(); + } + return true; + } + } sendfunc(material); + getSelection()->applyToObjects(&sendfunc); +} + +// TRUE if all selected objects have this PCode +BOOL LLSelectMgr::selectionAllPCode(LLPCode code) +{ + struct f : public LLSelectedObjectFunctor + { + LLPCode mCode; + f(const LLPCode& t) : mCode(t) {} + virtual bool apply(LLViewerObject* object) + { + if (object->getPCode() != mCode) + { + return FALSE; + } + return true; + } + } func(code); + BOOL res = getSelection()->applyToObjects(&func); + return res; +} + +bool LLSelectMgr::selectionGetIncludeInSearch(bool* include_in_search_out) +{ + LLViewerObject *object = mSelectedObjects->getFirstRootObject(); + if (!object) return FALSE; + + bool include_in_search = object->getIncludeInSearch(); + + bool identical = true; + + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++) + { + LLViewerObject* object = (*iter)->getObject(); + + if ( include_in_search != object->getIncludeInSearch()) + { + identical = false; + break; + } + } + + *include_in_search_out = include_in_search; + return identical; +} + +void LLSelectMgr::selectionSetIncludeInSearch(bool include_in_search) +{ + LLViewerObject* object = NULL; + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++) + { + object = (*iter)->getObject(); + object->setIncludeInSearch(include_in_search); + } + sendListToRegions( + "ObjectIncludeInSearch", + packAgentAndSessionID, + packObjectIncludeInSearch, + &include_in_search, + SEND_ONLY_ROOTS); +} + +BOOL LLSelectMgr::selectionGetClickAction(U8 *out_action) +{ + LLViewerObject *object = mSelectedObjects->getFirstObject(); + if (!object) + { + return FALSE; + } + + U8 action = object->getClickAction(); + *out_action = action; + + struct f : public LLSelectedObjectFunctor + { + U8 mAction; + f(const U8& t) : mAction(t) {} + virtual bool apply(LLViewerObject* object) + { + if ( mAction != object->getClickAction()) + { + return false; + } + return true; + } + } func(action); + BOOL res = getSelection()->applyToObjects(&func); + return res; +} + +void LLSelectMgr::selectionSetClickAction(U8 action) +{ + struct f : public LLSelectedObjectFunctor + { + U8 mAction; + f(const U8& t) : mAction(t) {} + virtual bool apply(LLViewerObject* object) + { + object->setClickAction(mAction); + return true; + } + } func(action); + getSelection()->applyToObjects(&func); + + sendListToRegions("ObjectClickAction", + packAgentAndSessionID, + packObjectClickAction, + &action, + SEND_INDIVIDUALS); +} + + +//----------------------------------------------------------------------------- +// godlike requests +//----------------------------------------------------------------------------- + +typedef std::pair godlike_request_t; + +void LLSelectMgr::sendGodlikeRequest(const std::string& request, const std::string& param) +{ + // If the agent is neither godlike nor an estate owner, the server + // will reject the request. + std::string message_type; + if (gAgent.isGodlike()) + { + message_type = "GodlikeMessage"; + } + else + { + message_type = "EstateOwnerMessage"; + } + + godlike_request_t data(request, param); + if(!mSelectedObjects->getRootObjectCount()) + { + LLMessageSystem* msg = gMessageSystem; + msg->newMessage(message_type.c_str()); + LLSelectMgr::packGodlikeHead(&data); + gAgent.sendReliableMessage(); + } + else + { + sendListToRegions(message_type, packGodlikeHead, packObjectIDAsParam, &data, SEND_ONLY_ROOTS); + } +} + +void LLSelectMgr::packGodlikeHead(void* user_data) +{ + LLMessageSystem* msg = gMessageSystem; + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addUUID("TransactionID", LLUUID::null); + godlike_request_t* data = (godlike_request_t*)user_data; + msg->nextBlock("MethodData"); + msg->addString("Method", data->first); + msg->addUUID("Invoice", LLUUID::null); + + // The parameters used to be restricted to either string or + // integer. This mimics that behavior under the new 'string-only' + // parameter list by not packing a string if there wasn't one + // specified. The object ids will be packed in the + // packObjectIDAsParam() method. + if(data->second.size() > 0) + { + msg->nextBlock("ParamList"); + msg->addString("Parameter", data->second); + } +} + +// static +void LLSelectMgr::packObjectIDAsParam(LLSelectNode* node, void *) +{ + std::string buf = llformat("%u", node->getObject()->getLocalID()); + gMessageSystem->nextBlock("ParamList"); + gMessageSystem->addString("Parameter", buf); +} + +//----------------------------------------------------------------------------- +// Rotation options +//----------------------------------------------------------------------------- +void LLSelectMgr::selectionResetRotation() +{ + struct f : public LLSelectedObjectFunctor + { + virtual bool apply(LLViewerObject* object) + { + LLQuaternion identity(0.f, 0.f, 0.f, 1.f); + object->setRotation(identity); + if (object->mDrawable.notNull()) + { + gPipeline.markMoved(object->mDrawable, TRUE); + } + object->sendRotationUpdate(); + return true; + } + } func; + getSelection()->applyToRootObjects(&func); +} + +void LLSelectMgr::selectionRotateAroundZ(F32 degrees) +{ + LLQuaternion rot( degrees * DEG_TO_RAD, LLVector3(0,0,1) ); + struct f : public LLSelectedObjectFunctor + { + LLQuaternion mRot; + f(const LLQuaternion& rot) : mRot(rot) {} + virtual bool apply(LLViewerObject* object) + { + object->setRotation( object->getRotationEdit() * mRot ); + if (object->mDrawable.notNull()) + { + gPipeline.markMoved(object->mDrawable, TRUE); + } + object->sendRotationUpdate(); + return true; + } + } func(rot); + getSelection()->applyToRootObjects(&func); +} + + +//----------------------------------------------------------------------------- +// selectionTexScaleAutofit() +//----------------------------------------------------------------------------- +void LLSelectMgr::selectionTexScaleAutofit(F32 repeats_per_meter) +{ + struct f : public LLSelectedTEFunctor + { + F32 mRepeatsPerMeter; + f(const F32& t) : mRepeatsPerMeter(t) {} + bool apply(LLViewerObject* object, S32 te) + { + + if (object->permModify()) + { + // Compute S,T to axis mapping + U32 s_axis, t_axis; + if (!LLPrimitive::getTESTAxes(te, &s_axis, &t_axis)) + { + return TRUE; + } + + F32 new_s = object->getScale().mV[s_axis] * mRepeatsPerMeter; + F32 new_t = object->getScale().mV[t_axis] * mRepeatsPerMeter; + + object->setTEScale(te, new_s, new_t); + } + return true; + } + } setfunc(repeats_per_meter); + getSelection()->applyToTEs(&setfunc); + + LLSelectMgrSendFunctor sendfunc; + getSelection()->applyToObjects(&sendfunc); +} + + + +// Called at the end of a scale operation, this adjusts the textures to attempt to +// maintain a constant repeats per meter. +// BUG: Only works for flex boxes. +//----------------------------------------------------------------------------- +// adjustTexturesByScale() +//----------------------------------------------------------------------------- +void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch) +{ + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); iter++) + { + LLSelectNode* selectNode = *iter; + LLViewerObject* object = selectNode->getObject(); + + if (!object) + { + continue; + } + + if (!object->permModify()) + { + continue; + } + + if (object->getNumTEs() == 0) + { + continue; + } + + BOOL send = FALSE; + + for (U8 te_num = 0; te_num < object->getNumTEs(); te_num++) + { + const LLTextureEntry* tep = object->getTE(te_num); + + BOOL planar = tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR; + if (planar == stretch) + { + // Figure out how S,T changed with scale operation + U32 s_axis, t_axis; + if (!LLPrimitive::getTESTAxes(te_num, &s_axis, &t_axis)) + { + continue; + } + + LLVector3 scale_ratio = selectNode->mTextureScaleRatios[te_num]; + LLVector3 object_scale = object->getScale(); + + // Apply new scale to face + if (planar) + { + object->setTEScale(te_num, 1.f/object_scale.mV[s_axis]*scale_ratio.mV[s_axis], + 1.f/object_scale.mV[t_axis]*scale_ratio.mV[t_axis]); + } + else + { + object->setTEScale(te_num, scale_ratio.mV[s_axis]*object_scale.mV[s_axis], + scale_ratio.mV[t_axis]*object_scale.mV[t_axis]); + } + send = send_to_sim; + } + } + + if (send) + { + object->sendTEUpdate(); + } + } +} + +//----------------------------------------------------------------------------- +// selectGetAllRootsValid() +// Returns TRUE if the viewer has information on all selected objects +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetAllRootsValid() +{ + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); ++iter ) + { + LLSelectNode* node = *iter; + if( !node->mValid ) + { + return FALSE; + } + } + return TRUE; +} + + +//----------------------------------------------------------------------------- +// selectGetAllValid() +// Returns TRUE if the viewer has information on all selected objects +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetAllValid() +{ + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); ++iter ) + { + LLSelectNode* node = *iter; + if( !node->mValid ) + { + return FALSE; + } + } + return TRUE; +} + + +//----------------------------------------------------------------------------- +// selectGetModify() - return TRUE if current agent can modify all +// selected objects. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetModify() +{ + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); iter++ ) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if( !object || !node->mValid ) + { + return FALSE; + } + if( !object->permModify() ) + { + return FALSE; + } + } + return TRUE; +} + +//----------------------------------------------------------------------------- +// selectGetRootsModify() - return TRUE if current agent can modify all +// selected root objects. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetRootsModify() +{ + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if( !node->mValid ) + { + return FALSE; + } + if( !object->permModify() ) + { + return FALSE; + } + } + + return TRUE; +} + + +//----------------------------------------------------------------------------- +// selectGetRootsTransfer() - return TRUE if current agent can transfer all +// selected root objects. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetRootsTransfer() +{ + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if( !node->mValid ) + { + return FALSE; + } + if(!object->permTransfer()) + { + return FALSE; + } + } + return TRUE; +} + +//----------------------------------------------------------------------------- +// selectGetRootsCopy() - return TRUE if current agent can copy all +// selected root objects. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetRootsCopy() +{ + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if( !node->mValid ) + { + return FALSE; + } + if(!object->permCopy()) + { + return FALSE; + } + } + return TRUE; +} + +//----------------------------------------------------------------------------- +// selectGetCreator() +// Creator information only applies to root objects. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetCreator(LLUUID& result_id, std::string& name) +{ + BOOL identical = TRUE; + BOOL first = TRUE; + LLUUID first_id; + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + first_id = node->mPermissions->getCreator(); + first = FALSE; + } + else + { + if ( !(first_id == node->mPermissions->getCreator() ) ) + { + identical = FALSE; + break; + } + } + } + if (first_id.isNull()) + { + return FALSE; + } + + result_id = first_id; + + if (identical) + { + gCacheName->getFullName(first_id, name); + } + else + { + name.assign( "(multiple)" ); + } + + return identical; +} + + +//----------------------------------------------------------------------------- +// selectGetOwner() +// Owner information only applies to roots. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetOwner(LLUUID& result_id, std::string& name) +{ + BOOL identical = TRUE; + BOOL first = TRUE; + BOOL first_group_owned = FALSE; + LLUUID first_id; + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + node->mPermissions->getOwnership(first_id, first_group_owned); + first = FALSE; + } + else + { + LLUUID owner_id; + BOOL is_group_owned = FALSE; + if (!(node->mPermissions->getOwnership(owner_id, is_group_owned)) + || owner_id != first_id || is_group_owned != first_group_owned) + { + identical = FALSE; + break; + } + } + } + if (first_id.isNull()) + { + return FALSE; + } + + result_id = first_id; + + if (identical) + { + BOOL public_owner = (first_id.isNull() && !first_group_owned); + if (first_group_owned) + { + name.assign( "(Group Owned)"); + } + else if(!public_owner) + { + gCacheName->getFullName(first_id, name); + } + else + { + name.assign("Public"); + } + } + else + { + name.assign( "(multiple)" ); + } + + return identical; +} + + +//----------------------------------------------------------------------------- +// selectGetLastOwner() +// Owner information only applies to roots. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetLastOwner(LLUUID& result_id, std::string& name) +{ + BOOL identical = TRUE; + BOOL first = TRUE; + LLUUID first_id; + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + first_id = node->mPermissions->getLastOwner(); + first = FALSE; + } + else + { + if ( !(first_id == node->mPermissions->getLastOwner() ) ) + { + identical = FALSE; + break; + } + } + } + if (first_id.isNull()) + { + return FALSE; + } + + result_id = first_id; + + if (identical) + { + BOOL public_owner = (first_id.isNull()); + if(!public_owner) + { + gCacheName->getFullName(first_id, name); + } + else + { + name.assign("Public or Group"); + } + } + else + { + name.assign( "" ); + } + + return identical; +} + + +//----------------------------------------------------------------------------- +// selectGetGroup() +// Group information only applies to roots. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id) +{ + BOOL identical = TRUE; + BOOL first = TRUE; + LLUUID first_id; + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + first_id = node->mPermissions->getGroup(); + first = FALSE; + } + else + { + if ( !(first_id == node->mPermissions->getGroup() ) ) + { + identical = FALSE; + break; + } + } + } + + result_id = first_id; + + return identical; +} + +//----------------------------------------------------------------------------- +// selectIsGroupOwned() +// Only operates on root nodes. +// Returns TRUE if all have valid data and they are all group owned. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectIsGroupOwned() +{ + BOOL found_one = FALSE; + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + found_one = TRUE; + if (!node->mPermissions->isGroupOwned()) + { + return FALSE; + } + } + return found_one ? TRUE : FALSE; +} + +//----------------------------------------------------------------------------- +// selectGetPerm() +// Only operates on root nodes. +// Returns TRUE if all have valid data. +// mask_on has bits set to TRUE where all permissions are TRUE +// mask_off has bits set to TRUE where all permissions are FALSE +// if a bit is off both in mask_on and mask_off, the values differ within +// the selection. +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::selectGetPerm(U8 which_perm, U32* mask_on, U32* mask_off) +{ + U32 mask; + U32 mask_and = 0xffffffff; + U32 mask_or = 0x00000000; + BOOL all_valid = FALSE; + + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++) + { + LLSelectNode* node = *iter; + + if (!node->mValid) + { + all_valid = FALSE; + break; + } + + all_valid = TRUE; + + switch( which_perm ) + { + case PERM_BASE: + mask = node->mPermissions->getMaskBase(); + break; + case PERM_OWNER: + mask = node->mPermissions->getMaskOwner(); + break; + case PERM_GROUP: + mask = node->mPermissions->getMaskGroup(); + break; + case PERM_EVERYONE: + mask = node->mPermissions->getMaskEveryone(); + break; + case PERM_NEXT_OWNER: + mask = node->mPermissions->getMaskNextOwner(); + break; + default: + mask = 0x0; + break; + } + mask_and &= mask; + mask_or |= mask; + } + + if (all_valid) + { + // ...TRUE through all ANDs means all TRUE + *mask_on = mask_and; + + // ...FALSE through all ORs means all FALSE + *mask_off = ~mask_or; + return TRUE; + } + else + { + *mask_on = 0; + *mask_off = 0; + return FALSE; + } +} + + + +BOOL LLSelectMgr::selectGetOwnershipCost(S32* out_cost) +{ + return mSelectedObjects->getOwnershipCost(*out_cost); +} + +BOOL LLSelectMgr::selectGetPermissions(LLPermissions& result_perm) +{ + BOOL first = TRUE; + LLPermissions perm; + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + perm = *(node->mPermissions); + first = FALSE; + } + else + { + perm.accumulate(*(node->mPermissions)); + } + } + + result_perm = perm; + + return TRUE; +} + + +void LLSelectMgr::selectDelete() +{ + S32 deleteable_count = 0; + + BOOL locked_but_deleteable_object = FALSE; + BOOL no_copy_but_deleteable_object = FALSE; + BOOL all_owned_by_you = TRUE; + + for (LLObjectSelection::iterator iter = getSelection()->begin(); + iter != getSelection()->end(); iter++) + { + LLViewerObject* obj = (*iter)->getObject(); + + if( obj->isAttachment() ) + { + continue; + } + + deleteable_count++; + + // Check to see if you can delete objects which are locked. + if(!obj->permMove()) + { + locked_but_deleteable_object = TRUE; + } + if(!obj->permCopy()) + { + no_copy_but_deleteable_object = TRUE; + } + if(!obj->permYouOwner()) + { + all_owned_by_you = FALSE; + } + } + + if( 0 == deleteable_count ) + { + make_ui_sound("UISndInvalidOp"); + return; + } + + LLNotification::Params params("ConfirmObjectDeleteLock"); + params.functor(boost::bind(&LLSelectMgr::confirmDelete, _1, _2, getSelection())); + + if(locked_but_deleteable_object || + no_copy_but_deleteable_object || + !all_owned_by_you) + { + // convert any transient pie-menu selections to full selection so this operation + // has some context + // NOTE: if user cancels delete operation, this will potentially leave objects selected outside of build mode + // but this is ok, if not ideal + convertTransient(); + + //This is messy, but needed to get all english our of the UI. + if(locked_but_deleteable_object && !no_copy_but_deleteable_object && all_owned_by_you) + { + //Locked only + params.name("ConfirmObjectDeleteLock"); + } + else if(!locked_but_deleteable_object && no_copy_but_deleteable_object && all_owned_by_you) + { + //No Copy only + params.name("ConfirmObjectDeleteNoCopy"); + } + else if(!locked_but_deleteable_object && !no_copy_but_deleteable_object && !all_owned_by_you) + { + //not owned only + params.name("ConfirmObjectDeleteNoOwn"); + } + else if(locked_but_deleteable_object && no_copy_but_deleteable_object && all_owned_by_you) + { + //locked and no copy + params.name("ConfirmObjectDeleteLockNoCopy"); + } + else if(locked_but_deleteable_object && !no_copy_but_deleteable_object && !all_owned_by_you) + { + //locked and not owned + params.name("ConfirmObjectDeleteLockNoOwn"); + } + else if(!locked_but_deleteable_object && no_copy_but_deleteable_object && !all_owned_by_you) + { + //no copy and not owned + params.name("ConfirmObjectDeleteNoCopyNoOwn"); + } + else + { + //locked, no copy and not owned + params.name("ConfirmObjectDeleteLockNoCopyNoOwn"); + } + + LLNotifications::instance().add(params); + } + else + { + LLNotifications::instance().forceResponse(params, 0); + } +} + +// static +bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle handle) +{ + S32 option = LLNotification::getSelectedOption(notification, response); + if (!handle->getObjectCount()) + { + llwarns << "Nothing to delete!" << llendl; + return false; + } + + switch(option) + { + case 0: + { + // TODO: Make sure you have delete permissions on all of them. + LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + // attempt to derez into the trash. + LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id); + LLSelectMgr::getInstance()->sendListToRegions("DeRezObject", + packDeRezHeader, + packObjectLocalID, + (void*)info, + SEND_ONLY_ROOTS); + // VEFFECT: Delete Object - one effect for all deletes + if(!gSavedSettings.getBOOL("DisablePointAtAndBeam")) + { + if (LLSelectMgr::getInstance()->mSelectedObjects->mSelectType != SELECT_TYPE_HUD) + { + LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); + effectp->setPositionGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal() ); + effectp->setColor(LLColor4U(gAgent.getEffectColor())); + F32 duration = 0.5f; + duration += LLSelectMgr::getInstance()->mSelectedObjects->getObjectCount() / 64.f; + effectp->setDuration(duration); + } + } + + gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + + // Keep track of how many objects have been deleted. + F64 obj_delete_count = LLViewerStats::getInstance()->getStat(LLViewerStats::ST_OBJECT_DELETE_COUNT); + obj_delete_count += LLSelectMgr::getInstance()->mSelectedObjects->getObjectCount(); + LLViewerStats::getInstance()->setStat(LLViewerStats::ST_OBJECT_DELETE_COUNT, obj_delete_count ); + } + break; + case 1: + default: + break; + } + return false; +} + + +void LLSelectMgr::selectForceDelete() +{ + sendListToRegions( + "ObjectDelete", + packDeleteHeader, + packObjectLocalID, + (void*)TRUE, + SEND_ONLY_ROOTS); +} + +void LLSelectMgr::selectGetAggregateSaleInfo(U32 &num_for_sale, + BOOL &is_for_sale_mixed, + BOOL &is_sale_price_mixed, + S32 &total_sale_price, + S32 &individual_sale_price) +{ + num_for_sale = 0; + is_for_sale_mixed = FALSE; + is_sale_price_mixed = FALSE; + total_sale_price = 0; + individual_sale_price = 0; + + + // Empty set. + if (getSelection()->root_begin() == getSelection()->root_end()) + return; + + LLSelectNode *node = *(getSelection()->root_begin()); + const BOOL first_node_for_sale = node->mSaleInfo.isForSale(); + const S32 first_node_sale_price = node->mSaleInfo.getSalePrice(); + + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++) + { + LLSelectNode* node = *iter; + const BOOL node_for_sale = node->mSaleInfo.isForSale(); + const S32 node_sale_price = node->mSaleInfo.getSalePrice(); + + // Set mixed if the fields don't match the first node's fields. + if (node_for_sale != first_node_for_sale) + is_for_sale_mixed = TRUE; + if (node_sale_price != first_node_sale_price) + is_sale_price_mixed = TRUE; + + if (node_for_sale) + { + total_sale_price += node_sale_price; + num_for_sale ++; + } + } + + individual_sale_price = first_node_sale_price; + if (is_for_sale_mixed) + { + is_sale_price_mixed = TRUE; + individual_sale_price = 0; + } +} + +// returns TRUE if all nodes are valid. method also stores an +// accumulated sale info. +BOOL LLSelectMgr::selectGetSaleInfo(LLSaleInfo& result_sale_info) +{ + BOOL first = TRUE; + LLSaleInfo sale_info; + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + sale_info = node->mSaleInfo; + first = FALSE; + } + else + { + sale_info.accumulate(node->mSaleInfo); + } + } + + result_sale_info = sale_info; + + return TRUE; +} + +BOOL LLSelectMgr::selectGetAggregatePermissions(LLAggregatePermissions& result_perm) +{ + BOOL first = TRUE; + LLAggregatePermissions perm; + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + if (first) + { + perm = node->mAggregatePerm; + first = FALSE; + } + else + { + perm.aggregate(node->mAggregatePerm); + } + } + + result_perm = perm; + + return TRUE; +} + +BOOL LLSelectMgr::selectGetAggregateTexturePermissions(LLAggregatePermissions& result_perm) +{ + BOOL first = TRUE; + LLAggregatePermissions perm; + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mValid) + { + return FALSE; + } + + LLAggregatePermissions t_perm = node->getObject()->permYouOwner() ? node->mAggregateTexturePermOwner : node->mAggregateTexturePerm; + if (first) + { + perm = t_perm; + first = FALSE; + } + else + { + perm.aggregate(t_perm); + } + } + + result_perm = perm; + + return TRUE; +} + + +//-------------------------------------------------------------------- +// Duplicate objects +//-------------------------------------------------------------------- + +// JC - If this doesn't work right, duplicate the selection list +// before doing anything, do a deselect, then send the duplicate +// messages. +struct LLDuplicateData +{ + LLVector3 offset; + U32 flags; +}; + +void LLSelectMgr::selectDuplicate(const LLVector3& offset, BOOL select_copy) +{ + if (mSelectedObjects->isAttachment()) + { + //RN: do not duplicate attachments + make_ui_sound("UISndInvalidOp"); + return; + } + LLDuplicateData data; + + data.offset = offset; + data.flags = (select_copy ? FLAGS_CREATE_SELECTED : 0x0); + + sendListToRegions("ObjectDuplicate", packDuplicateHeader, packDuplicate, &data, SEND_ONLY_ROOTS); + + if (select_copy) + { + // the new copy will be coming in selected + deselectAll(); + } + else + { + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + node->mDuplicated = TRUE; + node->mDuplicatePos = node->getObject()->getPositionGlobal(); + node->mDuplicateRot = node->getObject()->getRotation(); + } + } +} + +void LLSelectMgr::repeatDuplicate() +{ + if (mSelectedObjects->isAttachment()) + { + //RN: do not duplicate attachments + make_ui_sound("UISndInvalidOp"); + return; + } + + std::vector non_duplicated_objects; + + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (!node->mDuplicated) + { + non_duplicated_objects.push_back(node->getObject()); + } + } + + // make sure only previously duplicated objects are selected + for (std::vector::iterator iter = non_duplicated_objects.begin(); + iter != non_duplicated_objects.end(); ++iter) + { + LLViewerObject* objectp = *iter; + deselectObjectAndFamily(objectp); + } + + // duplicate objects in place + LLDuplicateData data; + + data.offset = LLVector3::zero; + data.flags = 0x0; + + sendListToRegions("ObjectDuplicate", packDuplicateHeader, packDuplicate, &data, SEND_ONLY_ROOTS); + + // move current selection based on delta from duplication position and update duplication position + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); + iter != getSelection()->root_end(); iter++ ) + { + LLSelectNode* node = *iter; + if (node->mDuplicated) + { + LLQuaternion cur_rot = node->getObject()->getRotation(); + LLQuaternion rot_delta = (~node->mDuplicateRot * cur_rot); + LLQuaternion new_rot = cur_rot * rot_delta; + LLVector3d cur_pos = node->getObject()->getPositionGlobal(); + LLVector3d new_pos = cur_pos + ((cur_pos - node->mDuplicatePos) * rot_delta); + + node->mDuplicatePos = node->getObject()->getPositionGlobal(); + node->mDuplicateRot = node->getObject()->getRotation(); + node->getObject()->setPositionGlobal(new_pos); + node->getObject()->setRotation(new_rot); + } + } + + sendMultipleUpdate(UPD_ROTATION | UPD_POSITION); +} + +// static +void LLSelectMgr::packDuplicate( LLSelectNode* node, void *duplicate_data ) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID()); +} + + +//-------------------------------------------------------------------- +// Duplicate On Ray +//-------------------------------------------------------------------- + +// Duplicates the selected objects, but places the copy along a cast +// ray. +struct LLDuplicateOnRayData +{ + LLVector3 mRayStartRegion; + LLVector3 mRayEndRegion; + BOOL mBypassRaycast; + BOOL mRayEndIsIntersection; + LLUUID mRayTargetID; + BOOL mCopyCenters; + BOOL mCopyRotates; + U32 mFlags; +}; + +void LLSelectMgr::selectDuplicateOnRay(const LLVector3 &ray_start_region, + const LLVector3 &ray_end_region, + BOOL bypass_raycast, + BOOL ray_end_is_intersection, + const LLUUID &ray_target_id, + BOOL copy_centers, + BOOL copy_rotates, + BOOL select_copy) +{ + if (mSelectedObjects->isAttachment()) + { + // do not duplicate attachments + make_ui_sound("UISndInvalidOp"); + return; + } + + LLDuplicateOnRayData data; + + data.mRayStartRegion = ray_start_region; + data.mRayEndRegion = ray_end_region; + data.mBypassRaycast = bypass_raycast; + data.mRayEndIsIntersection = ray_end_is_intersection; + data.mRayTargetID = ray_target_id; + data.mCopyCenters = copy_centers; + data.mCopyRotates = copy_rotates; + data.mFlags = (select_copy ? FLAGS_CREATE_SELECTED : 0x0); + + sendListToRegions("ObjectDuplicateOnRay", + packDuplicateOnRayHead, packObjectLocalID, &data, SEND_ONLY_ROOTS); + + if (select_copy) + { + // the new copy will be coming in selected + deselectAll(); + } +} + +// static +void LLSelectMgr::packDuplicateOnRayHead(void *user_data) +{ + LLMessageSystem *msg = gMessageSystem; + LLDuplicateOnRayData *data = (LLDuplicateOnRayData *)user_data; + + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); + msg->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID() ); + msg->addVector3Fast(_PREHASH_RayStart, data->mRayStartRegion ); + msg->addVector3Fast(_PREHASH_RayEnd, data->mRayEndRegion ); + msg->addBOOLFast(_PREHASH_BypassRaycast, data->mBypassRaycast ); + msg->addBOOLFast(_PREHASH_RayEndIsIntersection, data->mRayEndIsIntersection ); + msg->addBOOLFast(_PREHASH_CopyCenters, data->mCopyCenters ); + msg->addBOOLFast(_PREHASH_CopyRotates, data->mCopyRotates ); + msg->addUUIDFast(_PREHASH_RayTargetID, data->mRayTargetID ); + msg->addU32Fast(_PREHASH_DuplicateFlags, data->mFlags ); +} + + + +//------------------------------------------------------------------------ +// Object position, scale, rotation update, all-in-one +//------------------------------------------------------------------------ + +void LLSelectMgr::sendMultipleUpdate(U32 type) +{ + if (type == UPD_NONE) return; + // send individual updates when selecting textures or individual objects + ESendType send_type = (!gSavedSettings.getBOOL("EditLinkedParts") && !getTEMode()) ? SEND_ONLY_ROOTS : SEND_ROOTS_FIRST; + if (send_type == SEND_ONLY_ROOTS) + { + // tell simulator to apply to whole linked sets + type |= UPD_LINKED_SETS; + } + + sendListToRegions( + "MultipleObjectUpdate", + packAgentAndSessionID, + packMultipleUpdate, + &type, + send_type); +} + +// static +void LLSelectMgr::packMultipleUpdate(LLSelectNode* node, void *user_data) +{ + LLViewerObject* object = node->getObject(); + U32 *type32 = (U32 *)user_data; + U8 type = (U8)*type32; + U8 data[256]; + + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); + gMessageSystem->addU8Fast(_PREHASH_Type, type ); + + S32 offset = 0; + + // JC: You MUST pack the data in this order. The receiving + // routine process_multiple_update_message on simulator will + // extract them in this order. + + if (type & UPD_POSITION) + { + htonmemcpy(&data[offset], &(object->getPosition().mV), MVT_LLVector3, 12); + offset += 12; + } + if (type & UPD_ROTATION) + { + LLQuaternion quat = object->getRotation(); + LLVector3 vec = quat.packToVector3(); + htonmemcpy(&data[offset], &(vec.mV), MVT_LLQuaternion, 12); + offset += 12; + } + if (type & UPD_SCALE) + { + //llinfos << "Sending object scale " << object->getScale() << llendl; + htonmemcpy(&data[offset], &(object->getScale().mV), MVT_LLVector3, 12); + offset += 12; + } + gMessageSystem->addBinaryDataFast(_PREHASH_Data, data, offset); +} + +//------------------------------------------------------------------------ +// Ownership +//------------------------------------------------------------------------ +struct LLOwnerData +{ + LLUUID owner_id; + LLUUID group_id; + BOOL override; +}; + +void LLSelectMgr::sendOwner(const LLUUID& owner_id, + const LLUUID& group_id, + BOOL override) +{ + LLOwnerData data; + + data.owner_id = owner_id; + data.group_id = group_id; + data.override = override; + + sendListToRegions("ObjectOwner", packOwnerHead, packObjectLocalID, &data, SEND_ONLY_ROOTS); +} + +// static +void LLSelectMgr::packOwnerHead(void *user_data) +{ + LLOwnerData *data = (LLOwnerData *)user_data; + + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); + gMessageSystem->nextBlockFast(_PREHASH_HeaderData); + gMessageSystem->addBOOLFast(_PREHASH_Override, data->override); + gMessageSystem->addUUIDFast(_PREHASH_OwnerID, data->owner_id); + gMessageSystem->addUUIDFast(_PREHASH_GroupID, data->group_id); +} + +//------------------------------------------------------------------------ +// Group +//------------------------------------------------------------------------ + +void LLSelectMgr::sendGroup(const LLUUID& group_id) +{ + LLUUID local_group_id(group_id); + sendListToRegions("ObjectGroup", packAgentAndSessionAndGroupID, packObjectLocalID, &local_group_id, SEND_ONLY_ROOTS); +} + + +//------------------------------------------------------------------------ +// Buy +//------------------------------------------------------------------------ + +struct LLBuyData +{ + std::vector mObjectsSent; + LLUUID mCategoryID; + LLSaleInfo mSaleInfo; +}; + +// *NOTE: does not work for multiple object buy, which UI does not +// currently support sale info is used for verification only, if it +// doesn't match region info then sale is canceled Need to get sale +// info -as displayed in the UI- for every item. +void LLSelectMgr::sendBuy(const LLUUID& buyer_id, const LLUUID& category_id, const LLSaleInfo sale_info) +{ + LLBuyData buy; + buy.mCategoryID = category_id; + buy.mSaleInfo = sale_info; + sendListToRegions("ObjectBuy", packAgentGroupAndCatID, packBuyObjectIDs, &buy, SEND_ONLY_ROOTS); +} + +// static +void LLSelectMgr::packBuyObjectIDs(LLSelectNode* node, void* data) +{ + LLBuyData* buy = (LLBuyData*)data; + + LLViewerObject* object = node->getObject(); + if (std::find(buy->mObjectsSent.begin(), buy->mObjectsSent.end(), object) == buy->mObjectsSent.end()) + { + buy->mObjectsSent.push_back(object); + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID() ); + gMessageSystem->addU8Fast(_PREHASH_SaleType, buy->mSaleInfo.getSaleType()); + gMessageSystem->addS32Fast(_PREHASH_SalePrice, buy->mSaleInfo.getSalePrice()); + } +} + +//------------------------------------------------------------------------ +// Permissions +//------------------------------------------------------------------------ + +struct LLPermData +{ + U8 mField; + BOOL mSet; + U32 mMask; + BOOL mOverride; +}; + +// TODO: Make this able to fail elegantly. +void LLSelectMgr::selectionSetObjectPermissions(U8 field, + BOOL set, + U32 mask, + BOOL override) +{ + LLPermData data; + + data.mField = field; + data.mSet = set; + data.mMask = mask; + data.mOverride = override; + + sendListToRegions("ObjectPermissions", packPermissionsHead, packPermissions, &data, SEND_ONLY_ROOTS); +} + +void LLSelectMgr::packPermissionsHead(void* user_data) +{ + LLPermData* data = (LLPermData*)user_data; + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->nextBlockFast(_PREHASH_HeaderData); + gMessageSystem->addBOOLFast(_PREHASH_Override, data->mOverride); +} + + +// Now that you've added a bunch of objects, send a select message +// on the entire list for efficiency. +/* +void LLSelectMgr::sendSelect() +{ + llerrs << "Not implemented" << llendl; +} +*/ + +void LLSelectMgr::deselectAll() +{ + if (!mSelectedObjects->getNumNodes()) + { + return; + } + + // Zap the angular velocity, as the sim will set it to zero + for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); + iter != mSelectedObjects->end(); iter++ ) + { + LLViewerObject *objectp = (*iter)->getObject(); + objectp->setAngularVelocity( 0,0,0 ); + objectp->setVelocity( 0,0,0 ); + } + + sendListToRegions( + "ObjectDeselect", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_INDIVIDUALS); + + removeAll(); + + mLastSentSelectionCenterGlobal.clearVec(); + + updatePointAt(); +} + +void LLSelectMgr::deselectAllForStandingUp() +{ + /* + This function is similar deselectAll() except for the first if statement + which was removed. This is needed as a workaround for DEV-2854 + */ + + // Zap the angular velocity, as the sim will set it to zero + for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); + iter != mSelectedObjects->end(); iter++ ) + { + LLViewerObject *objectp = (*iter)->getObject(); + objectp->setAngularVelocity( 0,0,0 ); + objectp->setVelocity( 0,0,0 ); + } + + sendListToRegions( + "ObjectDeselect", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_INDIVIDUALS); + + removeAll(); + + mLastSentSelectionCenterGlobal.clearVec(); + + updatePointAt(); +} + +void LLSelectMgr::deselectUnused() +{ + // no more outstanding references to this selection + if (mSelectedObjects->getNumRefs() == 1) + { + deselectAll(); + } +} + + +void LLSelectMgr::convertTransient() +{ + LLObjectSelection::iterator node_it; + for (node_it = mSelectedObjects->begin(); node_it != mSelectedObjects->end(); ++node_it) + { + LLSelectNode *nodep = *node_it; + nodep->setTransient(FALSE); + } +} + + +void LLSelectMgr::deselectAllIfTooFar() +{ + if (mSelectedObjects->isEmpty() || mSelectedObjects->mSelectType == SELECT_TYPE_HUD) + { + return; + } + +// [RLVa:KB] - Checked: 2010-01-02 (RLVa-1.1.0l) | Modified: RLVa-1.1.0l +#ifdef RLV_EXTENSION_CMD_INTERACT + // [Fall-back code] Don't allow an active selection (except for HUD attachments - see above) when @interact=n restricted + if (gRlvHandler.hasBehaviour(RLV_BHVR_INTERACT)) + { + deselectAll(); + return; + } +#endif // RLV_EXTENSION_CMD_INTERACT +// [/RLVa:KB] + + // HACK: Don't deselect when we're navigating to rate an object's + // owner or creator. JC + if (gPieObject->getVisible() || gPieRate->getVisible() ) + { + return; + } + + LLVector3d selectionCenter = getSelectionCenterGlobal(); + +// if (gSavedSettings.getBOOL("LimitSelectDistance") +// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f + BOOL fRlvFartouch = gRlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH) && gFloaterTools->getVisible(); + if ( (gSavedSettings.getBOOL("LimitSelectDistance") || (fRlvFartouch) ) +// [/RLVa:KB] + && (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar()) + && !mSelectedObjects->isAttachment() + && !selectionCenter.isExactlyZero()) + { +// F32 deselect_dist = gSavedSettings.getF32("MaxSelectDistance"); +// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.0f + F32 deselect_dist = (!fRlvFartouch) ? gSavedSettings.getF32("MaxSelectDistance") : 1.5f; +// [/RLVa:KB] + F32 deselect_dist_sq = deselect_dist * deselect_dist; + + LLVector3d select_delta = gAgent.getPositionGlobal() - selectionCenter; + F32 select_dist_sq = (F32) select_delta.magVecSquared(); + + if (select_dist_sq > deselect_dist_sq) + { + if (gDebugSelectMgr) + { + llinfos << "Selection manager: auto-deselecting, select_dist = " << fsqrtf(select_dist_sq) << llendl; + llinfos << "agent pos global = " << gAgent.getPositionGlobal() << llendl; + llinfos << "selection pos global = " << selectionCenter << llendl; + } + + deselectAll(); + } + } +} + +void LLSelectMgr::selectionSetObjectName(const std::string& name) +{ + // we only work correctly if 1 object is selected. + if(mSelectedObjects->getRootObjectCount() == 1) + { + sendListToRegions("ObjectName", + packAgentAndSessionID, + packObjectName, + (void*)(new std::string(name)), + SEND_ONLY_ROOTS); + } + else if(mSelectedObjects->getObjectCount() == 1) + { + sendListToRegions("ObjectName", + packAgentAndSessionID, + packObjectName, + (void*)(new std::string(name)), + SEND_INDIVIDUALS); + } +} + +void LLSelectMgr::selectionSetObjectDescription(const std::string& desc) +{ + // we only work correctly if 1 object is selected. + if(mSelectedObjects->getRootObjectCount() == 1) + { + sendListToRegions("ObjectDescription", + packAgentAndSessionID, + packObjectDescription, + (void*)(new std::string(desc)), + SEND_ONLY_ROOTS); + } + else if(mSelectedObjects->getObjectCount() == 1) + { + sendListToRegions("ObjectDescription", + packAgentAndSessionID, + packObjectDescription, + (void*)(new std::string(desc)), + SEND_INDIVIDUALS); + } +} + +void LLSelectMgr::selectionSetObjectCategory(const LLCategory& category) +{ + // for now, we only want to be able to set one root category at + // a time. + if(mSelectedObjects->getRootObjectCount() != 1) return; + sendListToRegions("ObjectCategory", + packAgentAndSessionID, + packObjectCategory, + (void*)(&category), + SEND_ONLY_ROOTS); +} + +void LLSelectMgr::selectionSetObjectSaleInfo(const LLSaleInfo& sale_info) +{ + sendListToRegions("ObjectSaleInfo", + packAgentAndSessionID, + packObjectSaleInfo, + (void*)(&sale_info), + SEND_ONLY_ROOTS); +} + +//---------------------------------------------------------------------- +// Attachments +//---------------------------------------------------------------------- + +void LLSelectMgr::sendAttach(U8 attachment_point) +{ + LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject(); + + if (!attach_object || !isAgentAvatarValid() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD) + { + return; + } + + BOOL build_mode = LLToolMgr::getInstance()->inEdit(); + // Special case: Attach to default location for this object. + if (0 == attachment_point || + get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) + { + if (attachment_point != 0 && gHippoGridManager->getConnectedGrid()->supportsInvLinks()) + { + // If we know the attachment point then we got here by clicking an + // "Attach to..." context menu item, so we should add, not replace. + attachment_point |= ATTACHMENT_ADD; + } + + sendListToRegions( + "ObjectAttach", + packAgentIDAndSessionAndAttachment, + packObjectIDAndRotation, + &attachment_point, + SEND_ONLY_ROOTS ); + if (!build_mode) + { + deselectAll(); + } + } +} + +void LLSelectMgr::sendDetach() +{ + if (!mSelectedObjects->getNumNodes() || mSelectedObjects->mSelectType == SELECT_TYPE_WORLD) + { + return; + } + + sendListToRegions( + "ObjectDetach", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_ONLY_ROOTS ); +} + + +void LLSelectMgr::sendDropAttachment() +{ + if (!mSelectedObjects->getNumNodes() || mSelectedObjects->mSelectType == SELECT_TYPE_WORLD) + { + return; + } + + sendListToRegions( + "ObjectDrop", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_ONLY_ROOTS); +} + +//---------------------------------------------------------------------- +// Links +//---------------------------------------------------------------------- + +void LLSelectMgr::sendLink() +{ + if (!mSelectedObjects->getNumNodes()) + { + return; + } + + sendListToRegions( + "ObjectLink", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_ONLY_ROOTS); +} + +void LLSelectMgr::sendDelink() +{ + if (!mSelectedObjects->getNumNodes()) + { + return; + } + + // Delink needs to send individuals so you can unlink a single object from + // a linked set. + sendListToRegions( + "ObjectDelink", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_INDIVIDUALS); +} + + +//---------------------------------------------------------------------- +// Hinges +//---------------------------------------------------------------------- + +/* +void LLSelectMgr::sendHinge(U8 type) +{ + if (!mSelectedObjects->getNumNodes()) + { + return; + } + + sendListToRegions( + "ObjectHinge", + packHingeHead, + packObjectLocalID, + &type, + SEND_ONLY_ROOTS); +} + + +void LLSelectMgr::sendDehinge() +{ + if (!mSelectedObjects->getNumNodes()) + { + return; + } + + sendListToRegions( + "ObjectDehinge", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_ONLY_ROOTS); +}*/ + +void LLSelectMgr::sendSelect() +{ + if (!mSelectedObjects->getNumNodes()) + { + return; + } + + sendListToRegions( + "ObjectSelect", + packAgentAndSessionID, + packObjectLocalID, + NULL, + SEND_INDIVIDUALS); +} + +// static +void LLSelectMgr::packHingeHead(void *user_data) +{ + U8 *type = (U8 *)user_data; + + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); + gMessageSystem->nextBlockFast(_PREHASH_JointType); + gMessageSystem->addU8Fast(_PREHASH_Type, *type ); +} + + +void LLSelectMgr::selectionDump() +{ + struct f : public LLSelectedObjectFunctor + { + virtual bool apply(LLViewerObject* object) + { + object->dump(); + return true; + } + } func; + getSelection()->applyToObjects(&func); +} + +void LLSelectMgr::saveSelectedObjectColors() +{ + struct f : public LLSelectedNodeFunctor + { + virtual bool apply(LLSelectNode* node) + { + node->saveColors(); + return true; + } + } func; + getSelection()->applyToNodes(&func); +} + +void LLSelectMgr::saveSelectedObjectTextures() +{ + // invalidate current selection so we update saved textures + struct f : public LLSelectedNodeFunctor + { + virtual bool apply(LLSelectNode* node) + { + node->mValid = FALSE; + return true; + } + } func; + getSelection()->applyToNodes(&func); + + // request object properties message to get updated permissions data + sendSelect(); +} + + +// This routine should be called whenever a drag is initiated. +// also need to know to which simulator to send update message +void LLSelectMgr::saveSelectedObjectTransform(EActionType action_type) +{ + if (mSelectedObjects->isEmpty()) + { + // nothing selected, so nothing to save + return; + } + + struct f : public LLSelectedNodeFunctor + { + EActionType mActionType; + f(EActionType a) : mActionType(a) {} + virtual bool apply(LLSelectNode* selectNode) + { + LLViewerObject* object = selectNode->getObject(); + if (!object) + { + return true; // skip + } + selectNode->mSavedPositionLocal = object->getPosition(); + if (object->isAttachment()) + { + if (object->isRootEdit()) + { + LLXform* parent_xform = object->mDrawable->getXform()->getParent(); + if (parent_xform) + { + selectNode->mSavedPositionGlobal = gAgent.getPosGlobalFromAgent((object->getPosition() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition()); + } + else + { + selectNode->mSavedPositionGlobal = object->getPositionGlobal(); + } + } + else + { + LLViewerObject* attachment_root = (LLViewerObject*)object->getParent(); + LLXform* parent_xform = attachment_root ? attachment_root->mDrawable->getXform()->getParent() : NULL; + if (parent_xform) + { + LLVector3 root_pos = (attachment_root->getPosition() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition(); + LLQuaternion root_rot = (attachment_root->getRotation() * parent_xform->getWorldRotation()); + selectNode->mSavedPositionGlobal = gAgent.getPosGlobalFromAgent((object->getPosition() * root_rot) + root_pos); + } + else + { + selectNode->mSavedPositionGlobal = object->getPositionGlobal(); + } + } + selectNode->mSavedRotation = object->getRenderRotation(); + } + else + { + selectNode->mSavedPositionGlobal = object->getPositionGlobal(); + selectNode->mSavedRotation = object->getRotationRegion(); + } + + selectNode->mSavedScale = object->getScale(); + selectNode->saveTextureScaleRatios(); + return true; + } + } func(action_type); + getSelection()->applyToNodes(&func); + + mSavedSelectionBBox = getBBoxOfSelection(); +} + +struct LLSelectMgrApplyFlags : public LLSelectedObjectFunctor +{ + LLSelectMgrApplyFlags(U32 flags, BOOL state) : mFlags(flags), mState(state) {} + U32 mFlags; + BOOL mState; + virtual bool apply(LLViewerObject* object) + { + if ( object->permModify() && // preemptive permissions check + object->isRoot() && // don't send for child objects + !object->isJointChild()) + { + object->setFlags( mFlags, mState); + } + return true; + } +}; + +void LLSelectMgr::selectionUpdatePhysics(BOOL physics) +{ + LLSelectMgrApplyFlags func( FLAGS_USE_PHYSICS, physics); + getSelection()->applyToObjects(&func); +} + +void LLSelectMgr::selectionUpdateTemporary(BOOL is_temporary) +{ + LLSelectMgrApplyFlags func( FLAGS_TEMPORARY_ON_REZ, is_temporary); + getSelection()->applyToObjects(&func); +} + +void LLSelectMgr::selectionUpdatePhantom(BOOL is_phantom) +{ + LLSelectMgrApplyFlags func( FLAGS_PHANTOM, is_phantom); + getSelection()->applyToObjects(&func); +} + +void LLSelectMgr::selectionUpdateCastShadows(BOOL cast_shadows) +{ + LLSelectMgrApplyFlags func( FLAGS_CAST_SHADOWS, cast_shadows); + getSelection()->applyToObjects(&func); +} + + +//---------------------------------------------------------------------- +// Helpful packing functions for sendObjectMessage() +//---------------------------------------------------------------------- + +// static +void LLSelectMgr::packAgentIDAndSessionAndAttachment( void *user_data) +{ + U8 *attachment_point = (U8*)user_data; + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->addU8Fast(_PREHASH_AttachmentPoint, *attachment_point); +} + +// static +void LLSelectMgr::packAgentID( void *user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); +} + +// static +void LLSelectMgr::packAgentAndSessionID(void* user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +} + +// static +void LLSelectMgr::packAgentAndGroupID(void* user_data) +{ + LLOwnerData *data = (LLOwnerData *)user_data; + + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, data->owner_id ); + gMessageSystem->addUUIDFast(_PREHASH_GroupID, data->group_id ); +} + +// static +void LLSelectMgr::packAgentAndSessionAndGroupID(void* user_data) +{ + LLUUID* group_idp = (LLUUID*) user_data; + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->addUUIDFast(_PREHASH_GroupID, *group_idp); +} + +// static +void LLSelectMgr::packDuplicateHeader(void* data) +{ + LLUUID group_id(gAgent.getGroupID()); + packAgentAndSessionAndGroupID(&group_id); + + LLDuplicateData* dup_data = (LLDuplicateData*) data; + + gMessageSystem->nextBlockFast(_PREHASH_SharedData); + gMessageSystem->addVector3Fast(_PREHASH_Offset, dup_data->offset); + gMessageSystem->addU32Fast(_PREHASH_DuplicateFlags, dup_data->flags); +} + +// static +void LLSelectMgr::packDeleteHeader(void* userdata) +{ + BOOL force = (BOOL)(intptr_t)userdata; + + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->addBOOLFast(_PREHASH_Force, force); +} + +// static +void LLSelectMgr::packAgentGroupAndCatID(void* user_data) +{ + LLBuyData* buy = (LLBuyData*)user_data; + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID()); + gMessageSystem->addUUIDFast(_PREHASH_CategoryID, buy->mCategoryID); +} + +//static +void LLSelectMgr::packDeRezHeader(void* user_data) +{ + LLDeRezInfo* info = (LLDeRezInfo*)user_data; + gMessageSystem->nextBlockFast(_PREHASH_AgentData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gMessageSystem->nextBlockFast(_PREHASH_AgentBlock); + gMessageSystem->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID()); + gMessageSystem->addU8Fast(_PREHASH_Destination, (U8)info->mDestination); + gMessageSystem->addUUIDFast(_PREHASH_DestinationID, info->mDestinationID); + LLUUID tid; + tid.generate(); + gMessageSystem->addUUIDFast(_PREHASH_TransactionID, tid); + const U8 PACKET = 1; + gMessageSystem->addU8Fast(_PREHASH_PacketCount, PACKET); + gMessageSystem->addU8Fast(_PREHASH_PacketNumber, PACKET); +} + +// static +void LLSelectMgr::packObjectID(LLSelectNode* node, void *user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addUUIDFast(_PREHASH_ObjectID, node->getObject()->mID ); +} + +void LLSelectMgr::packObjectIDAndRotation(LLSelectNode* node, void *user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); + gMessageSystem->addQuatFast(_PREHASH_Rotation, node->getObject()->getRotation()); +} + +void LLSelectMgr::packObjectClickAction(LLSelectNode* node, void *user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); + gMessageSystem->addU8("ClickAction", node->getObject()->getClickAction()); +} + +void LLSelectMgr::packObjectIncludeInSearch(LLSelectNode* node, void *user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); + gMessageSystem->addBOOL("IncludeInSearch", node->getObject()->getIncludeInSearch()); +} + +// static +void LLSelectMgr::packObjectLocalID(LLSelectNode* node, void *) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID()); +} + +// static +void LLSelectMgr::packObjectName(LLSelectNode* node, void* user_data) +{ + const std::string* name = (const std::string*)user_data; + if(!name->empty()) + { + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); + gMessageSystem->addStringFast(_PREHASH_Name, *name); + } + delete name; +} + +// static +void LLSelectMgr::packObjectDescription(LLSelectNode* node, void* user_data) +{ + const std::string* desc = (const std::string*)user_data; + if(!desc->empty()) + { + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); + gMessageSystem->addStringFast(_PREHASH_Description, *desc); + } +} + +// static +void LLSelectMgr::packObjectCategory(LLSelectNode* node, void* user_data) +{ + LLCategory* category = (LLCategory*)user_data; + if(!category) return; + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); + category->packMessage(gMessageSystem); +} + +// static +void LLSelectMgr::packObjectSaleInfo(LLSelectNode* node, void* user_data) +{ + LLSaleInfo* sale_info = (LLSaleInfo*)user_data; + if(!sale_info) return; + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_LocalID, node->getObject()->getLocalID()); + sale_info->packMessage(gMessageSystem); +} + +// static +void LLSelectMgr::packPhysics(LLSelectNode* node, void *user_data) +{ +} + +// static +void LLSelectMgr::packShape(LLSelectNode* node, void *user_data) +{ +} + +// static +void LLSelectMgr::packPermissions(LLSelectNode* node, void *user_data) +{ + LLPermData *data = (LLPermData *)user_data; + + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID()); + + gMessageSystem->addU8Fast(_PREHASH_Field, data->mField); + gMessageSystem->addBOOLFast(_PREHASH_Set, data->mSet); + gMessageSystem->addU32Fast(_PREHASH_Mask, data->mMask); +} + +// Utility function to send some information to every region containing +// an object on the selection list. We want to do this to reduce the total +// number of packets sent by the viewer. +void LLSelectMgr::sendListToRegions(const std::string& message_name, + void (*pack_header)(void *user_data), + void (*pack_body)(LLSelectNode* node, void *user_data), + void *user_data, + ESendType send_type) +{ + LLSelectNode* node; + LLViewerRegion* last_region; + LLViewerRegion* current_region; + + S32 objects_sent = 0; + S32 packets_sent = 0; + S32 objects_in_this_packet = 0; + + //clear update override data (allow next update through) + struct f : public LLSelectedNodeFunctor + { + virtual bool apply(LLSelectNode* node) + { + node->mLastPositionLocal.setVec(0,0,0); + node->mLastRotation = LLQuaternion(); + node->mLastScale.setVec(0,0,0); + return true; + } + } func; + getSelection()->applyToNodes(&func); + + std::queue nodes_to_send; + + struct push_all : public LLSelectedNodeFunctor + { + std::queue& nodes_to_send; + push_all(std::queue& n) : nodes_to_send(n) {} + virtual bool apply(LLSelectNode* node) + { + if (node->getObject()) + { + nodes_to_send.push(node); + } + return true; + } + }; + struct push_some : public LLSelectedNodeFunctor + { + std::queue& nodes_to_send; + bool mRoots; + push_some(std::queue& n, bool roots) : nodes_to_send(n), mRoots(roots) {} + virtual bool apply(LLSelectNode* node) + { + if (node->getObject()) + { + BOOL is_root = node->getObject()->isRootEdit(); + if ((mRoots && is_root) || (!mRoots && !is_root)) + { + nodes_to_send.push(node); + } + } + return true; + } + }; + struct push_all pushall(nodes_to_send); + struct push_some pushroots(nodes_to_send, TRUE); + struct push_some pushnonroots(nodes_to_send, FALSE); + + switch(send_type) + { + case SEND_ONLY_ROOTS: + if(message_name == "ObjectBuy") + getSelection()->applyToRootNodes(&pushroots); + else + getSelection()->applyToRootNodes(&pushall); + + break; + case SEND_INDIVIDUALS: + getSelection()->applyToNodes(&pushall); + break; + case SEND_ROOTS_FIRST: + // first roots... + getSelection()->applyToNodes(&pushroots); + // then children... + getSelection()->applyToNodes(&pushnonroots); + break; + case SEND_CHILDREN_FIRST: + // first children... + getSelection()->applyToNodes(&pushnonroots); + // then roots... + getSelection()->applyToNodes(&pushroots); + break; + + default: + llerrs << "Bad send type " << send_type << " passed to SendListToRegions()" << llendl; + } + + // bail if nothing selected + if (nodes_to_send.empty()) + { + return; + } + + node = nodes_to_send.front(); + nodes_to_send.pop(); + + // cache last region information + current_region = node->getObject()->getRegion(); + + // Start duplicate message + // CRO: this isn't + gMessageSystem->newMessage(message_name.c_str()); + (*pack_header)(user_data); + + // For each object + while (node != NULL) + { + // remember the last region, look up the current one + last_region = current_region; + current_region = node->getObject()->getRegion(); + + // if to same simulator and message not too big + if ((current_region == last_region) + && (! gMessageSystem->isSendFull(NULL)) + && (objects_in_this_packet < MAX_OBJECTS_PER_PACKET)) + { + // add another instance of the body of the data + (*pack_body)(node, user_data); + ++objects_sent; + ++objects_in_this_packet; + + // and on to the next object + if(nodes_to_send.empty()) + { + node = NULL; + } + else + { + node = nodes_to_send.front(); + nodes_to_send.pop(); + } + } + else + { + // otherwise send current message and start new one + gMessageSystem->sendReliable( last_region->getHost()); + packets_sent++; + objects_in_this_packet = 0; + + gMessageSystem->newMessage(message_name.c_str()); + (*pack_header)(user_data); + + // don't move to the next object, we still need to add the + // body data. + } + } + + // flush messages + if (gMessageSystem->getCurrentSendTotal() > 0) + { + gMessageSystem->sendReliable( current_region->getHost()); + packets_sent++; + } + else + { + gMessageSystem->clearMessage(); + } + + // llinfos << "sendListToRegions " << message_name << " obj " << objects_sent << " pkt " << packets_sent << llendl; +} + + +// +// Network communications +// + +void LLSelectMgr::requestObjectPropertiesFamily(LLViewerObject* object) +{ + // Remember that we asked the properties of this object. + sObjectPropertiesFamilyRequests.insert(object->mID); + //llinfos << "Registered an ObjectPropertiesFamily request for object " << object->mID << llendl; + + LLMessageSystem* msg = gMessageSystem; + + msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ObjectData); + msg->addU32Fast(_PREHASH_RequestFlags, 0x0 ); + msg->addUUIDFast(_PREHASH_ObjectID, object->mID ); + + LLViewerRegion* regionp = object->getRegion(); + msg->sendReliable( regionp->getHost() ); +} + + +// static +void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data) +{ + S32 i; + S32 count = msg->getNumberOfBlocksFast(_PREHASH_ObjectData); + for (i = 0; i < count; i++) + { + LLUUID id; + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, id, i); + + LLUUID creator_id; + LLUUID owner_id; + LLUUID group_id; + LLUUID last_owner_id; + U64 creation_date; + LLUUID extra_id; + U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask; + LLSaleInfo sale_info; + LLCategory category; + LLAggregatePermissions ag_perms; + LLAggregatePermissions ag_texture_perms; + LLAggregatePermissions ag_texture_perms_owner; + + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_CreatorID, creator_id, i); + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id, i); + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id, i); + msg->getU64Fast(_PREHASH_ObjectData, _PREHASH_CreationDate, creation_date, i); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask, i); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask, i); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_GroupMask, group_mask, i); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_EveryoneMask, everyone_mask, i); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_NextOwnerMask, next_owner_mask, i); + sale_info.unpackMultiMessage(msg, _PREHASH_ObjectData, i); + + ag_perms.unpackMessage(msg, _PREHASH_ObjectData, _PREHASH_AggregatePerms, i); + ag_texture_perms.unpackMessage(msg, _PREHASH_ObjectData, _PREHASH_AggregatePermTextures, i); + ag_texture_perms_owner.unpackMessage(msg, _PREHASH_ObjectData, _PREHASH_AggregatePermTexturesOwner, i); + category.unpackMultiMessage(msg, _PREHASH_ObjectData, i); + + S16 inv_serial = 0; + msg->getS16Fast(_PREHASH_ObjectData, _PREHASH_InventorySerial, inv_serial, i); + + LLUUID item_id; + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ItemID, item_id, i); + LLUUID folder_id; + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FolderID, folder_id, i); + LLUUID from_task_id; + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FromTaskID, from_task_id, i); + + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_LastOwnerID, last_owner_id, i); + + std::string name; + msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, name, i); + std::string desc; + msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc, i); + + std::string touch_name; + msg->getStringFast(_PREHASH_ObjectData, _PREHASH_TouchName, touch_name, i); + std::string sit_name; + msg->getStringFast(_PREHASH_ObjectData, _PREHASH_SitName, sit_name, i); + + //unpack TE IDs + std::vector texture_ids; + S32 size = msg->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_TextureID); + if (size > 0) + { + S8 packed_buffer[SELECT_MAX_TES * UUID_BYTES]; + msg->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureID, packed_buffer, 0, i, SELECT_MAX_TES * UUID_BYTES); + + for (S32 buf_offset = 0; buf_offset < size; buf_offset += UUID_BYTES) + { + LLUUID tid; + memcpy(tid.mData, packed_buffer + buf_offset, UUID_BYTES); /* Flawfinder: ignore */ + texture_ids.push_back(tid); + } + } + + // Iterate through nodes at end, since it can be on both the regular AND hover list + struct f : public LLSelectedNodeFunctor + { + LLUUID mID; + f(const LLUUID& id) : mID(id) {} + virtual bool apply(LLSelectNode* node) + { + return (node->getObject() && node->getObject()->mID == mID); + } + } func(id); + LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode(&func); + + if (node) + { + if (node->mInventorySerial != inv_serial) + { + node->getObject()->dirtyInventory(); + } + + // save texture data as soon as we get texture perms first time + if (!node->mValid) + { + BOOL can_copy = FALSE; + BOOL can_transfer = FALSE; + + LLAggregatePermissions::EValue value = LLAggregatePermissions::AP_NONE; + if(node->getObject()->permYouOwner()) + { + value = ag_texture_perms_owner.getValue(PERM_COPY); + if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) + { + can_copy = TRUE; + } + value = ag_texture_perms_owner.getValue(PERM_TRANSFER); + if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) + { + can_transfer = TRUE; + } + } + else + { + value = ag_texture_perms.getValue(PERM_COPY); + if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) + { + can_copy = TRUE; + } + value = ag_texture_perms.getValue(PERM_TRANSFER); + if (value == LLAggregatePermissions::AP_EMPTY || value == LLAggregatePermissions::AP_ALL) + { + can_transfer = TRUE; + } + } + + if (can_copy && can_transfer) + { + // this should be the only place that saved textures is called + node->saveTextures(texture_ids); + } + } + + node->mValid = TRUE; + node->mPermissions->init(creator_id, owner_id, + last_owner_id, group_id); + node->mPermissions->initMasks(base_mask, owner_mask, everyone_mask, group_mask, next_owner_mask); + node->mCreationDate = creation_date; + node->mItemID = item_id; + node->mFolderID = folder_id; + node->mFromTaskID = from_task_id; + node->mName.assign(name); + node->mDescription.assign(desc); + node->mSaleInfo = sale_info; + node->mAggregatePerm = ag_perms; + node->mAggregateTexturePerm = ag_texture_perms; + node->mAggregateTexturePermOwner = ag_texture_perms_owner; + node->mCategory = category; + node->mInventorySerial = inv_serial; + node->mSitName.assign(sit_name); + node->mTouchName.assign(touch_name); + } + } + + dialog_refresh_all(); + + // silly hack to allow 'save into inventory' + if(gPopupMenuView->getVisible()) + { + gPopupMenuView->setItemEnabled(SAVE_INTO_INVENTORY, + enable_save_into_inventory(NULL)); + } + + // hack for left-click buy object + LLToolPie::selectionPropertiesReceived(); +} + +// static +void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data) +{ + U32 request_flags; + LLUUID id; + LLUUID creator_id; + LLUUID owner_id; + LLUUID group_id; + LLUUID extra_id; + U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask; + LLSaleInfo sale_info; + LLCategory category; + + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_RequestFlags, request_flags ); + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, id ); + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id ); + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id ); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask ); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask ); + msg->getU32Fast(_PREHASH_ObjectData,_PREHASH_GroupMask, group_mask ); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_EveryoneMask, everyone_mask ); + msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_NextOwnerMask, next_owner_mask); + sale_info.unpackMessage(msg, _PREHASH_ObjectData); + category.unpackMessage(msg, _PREHASH_ObjectData); + + LLUUID last_owner_id; + msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_LastOwnerID, last_owner_id ); + + // unpack name & desc + std::string name; + msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, name); + + std::string desc; + msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc); + + //llinfos << "Got ObjectPropertiesFamily reply for object " << id << llendl; + if(sObjectPropertiesFamilyRequests.count(id) != 0 ) + { + // Send to export floaters + //LLFloaterExport::receiveObjectProperties(id, name, desc); + // We got the reply, so remove the object from the list of pending requests + sObjectPropertiesFamilyRequests.erase(id); + } + + // the reporter widget askes the server for info about picked objects + if (request_flags & (COMPLAINT_REPORT_REQUEST | BUG_REPORT_REQUEST)) + { + EReportType report_type = (COMPLAINT_REPORT_REQUEST & request_flags) ? COMPLAINT_REPORT : BUG_REPORT; + LLFloaterReporter *reporterp = LLFloaterReporter::getReporter(report_type); + if (reporterp) + { + std::string fullname; + gCacheName->getFullName(owner_id, fullname); + reporterp->setPickedObjectProperties(name, fullname, owner_id); + } + } + else if (request_flags & OBJECT_PAY_REQUEST) + { + // check if the owner of the paid object is muted + LLMuteList::getInstance()->autoRemove(owner_id, LLMuteList::AR_MONEY); + } + + // Now look through all of the hovered nodes + struct f : public LLSelectedNodeFunctor + { + LLUUID mID; + f(const LLUUID& id) : mID(id) {} + virtual bool apply(LLSelectNode* node) + { + return (node->getObject() && node->getObject()->mID == mID); + } + } func(id); + LLSelectNode* node = LLSelectMgr::getInstance()->getHoverObjects()->getFirstNode(&func); + + if (node) + { + node->mValid = TRUE; + node->mPermissions->init(LLUUID::null, owner_id, + last_owner_id, group_id); + node->mPermissions->initMasks(base_mask, owner_mask, everyone_mask, group_mask, next_owner_mask); + node->mSaleInfo = sale_info; + node->mCategory = category; + node->mName.assign(name); + node->mDescription.assign(desc); + } + + dialog_refresh_all(); +} + + +// static +void LLSelectMgr::processForceObjectSelect(LLMessageSystem* msg, void**) +{ + BOOL reset_list; + msg->getBOOL("Header", "ResetList", reset_list); + + if (reset_list) + { + LLSelectMgr::getInstance()->deselectAll(); + } + + LLUUID full_id; + S32 local_id; + LLViewerObject* object; + std::vector objects; + S32 i; + S32 block_count = msg->getNumberOfBlocks("Data"); + + for (i = 0; i < block_count; i++) + { + msg->getS32("Data", "LocalID", local_id, i); + + gObjectList.getUUIDFromLocal(full_id, + local_id, + msg->getSenderIP(), + msg->getSenderPort()); + object = gObjectList.findObject(full_id); + if (object) + { + objects.push_back(object); + } + } + + // Don't select, just highlight + LLSelectMgr::getInstance()->highlightObjectAndFamily(objects); +} + + +extern LLGLdouble gGLModelView[16]; + +void LLSelectMgr::updateSilhouettes() +{ + S32 num_sils_genned = 0; + + LLVector3d cameraPos = gAgent.getCameraPositionGlobal(); + F32 currentCameraZoom = gAgent.getCurrentCameraBuildOffset(); + + if (!mSilhouetteImagep) + { + mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLViewerTexture::BOOST_UI); + } + + mHighlightedObjects->cleanupNodes(); + + if((cameraPos - mLastCameraPos).magVecSquared() > SILHOUETTE_UPDATE_THRESHOLD_SQUARED * currentCameraZoom * currentCameraZoom) + { + struct f : public LLSelectedObjectFunctor + { + virtual bool apply(LLViewerObject* object) + { + object->setChanged(LLXform::SILHOUETTE); + return true; + } + } func; + getSelection()->applyToObjects(&func); + + mLastCameraPos = gAgent.getCameraPositionGlobal(); + } + + std::vector changed_objects; + + updateSelectionSilhouette(mSelectedObjects, num_sils_genned, changed_objects); + if (mRectSelectedObjects.size() > 0) + { + //gGLSPipelineSelection.set(); + + //mSilhouetteImagep->bindTexture(); + //glAlphaFunc(GL_GREATER, sHighlightAlphaTest); + + std::set roots; + + // sync mHighlightedObjects with mRectSelectedObjects since the latter is rebuilt every frame and former + // persists from frame to frame to avoid regenerating object silhouettes + // mHighlightedObjects includes all siblings of rect selected objects + + BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); + + // generate list of roots from current object selection + for (std::set >::iterator iter = mRectSelectedObjects.begin(); + iter != mRectSelectedObjects.end(); iter++) + { + LLViewerObject *objectp = *iter; + if (select_linked_set) + { + LLViewerObject *rootp = (LLViewerObject*)objectp->getRoot(); + roots.insert(rootp); + } + else + { + roots.insert(objectp); + } + } + + // remove highlight nodes not in roots list + std::vector remove_these_nodes; + std::vector remove_these_roots; + + for (LLObjectSelection::iterator iter = mHighlightedObjects->begin(); + iter != mHighlightedObjects->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* objectp = node->getObject(); + if (!objectp) + continue; + if (objectp->isRoot() || !select_linked_set) + { + if (roots.count(objectp) == 0) + { + remove_these_nodes.push_back(node); + } + else + { + remove_these_roots.push_back(objectp); + } + } + else + { + LLViewerObject* rootp = (LLViewerObject*)objectp->getRoot(); + + if (roots.count(rootp) == 0) + { + remove_these_nodes.push_back(node); + } + } + } + + // remove all highlight nodes no longer in rectangle selection + for (std::vector::iterator iter = remove_these_nodes.begin(); + iter != remove_these_nodes.end(); ++iter) + { + LLSelectNode* nodep = *iter; + mHighlightedObjects->removeNode(nodep); + } + + // remove all root objects already being highlighted + for (std::vector::iterator iter = remove_these_roots.begin(); + iter != remove_these_roots.end(); ++iter) + { + LLViewerObject* objectp = *iter; + roots.erase(objectp); + } + + // add all new objects in rectangle selection + for (std::set::iterator iter = roots.begin(); + iter != roots.end(); iter++) + { + LLViewerObject* objectp = *iter; + if (!canSelectObject(objectp)) + { + continue; + } + + LLSelectNode* rect_select_root_node = new LLSelectNode(objectp, TRUE); + rect_select_root_node->selectAllTEs(TRUE); + + if (!select_linked_set) + { + rect_select_root_node->mIndividualSelection = TRUE; + } + else + { + LLViewerObject::const_child_list_t& child_list = objectp->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); iter++) + { + LLViewerObject* child_objectp = *iter; + + if (!canSelectObject(child_objectp)) + { + continue; + } + + LLSelectNode* rect_select_node = new LLSelectNode(child_objectp, TRUE); + rect_select_node->selectAllTEs(TRUE); + mHighlightedObjects->addNodeAtEnd(rect_select_node); + } + } + + // Add the root last, to preserve order for link operations. + mHighlightedObjects->addNodeAtEnd(rect_select_root_node); + } + + num_sils_genned = 0; + + // render silhouettes for highlighted objects + //BOOL subtracting_from_selection = (gKeyboard->currentMask(TRUE) == MASK_CONTROL); + for (S32 pass = 0; pass < 2; pass++) + { + for (LLObjectSelection::iterator iter = mHighlightedObjects->begin(); + iter != mHighlightedObjects->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* objectp = node->getObject(); + if (!objectp) + continue; + + // do roots first, then children so that root flags are cleared ASAP + BOOL roots_only = (pass == 0); + BOOL is_root = objectp->isRootEdit(); + if (roots_only != is_root) + { + continue; + } + + if (!node->mSilhouetteExists + || objectp->isChanged(LLXform::SILHOUETTE) + || (objectp->getParent() && objectp->getParent()->isChanged(LLXform::SILHOUETTE))) + { + if (num_sils_genned++ < MAX_SILS_PER_FRAME) + { + generateSilhouette(node, LLViewerCamera::getInstance()->getOrigin()); + changed_objects.push_back(objectp); + } + else if (objectp->isAttachment() && objectp->getRootEdit()->mDrawable.notNull()) + { + //RN: hack for orthogonal projection of HUD attachments + LLViewerJointAttachment* attachment_pt = (LLViewerJointAttachment*)objectp->getRootEdit()->mDrawable->getParent(); + if (attachment_pt && attachment_pt->getIsHUDAttachment()) + { + LLVector3 camera_pos = LLVector3(-10000.f, 0.f, 0.f); + generateSilhouette(node, camera_pos); + } + } + } + //LLColor4 highlight_color; + // + //if (subtracting_from_selection) + //{ + // node->renderOneSilhouette(LLColor4::red); + //} + //else if (!objectp->isSelected()) + //{ + // highlight_color = objectp->isRoot() ? sHighlightParentColor : sHighlightChildColor; + // node->renderOneSilhouette(highlight_color); + //} + } + } + //mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D); + } + else + { + mHighlightedObjects->deleteAllNodes(); + } + + for (std::vector::iterator iter = changed_objects.begin(); + iter != changed_objects.end(); ++iter) + { + // clear flags after traversing node list (as child objects need to refer to parent flags, etc) + LLViewerObject* objectp = *iter; + objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE); + } + + //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); +} + +void LLSelectMgr::updateSelectionSilhouette(LLObjectSelectionHandle object_handle, S32& num_sils_genned, std::vector& changed_objects) +{ + if (object_handle->getNumNodes()) + { + //gGLSPipelineSelection.set(); + + //mSilhouetteImagep->bindTexture(); + //glAlphaFunc(GL_GREATER, sHighlightAlphaTest); + + for (S32 pass = 0; pass < 2; pass++) + { + for (LLObjectSelection::iterator iter = object_handle->begin(); + iter != object_handle->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* objectp = node->getObject(); + if (!objectp) + continue; + // do roots first, then children so that root flags are cleared ASAP + BOOL roots_only = (pass == 0); + BOOL is_root = (objectp->isRootEdit()); + if (roots_only != is_root || objectp->mDrawable.isNull()) + { + continue; + } + + if (!node->mSilhouetteExists + || objectp->isChanged(LLXform::SILHOUETTE) + || (objectp->getParent() && objectp->getParent()->isChanged(LLXform::SILHOUETTE))) + { + if (num_sils_genned++ < MAX_SILS_PER_FRAME)// && objectp->mDrawable->isVisible()) + { + generateSilhouette(node, LLViewerCamera::getInstance()->getOrigin()); + changed_objects.push_back(objectp); + } + else if (objectp->isAttachment() && objectp->getRootEdit() && objectp->getRootEdit()->mDrawable.notNull()) + { + //RN: hack for orthogonal projection of HUD attachments + LLViewerJointAttachment* attachment_pt = (LLViewerJointAttachment*)objectp->getRootEdit()->mDrawable->getParent(); + if (attachment_pt && attachment_pt->getIsHUDAttachment()) + { + LLVector3 camera_pos = LLVector3(-10000.f, 0.f, 0.f); + generateSilhouette(node, camera_pos); + } + } + } + } + } + } +} +void LLSelectMgr::renderSilhouettes(BOOL for_hud) +{ + if (!mRenderSilhouettes || !LLSelectMgr::sRenderSelectionHighlights) + { + return; + } + + gGL.getTexUnit(0)->bind(mSilhouetteImagep.get()); + LLGLSPipelineSelection gls_select; + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); + LLGLEnable blend(GL_BLEND); + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); + + if (isAgentAvatarValid() && for_hud) + { + LLVOAvatar* avatar = gAgent.getAvatarObject(); + LLBBox hud_bbox = avatar->getHUDBBox(); + + F32 cur_zoom = gAgent.mHUDCurZoom; + + // set up transform to encompass bounding box of HUD + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f); + glOrtho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glLoadMatrixf(OGL_TO_CFR_ROTATION); // Load Cory's favorite reference frame + glTranslatef(-hud_bbox.getCenterLocal().mV[VX] + (depth *0.5f), 0.f, 0.f); + glScalef(cur_zoom, cur_zoom, cur_zoom); + } + if (mSelectedObjects->getNumNodes()) + { + LLUUID inspect_item_id = LLFloaterInspect::getSelectedUUID(); + + // + //for (S32 pass = 0; pass < 2; pass++) + //{ + // + for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); + iter != mSelectedObjects->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* objectp = node->getObject(); + if (!objectp) + continue; + if (objectp->isHUDAttachment() != for_hud) + { + continue; + } + if(objectp->getID() == inspect_item_id) + { + node->renderOneSilhouette(sHighlightInspectColor); + } + else if (node->isTransient()) + { + BOOL oldHidden = LLSelectMgr::sRenderHiddenSelections; + LLSelectMgr::sRenderHiddenSelections = FALSE; + node->renderOneSilhouette(sContextSilhouetteColor); + LLSelectMgr::sRenderHiddenSelections = oldHidden; + } + else if (objectp->isRootEdit()) + { + node->renderOneSilhouette(sSilhouetteParentColor); + } + else + { + node->renderOneSilhouette(sSilhouetteChildColor); + } + } + // + //} + // + } + + if (mHighlightedObjects->getNumNodes()) + { + // render silhouettes for highlighted objects + BOOL subtracting_from_selection = (gKeyboard->currentMask(TRUE) == MASK_CONTROL); + for (S32 pass = 0; pass < 2; pass++) + { + for (LLObjectSelection::iterator iter = mHighlightedObjects->begin(); + iter != mHighlightedObjects->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* objectp = node->getObject(); + if (!objectp) + continue; + if (objectp->isHUDAttachment() != for_hud) + { + continue; + } + + if (subtracting_from_selection) + { + node->renderOneSilhouette(LLColor4::red); + } + else if (!objectp->isSelected()) + { + LLColor4 highlight_color = objectp->isRoot() ? sHighlightParentColor : sHighlightChildColor; + node->renderOneSilhouette(highlight_color); + } + } + } + } + + if (isAgentAvatarValid() && for_hud) + { + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + stop_glerror(); + } + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); +} + +void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point) +{ + LLViewerObject* objectp = nodep->getObject(); + + if (objectp && objectp->getPCode() == LL_PCODE_VOLUME) + { + ((LLVOVolume*)objectp)->generateSilhouette(nodep, view_point); + } +} + +// +// Utility classes +// +LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow) +: mObject(object), + mIndividualSelection(FALSE), + mTransient(FALSE), + mValid(FALSE), + mPermissions(new LLPermissions()), + mInventorySerial(0), + mSilhouetteExists(FALSE), + mDuplicated(FALSE), + mTESelectMask(0), + mLastTESelected(0), + mName(LLStringUtil::null), + mDescription(LLStringUtil::null), + mTouchName(LLStringUtil::null), + mSitName(LLStringUtil::null), + mCreationDate(0) +{ + selectAllTEs(FALSE); + saveColors(); +} + +LLSelectNode::LLSelectNode(const LLSelectNode& nodep) +{ + mTESelectMask = nodep.mTESelectMask; + mLastTESelected = nodep.mLastTESelected; + + mIndividualSelection = nodep.mIndividualSelection; + + mValid = nodep.mValid; + mTransient = nodep.mTransient; + mPermissions = new LLPermissions(*nodep.mPermissions); + mSaleInfo = nodep.mSaleInfo;; + mAggregatePerm = nodep.mAggregatePerm; + mAggregateTexturePerm = nodep.mAggregateTexturePerm; + mAggregateTexturePermOwner = nodep.mAggregateTexturePermOwner; + mName = nodep.mName; + mDescription = nodep.mDescription; + mCategory = nodep.mCategory; + mInventorySerial = 0; + mSavedPositionLocal = nodep.mSavedPositionLocal; + mSavedPositionGlobal = nodep.mSavedPositionGlobal; + mSavedScale = nodep.mSavedScale; + mSavedRotation = nodep.mSavedRotation; + mDuplicated = nodep.mDuplicated; + mDuplicatePos = nodep.mDuplicatePos; + mDuplicateRot = nodep.mDuplicateRot; + mItemID = nodep.mItemID; + mFolderID = nodep.mFolderID; + mFromTaskID = nodep.mFromTaskID; + mTouchName = nodep.mTouchName; + mSitName = nodep.mSitName; + mCreationDate = nodep.mCreationDate; + + mSilhouetteVertices = nodep.mSilhouetteVertices; + mSilhouetteNormals = nodep.mSilhouetteNormals; + mSilhouetteSegments = nodep.mSilhouetteSegments; + mSilhouetteExists = nodep.mSilhouetteExists; + mObject = nodep.mObject; + + std::vector::const_iterator color_iter; + mSavedColors.clear(); + for (color_iter = nodep.mSavedColors.begin(); color_iter != nodep.mSavedColors.end(); ++color_iter) + { + mSavedColors.push_back(*color_iter); + } + + saveTextures(nodep.mSavedTextures); +} + +LLSelectNode::~LLSelectNode() +{ + delete mPermissions; + mPermissions = NULL; +} + +void LLSelectNode::selectAllTEs(BOOL b) +{ + mTESelectMask = b ? TE_SELECT_MASK_ALL : 0x0; + mLastTESelected = 0; +} + +void LLSelectNode::selectTE(S32 te_index, BOOL selected) +{ + if (te_index < 0 || te_index >= SELECT_MAX_TES) + { + return; + } + if (selected) + { + mTESelectMask |= (0x1 << te_index); + } + else + { + mTESelectMask &= ~(0x1 << te_index); + } + mLastTESelected = te_index; +} + +BOOL LLSelectNode::isTESelected(S32 te_index) +{ + if (te_index < 0 || te_index >= mObject->getNumTEs()) + { + return FALSE; + } + return (mTESelectMask & (0x1 << te_index)) != 0; +} + +S32 LLSelectNode::getLastSelectedTE() +{ + if (!isTESelected(mLastTESelected)) + { + return -1; + } + return mLastTESelected; +} + +LLViewerObject* LLSelectNode::getObject() +{ + if (!mObject) + { + return NULL; + } + else if (mObject->isDead()) + { + mObject = NULL; + } + return mObject; +} + +void LLSelectNode::setObject(LLViewerObject* object) +{ + mObject = object; +} + +void LLSelectNode::saveColors() +{ + if (mObject.notNull()) + { + mSavedColors.clear(); + for (S32 i = 0; i < mObject->getNumTEs(); i++) + { + const LLTextureEntry* tep = mObject->getTE(i); + mSavedColors.push_back(tep->getColor()); + } + } +} + +void LLSelectNode::saveTextures(const std::vector& textures) +{ + if (mObject.notNull()) + { + mSavedTextures.clear(); + + for (std::vector::const_iterator texture_it = textures.begin(); + texture_it != textures.end(); ++texture_it) + { + mSavedTextures.push_back(*texture_it); + } + } +} + +void LLSelectNode::saveTextureScaleRatios() +{ + mTextureScaleRatios.clear(); + if (mObject.notNull()) + { + for (U8 i = 0; i < mObject->getNumTEs(); i++) + { + F32 s,t; + const LLTextureEntry* tep = mObject->getTE(i); + tep->getScale(&s,&t); + U32 s_axis = 0; + U32 t_axis = 0; + + LLPrimitive::getTESTAxes(i, &s_axis, &t_axis); + + LLVector3 v; + LLVector3 scale = mObject->getScale(); + + if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR) + { + v.mV[s_axis] = s*scale.mV[s_axis]; + v.mV[t_axis] = t*scale.mV[t_axis]; + } + else + { + v.mV[s_axis] = s/scale.mV[s_axis]; + v.mV[t_axis] = t/scale.mV[t_axis]; + } + + mTextureScaleRatios.push_back(v); + } + } +} + + +// This implementation should be similar to LLTask::allowOperationOnTask +BOOL LLSelectNode::allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const +{ + // Extract ownership. + BOOL object_is_group_owned = FALSE; + LLUUID object_owner_id; + mPermissions->getOwnership(object_owner_id, object_is_group_owned); + + // Operations on invalid or public objects is not allowed. + if (!mObject || (mObject->isDead()) || !mPermissions->isOwned()) + { + return FALSE; + } + + // The transfer permissions can never be given through proxy. + if (PERM_TRANSFER == op) + { + // The owner of an agent-owned object can transfer to themselves. + if ( !object_is_group_owned + && (gAgent.getID() == object_owner_id) ) + { + return TRUE; + } + else + { + // Otherwise check aggregate permissions. + return mObject->permTransfer(); + } + } + + if (PERM_MOVE == op + || PERM_MODIFY == op) + { + // only owners can move or modify their attachments + // no proxy allowed. + if (mObject->isAttachment() && object_owner_id != gAgent.getID()) + { + return FALSE; + } + } + + // Calculate proxy_agent_id and group_id to use for permissions checks. + // proxy_agent_id may be set to the object owner through group powers. + // group_id can only be set to the object's group, if the agent is in that group. + LLUUID group_id = LLUUID::null; + LLUUID proxy_agent_id = gAgent.getID(); + + // Gods can always operate. + if (gAgent.isGodlike()) + { + return TRUE; + } + + // Check if the agent is in the same group as the object. + LLUUID object_group_id = mPermissions->getGroup(); + if (object_group_id.notNull() && + gAgent.isInGroup(object_group_id)) + { + // Assume the object's group during this operation. + group_id = object_group_id; + } + + // Only allow proxy powers for PERM_COPY if the actual agent can + // receive the item (ie has PERM_TRANSFER permissions). + // NOTE: op == PERM_TRANSFER has already been handled, but if + // that ever changes we need to BLOCK proxy powers for PERM_TRANSFER. DK 03/28/06 + if (PERM_COPY != op || mPermissions->allowTransferTo(gAgent.getID())) + { + // Check if the agent can assume ownership through group proxy or agent-granted proxy. + if ( ( object_is_group_owned + && gAgent.hasPowerInGroup(object_owner_id, group_proxy_power)) + // Only allow proxy for move, modify, and copy. + || ( (PERM_MOVE == op || PERM_MODIFY == op || PERM_COPY == op) + && (!object_is_group_owned + && gAgent.isGrantedProxy(*mPermissions)))) + { + // This agent is able to assume the ownership role for this operation. + proxy_agent_id = object_owner_id; + } + } + + // We now have max ownership information. + if (PERM_OWNER == op) + { + // This this was just a check for ownership, we can now return the answer. + return (proxy_agent_id == object_owner_id ? TRUE : FALSE); + } + + // check permissions to see if the agent can operate + return (mPermissions->allowOperationBy(op, proxy_agent_id, group_id)); +} + +//----------------------------------------------------------------------------- +// renderOneSilhouette() +//----------------------------------------------------------------------------- +void LLSelectNode::renderOneSilhouette(const LLColor4 &color) +{ + LLViewerObject* objectp = getObject(); + if (!objectp) + { + return; + } + + LLDrawable* drawable = objectp->mDrawable; + if(!drawable) + { + return; + } + + if (!mSilhouetteExists) + { + return; + } + + BOOL is_hud_object = objectp->isHUDAttachment(); + + if (mSilhouetteVertices.size() == 0 || mSilhouetteNormals.size() != mSilhouetteVertices.size()) + { + return; + } + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + if (!is_hud_object) + { + glLoadIdentity(); + glMultMatrixd(gGLModelView); + } + + + if (drawable->isActive()) + { + glMultMatrixf((F32*) objectp->getRenderMatrix().mMatrix); + } + + LLVolume *volume = objectp->getVolume(); + if (volume) + { + F32 silhouette_thickness; + if (isAgentAvatarValid() && is_hud_object) + { + silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgent.mHUDCurZoom; + } + else + { + LLVector3 view_vector = LLViewerCamera::getInstance()->getOrigin() - objectp->getRenderPosition(); + silhouette_thickness = view_vector.magVec() * LLSelectMgr::sHighlightThickness * (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV()); + } + F32 animationTime = (F32)LLFrameTimer::getElapsedSeconds(); + + F32 u_coord = fmod(animationTime * LLSelectMgr::sHighlightUAnim, 1.f); + F32 v_coord = 1.f - fmod(animationTime * LLSelectMgr::sHighlightVAnim, 1.f); + F32 u_divisor = 1.f / ((F32)(mSilhouetteVertices.size() - 1)); + + if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible()) + { + gGL.flush(); + gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE); + LLGLEnable fog(GL_FOG); + glFogi(GL_FOG_MODE, GL_LINEAR); + float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec(); + LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgent.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0); + glFogf(GL_FOG_START, d); + glFogf(GL_FOG_END, d*(1 + (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV()))); + glFogfv(GL_FOG_COLOR, fogCol.mV); + + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.begin(LLRender::LINES); + { + S32 i = 0; + for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++) + { + for(; i < mSilhouetteSegments[seg_num]; i++) + { + u_coord += u_divisor * LLSelectMgr::sHighlightUScale; + + gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); + gGL.texCoord2f( u_coord, v_coord ); + gGL.vertex3fv( mSilhouetteVertices[i].mV ); + } + } + } + gGL.end(); + u_coord = fmod(animationTime * LLSelectMgr::sHighlightUAnim, 1.f); + } + + gGL.flush(); + gGL.setSceneBlendType(LLRender::BT_ALPHA); + gGL.begin(LLRender::TRIANGLES); + { + S32 i = 0; + for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++) + { + S32 first_i = i; + LLVector3 v; + LLVector2 t; + + for(; i < mSilhouetteSegments[seg_num]; i++) + { + + if (i == first_i) { + LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness; + vert += mSilhouetteVertices[i]; + + gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); + gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale ); + gGL.vertex3fv( vert.mV ); + + u_coord += u_divisor * LLSelectMgr::sHighlightUScale; + + gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); + gGL.texCoord2f( u_coord, v_coord ); + gGL.vertex3fv( mSilhouetteVertices[i].mV ); + + v = mSilhouetteVertices[i]; + t = LLVector2(u_coord, v_coord); + } + else { + LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness; + vert += mSilhouetteVertices[i]; + + gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); + gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale ); + gGL.vertex3fv( vert.mV ); + gGL.vertex3fv( vert.mV ); + + gGL.texCoord2fv(t.mV); + u_coord += u_divisor * LLSelectMgr::sHighlightUScale; + gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); + gGL.vertex3fv(v.mV); + gGL.texCoord2f( u_coord, v_coord ); + gGL.vertex3fv( mSilhouetteVertices[i].mV ); + + } + } + } + } + gGL.end(); + gGL.flush(); + } + glPopMatrix(); +} + +// +// Utility Functions +// + +// Update everyone who cares about the selection list +void dialog_refresh_all() +{ + if (gNoRender) + { + return; + } + + //could refresh selected object info in toolbar here + + gFloaterTools->dirty(); + + if( gPieObject->getVisible() ) + { + gPieObject->arrange(); + } + + if( gPieAttachment->getVisible() ) + { + gPieAttachment->arrange(); + } + + LLFloaterProperties::dirtyAll(); + LLFloaterInspect::dirty(); +} + +S32 get_family_count(LLViewerObject *parent) +{ + if (!parent) + { + llwarns << "Trying to get_family_count on null parent!" << llendl; + } + S32 count = 1; // for this object + LLViewerObject::const_child_list_t& child_list = parent->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); iter++) + { + LLViewerObject* child = *iter; + + if (!child) + { + llwarns << "Family object has NULL child! Show Doug." << llendl; + } + else if (child->isDead()) + { + llwarns << "Family object has dead child object. Show Doug." << llendl; + } + else + { + if (LLSelectMgr::getInstance()->canSelectObject(child)) + { + count += get_family_count( child ); + } + } + } + return count; +} + +//----------------------------------------------------------------------------- +// updateSelectionCenter +//----------------------------------------------------------------------------- +void LLSelectMgr::updateSelectionCenter() +{ + const F32 MOVE_SELECTION_THRESHOLD = 1.f; // Movement threshold in meters for updating selection + // center (tractor beam) + + //override any object updates received + //for selected objects + overrideObjectUpdates(); + + LLViewerObject* object = mSelectedObjects->getFirstObject(); + if (!object) + { + // nothing selected, probably grabbing + // Ignore by setting to avatar origin. + mSelectionCenterGlobal.clearVec(); + mShowSelection = FALSE; + mSelectionBBox = LLBBox(); + mPauseRequest = NULL; + resetAgentHUDZoom(); + + } + else + { + mSelectedObjects->mSelectType = getSelectTypeForObject(object); + + if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) + { + mPauseRequest = gAgent.getAvatarObject()->requestPause(); + } + else + { + mPauseRequest = NULL; + } + + if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && isAgentAvatarValid()) + { + // reset hud ZOOM + gAgent.mHUDTargetZoom = 1.f; + gAgent.mHUDCurZoom = 1.f; + } + + mShowSelection = FALSE; + LLBBox bbox; + + // have stuff selected + LLVector3d select_center; + // keep a list of jointed objects for showing the joint HUDEffects + + // Initialize the bounding box to the root prim, so the BBox orientation + // matches the root prim's (affecting the orientation of the manipulators). + bbox.addBBoxAgent( (mSelectedObjects->getFirstRootObject(TRUE))->getBoundingBoxAgent() ); + + std::vector < LLViewerObject *> jointed_objects; + + for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); + iter != mSelectedObjects->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if (!object) + continue; + LLViewerObject *myAvatar = gAgent.getAvatarObject(); + LLViewerObject *root = object->getRootEdit(); + if (mSelectedObjects->mSelectType == SELECT_TYPE_WORLD && // not an attachment + !root->isChild(myAvatar) && // not the object you're sitting on + !object->isAvatar()) // not another avatar + { + mShowSelection = TRUE; + } + + bbox.addBBoxAgent( object->getBoundingBoxAgent() ); + + if (object->isJointChild()) + { + jointed_objects.push_back(object); + } + } + + LLVector3 bbox_center_agent = bbox.getCenterAgent(); + mSelectionCenterGlobal = gAgent.getPosGlobalFromAgent(bbox_center_agent); + mSelectionBBox = bbox; + + } + + if ( !(gAgentID == LLUUID::null)) + { + LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); + if (mShowSelection) + { + LLVector3d select_center_global; + + if( tool->isEditing() ) + { + select_center_global = tool->getEditingPointGlobal(); + } + else + { + select_center_global = mSelectionCenterGlobal; + } + + // Send selection center if moved beyond threshold (used to animate tractor beam) + LLVector3d diff; + diff = select_center_global - mLastSentSelectionCenterGlobal; + + if ( diff.magVecSquared() > MOVE_SELECTION_THRESHOLD*MOVE_SELECTION_THRESHOLD ) + { + // Transmit updated selection center + mLastSentSelectionCenterGlobal = select_center_global; + } + } + } + + // give up edit menu if no objects selected + if (gEditMenuHandler == this && mSelectedObjects->getObjectCount() == 0) + { + gEditMenuHandler = NULL; + } +} + +void LLSelectMgr::updatePointAt() +{ + if (mShowSelection) + { + if (mSelectedObjects->getObjectCount()) + { + LLVector3 select_offset; + const LLPickInfo& pick = gViewerWindow->getLastPick(); + LLViewerObject *click_object = pick.getObject(); + if (click_object && click_object->isSelected()) + { + // clicked on another object in our selection group, use that as target + select_offset.setVec(pick.mObjectOffset); + select_offset.rotVec(~click_object->getRenderRotation()); + + gAgent.setPointAt(POINTAT_TARGET_SELECT, click_object, select_offset); + gAgent.setLookAt(LOOKAT_TARGET_SELECT, click_object, select_offset); + } + else + { + // didn't click on an object this time, revert to pointing at center of first object + gAgent.setPointAt(POINTAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); + gAgent.setLookAt(LOOKAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); + } + } + else + { + gAgent.setPointAt(POINTAT_TARGET_CLEAR); + gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + } + } + else + { + gAgent.setPointAt(POINTAT_TARGET_CLEAR); + gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + } +} + +//----------------------------------------------------------------------------- +// getBBoxOfSelection() +//----------------------------------------------------------------------------- +LLBBox LLSelectMgr::getBBoxOfSelection() const +{ + return mSelectionBBox; +} + + +//----------------------------------------------------------------------------- +// canUndo() +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::canUndo() const +{ + return const_cast(this)->mSelectedObjects->getFirstEditableObject() != NULL; // HACK: casting away constness - MG +} + +//----------------------------------------------------------------------------- +// undo() +//----------------------------------------------------------------------------- +void LLSelectMgr::undo() +{ + BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); + LLUUID group_id(gAgent.getGroupID()); + sendListToRegions("Undo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST); +} + +//----------------------------------------------------------------------------- +// canRedo() +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::canRedo() const +{ + return const_cast(this)->mSelectedObjects->getFirstEditableObject() != NULL; // HACK: casting away constness - MG +} + +//----------------------------------------------------------------------------- +// redo() +//----------------------------------------------------------------------------- +void LLSelectMgr::redo() +{ + BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); + LLUUID group_id(gAgent.getGroupID()); + sendListToRegions("Redo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST); +} + +//----------------------------------------------------------------------------- +// canDoDelete() +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::canDoDelete() const +{ + bool can_delete = false; + // This function is "logically const" - it does not change state in + // a way visible outside the selection manager. + LLSelectMgr* self = const_cast(this); + LLViewerObject* obj = self->mSelectedObjects->getFirstDeleteableObject(); + // Note: Can only delete root objects (see getFirstDeleteableObject() for more info) + if (obj!= NULL) + { + // all the faces needs to be selected + if(self->mSelectedObjects->contains(obj,SELECT_ALL_TES )) + { + can_delete = true; + } + } + + return can_delete; +} + +//----------------------------------------------------------------------------- +// doDelete() +//----------------------------------------------------------------------------- +void LLSelectMgr::doDelete() +{ + selectDelete(); +} + +//----------------------------------------------------------------------------- +// canDeselect() +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::canDeselect() const +{ + return !mSelectedObjects->isEmpty(); +} + +//----------------------------------------------------------------------------- +// deselect() +//----------------------------------------------------------------------------- +void LLSelectMgr::deselect() +{ + deselectAll(); +} +//----------------------------------------------------------------------------- +// canDuplicate() +//----------------------------------------------------------------------------- +BOOL LLSelectMgr::canDuplicate() const +{ + return const_cast(this)->mSelectedObjects->getFirstCopyableObject() != NULL; // HACK: casting away constness - MG +} +//----------------------------------------------------------------------------- +// duplicate() +//----------------------------------------------------------------------------- +void LLSelectMgr::duplicate() +{ + LLVector3 offset(0.5f, 0.5f, 0.f); + selectDuplicate(offset, TRUE); +} + +ESelectType LLSelectMgr::getSelectTypeForObject(LLViewerObject* object) +{ + if (!object) + { + return SELECT_TYPE_WORLD; + } + if (object->isHUDAttachment()) + { + return SELECT_TYPE_HUD; + } + else if (object->isAttachment()) + { + return SELECT_TYPE_ATTACHMENT; + } + else + { + return SELECT_TYPE_WORLD; + } +} + +void LLSelectMgr::validateSelection() +{ + struct f : public LLSelectedObjectFunctor + { + virtual bool apply(LLViewerObject* object) + { + if (!LLSelectMgr::getInstance()->canSelectObject(object)) + { + LLSelectMgr::getInstance()->deselectObjectOnly(object); + } + return true; + } + } func; + getSelection()->applyToObjects(&func); +} + +BOOL LLSelectMgr::canSelectObject(LLViewerObject* object) +{ + // Never select dead objects + if (!object || object->isDead()) + { + return FALSE; + } + + if (mForceSelection) + { + return TRUE; + } + + if ((gSavedSettings.getBOOL("SelectOwnedOnly") && !object->permYouOwner()) || + (gSavedSettings.getBOOL("SelectMovableOnly") && !object->permMove())) + { + // only select my own objects + return FALSE; + } + + // Can't select orphans + if (object->isOrphaned()) return FALSE; + + // Can't select avatars + if (object->isAvatar()) return FALSE; + + // Can't select land + if (object->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH) return FALSE; + + // + //ESelectType selection_type = getSelectTypeForObject(object); + //if (mSelectedObjects->getObjectCount() > 0 && mSelectedObjects->mSelectType != selection_type) return FALSE; + // + + return TRUE; +} + +BOOL LLSelectMgr::setForceSelection(BOOL force) +{ + std::swap(mForceSelection,force); + return force; +} + +void LLSelectMgr::resetAgentHUDZoom() +{ + gAgent.mHUDTargetZoom = 1.f; + gAgent.mHUDCurZoom = 1.f; +} + +void LLSelectMgr::getAgentHUDZoom(F32 &target_zoom, F32 ¤t_zoom) const +{ + target_zoom = gAgent.mHUDTargetZoom; + current_zoom = gAgent.mHUDCurZoom; +} + +void LLSelectMgr::setAgentHUDZoom(F32 target_zoom, F32 current_zoom) +{ + gAgent.mHUDTargetZoom = target_zoom; + gAgent.mHUDCurZoom = current_zoom; +} + +LLObjectSelection::LLObjectSelection() : + LLRefCount(), + mSelectType(SELECT_TYPE_WORLD) +{ +} + +LLObjectSelection::~LLObjectSelection() +{ + deleteAllNodes(); +} + +void LLObjectSelection::cleanupNodes() +{ + for (list_t::iterator iter = mList.begin(); iter != mList.end(); ) + { + list_t::iterator curiter = iter++; + LLSelectNode* node = *curiter; + if (node->getObject() == NULL || node->getObject()->isDead()) + { + mList.erase(curiter); + delete node; + } + } +} + +void LLObjectSelection::updateEffects() +{ +} + +S32 LLObjectSelection::getNumNodes() +{ + return mList.size(); +} + +void LLObjectSelection::addNode(LLSelectNode *nodep) +{ + llassert_always(nodep->getObject() && !nodep->getObject()->isDead()); + mList.push_front(nodep); + mSelectNodeMap[nodep->getObject()] = nodep; +} + +void LLObjectSelection::addNodeAtEnd(LLSelectNode *nodep) +{ + llassert_always(nodep->getObject() && !nodep->getObject()->isDead()); + mList.push_back(nodep); + mSelectNodeMap[nodep->getObject()] = nodep; +} + +void LLObjectSelection::moveNodeToFront(LLSelectNode *nodep) +{ + mList.remove(nodep); + mList.push_front(nodep); +} + +void LLObjectSelection::removeNode(LLSelectNode *nodep) +{ + mSelectNodeMap.erase(nodep->getObject()); + if (nodep->getObject() == mPrimaryObject) + { + mPrimaryObject = NULL; + } + nodep->setObject(NULL); // Will get erased in cleanupNodes() + mList.remove(nodep); +} + +void LLObjectSelection::deleteAllNodes() +{ + std::for_each(mList.begin(), mList.end(), DeletePointer()); + mList.clear(); + mSelectNodeMap.clear(); + mPrimaryObject = NULL; +} + +LLSelectNode* LLObjectSelection::findNode(LLViewerObject* objectp) +{ + std::map, LLSelectNode*>::iterator found_it = mSelectNodeMap.find(objectp); + if (found_it != mSelectNodeMap.end()) + { + return found_it->second; + } + return NULL; +} + +//----------------------------------------------------------------------------- +// isEmpty() +//----------------------------------------------------------------------------- +BOOL LLObjectSelection::isEmpty() const +{ + return (mList.size() == 0); +} + +//----------------------------------------------------------------------------- +// getOwnershipCost() +//----------------------------------------------------------------------------- +BOOL LLObjectSelection::getOwnershipCost(S32 &cost) +{ + S32 count = getObjectCount(); + cost = count * OWNERSHIP_COST_PER_OBJECT; + return (count > 0); +} + + +//----------------------------------------------------------------------------- +// getObjectCount() - returns number of non null objects +//----------------------------------------------------------------------------- +S32 LLObjectSelection::getObjectCount() +{ + cleanupNodes(); + S32 count = mList.size(); + return count; +} + + +//----------------------------------------------------------------------------- +// getTECount() +//----------------------------------------------------------------------------- +S32 LLObjectSelection::getTECount() +{ + S32 count = 0; + for (LLObjectSelection::iterator iter = begin(); iter != end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if (!object) + continue; + S32 num_tes = object->getNumTEs(); + for (S32 te = 0; te < num_tes; te++) + { + if (node->isTESelected(te)) + { + ++count; + } + } + } + return count; +} + +//----------------------------------------------------------------------------- +// getRootObjectCount() +//----------------------------------------------------------------------------- +S32 LLObjectSelection::getRootObjectCount() +{ + S32 count = 0; + for (LLObjectSelection::root_iterator iter = root_begin(); iter != root_end(); iter++) + { + ++count; + } + return count; +} + +bool LLObjectSelection::applyToObjects(LLSelectedObjectFunctor* func) +{ + bool result = true; + for (iterator iter = begin(); iter != end(); ) + { + iterator nextiter = iter++; + LLViewerObject* object = (*nextiter)->getObject(); + if (!object) + continue; + bool r = func->apply(object); + result = result && r; + } + return result; +} + +bool LLObjectSelection::applyToRootObjects(LLSelectedObjectFunctor* func, bool firstonly) +{ + bool result = firstonly ? false : true; + for (root_iterator iter = root_begin(); iter != root_end(); ) + { + root_iterator nextiter = iter++; + LLViewerObject* object = (*nextiter)->getObject(); + if (!object) + continue; + bool r = func->apply(object); + if (firstonly && r) + return true; + else + result = result && r; + } + return result; +} + +bool LLObjectSelection::applyToTEs(LLSelectedTEFunctor* func, bool firstonly) +{ + bool result = firstonly ? false : true; + for (iterator iter = begin(); iter != end(); ) + { + iterator nextiter = iter++; + LLSelectNode* node = *nextiter; + LLViewerObject* object = (*nextiter)->getObject(); + if (!object) + continue; + S32 num_tes = llmin((S32)object->getNumTEs(), (S32)object->getNumFaces()); // avatars have TEs but no faces + for (S32 te = 0; te < num_tes; ++te) + { + if (node->isTESelected(te)) + { + bool r = func->apply(object, te); + if (firstonly && r) + return true; + else + result = result && r; + } + } + } + return result; +} + +bool LLObjectSelection::applyToNodes(LLSelectedNodeFunctor *func, bool firstonly) +{ + bool result = firstonly ? false : true; + for (iterator iter = begin(); iter != end(); ) + { + iterator nextiter = iter++; + LLSelectNode* node = *nextiter; + bool r = func->apply(node); + if (firstonly && r) + return true; + else + result = result && r; + } + return result; +} + +bool LLObjectSelection::applyToRootNodes(LLSelectedNodeFunctor *func, bool firstonly) +{ + bool result = firstonly ? false : true; + for (root_iterator iter = root_begin(); iter != root_end(); ) + { + root_iterator nextiter = iter++; + LLSelectNode* node = *nextiter; + bool r = func->apply(node); + if (firstonly && r) + return true; + else + result = result && r; + } + return result; +} + +//----------------------------------------------------------------------------- +// contains() +//----------------------------------------------------------------------------- +BOOL LLObjectSelection::contains(LLViewerObject* object) +{ + return findNode(object) != NULL; +} + + +//----------------------------------------------------------------------------- +// contains() +//----------------------------------------------------------------------------- +BOOL LLObjectSelection::contains(LLViewerObject* object, S32 te) +{ + if (te == SELECT_ALL_TES) + { + // ...all faces + for (LLObjectSelection::iterator iter = begin(); + iter != end(); iter++) + { + LLSelectNode* nodep = *iter; + if (nodep->getObject() == object) + { + // Optimization + if (nodep->getTESelectMask() == TE_SELECT_MASK_ALL) + { + return TRUE; + } + + BOOL all_selected = TRUE; + for (S32 i = 0; i < object->getNumTEs(); i++) + { + all_selected = all_selected && nodep->isTESelected(i); + } + return all_selected; + } + } + return FALSE; + } + else + { + // ...one face + for (LLObjectSelection::iterator iter = begin(); iter != end(); iter++) + { + LLSelectNode* nodep = *iter; + if (nodep->getObject() == object && nodep->isTESelected(te)) + { + return TRUE; + } + } + return FALSE; + } +} + +// returns TRUE is any node is currenly worn as an attachment +BOOL LLObjectSelection::isAttachment() +{ + return (mSelectType == SELECT_TYPE_ATTACHMENT || mSelectType == SELECT_TYPE_HUD); +} + +//----------------------------------------------------------------------------- +// getSelectedParentObject() +//----------------------------------------------------------------------------- +LLViewerObject* getSelectedParentObject(LLViewerObject *object) +{ + LLViewerObject *parent; + while (object && (parent = (LLViewerObject*)object->getParent())) + { + if (parent->isSelected()) + { + object = parent; + } + else + { + break; + } + } + return object; +} + +//----------------------------------------------------------------------------- +// getFirstNode +//----------------------------------------------------------------------------- +LLSelectNode* LLObjectSelection::getFirstNode(LLSelectedNodeFunctor* func) +{ + for (iterator iter = begin(); iter != end(); ++iter) + { + LLSelectNode* node = *iter; + if (func == NULL || func->apply(node)) + { + return node; + } + } + return NULL; +} + +LLSelectNode* LLObjectSelection::getFirstRootNode(LLSelectedNodeFunctor* func, BOOL non_root_ok) +{ + for (root_iterator iter = root_begin(); iter != root_end(); ++iter) + { + LLSelectNode* node = *iter; + if (func == NULL || func->apply(node)) + { + return node; + } + } + if (non_root_ok) + { + // Get non root + return getFirstNode(func); + } + return NULL; +} + + +//----------------------------------------------------------------------------- +// getFirstSelectedObject +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstSelectedObject(LLSelectedNodeFunctor* func, BOOL get_parent) +{ + LLSelectNode* res = getFirstNode(func); + if (res && get_parent) + { + return getSelectedParentObject(res->getObject()); + } + else if (res) + { + return res->getObject(); + } + return NULL; +} + +//----------------------------------------------------------------------------- +// getFirstObject() +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstObject() +{ + LLSelectNode* res = getFirstNode(NULL); + return res ? res->getObject() : NULL; +} + +//----------------------------------------------------------------------------- +// getFirstRootObject() +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstRootObject(BOOL non_root_ok) +{ + LLSelectNode* res = getFirstRootNode(NULL, non_root_ok); + return res ? res->getObject() : NULL; +} + +//----------------------------------------------------------------------------- +// getFirstMoveableNode() +//----------------------------------------------------------------------------- +LLSelectNode* LLObjectSelection::getFirstMoveableNode(BOOL get_root_first) +{ + struct f : public LLSelectedNodeFunctor + { + bool apply(LLSelectNode* node) + { + LLViewerObject* obj = node->getObject(); + return obj && obj->permMove(); + } + } func; + LLSelectNode* res = get_root_first ? getFirstRootNode(&func, TRUE) : getFirstNode(&func); + return res; +} + +//----------------------------------------------------------------------------- +// getFirstCopyableObject() +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstCopyableObject(BOOL get_parent) +{ + struct f : public LLSelectedNodeFunctor + { + bool apply(LLSelectNode* node) + { + LLViewerObject* obj = node->getObject(); + return obj && obj->permCopy() && !obj->isAttachment(); + } + } func; + return getFirstSelectedObject(&func, get_parent); +} + +//----------------------------------------------------------------------------- +// getFirstDeleteableObject() +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstDeleteableObject() +{ + //RN: don't currently support deletion of child objects, as that requires separating them first + // then derezzing to trash + + struct f : public LLSelectedNodeFunctor + { + bool apply(LLSelectNode* node) + { + LLViewerObject* obj = node->getObject(); + // you can delete an object if you are the owner + // or you have permission to modify it. + if( obj && ( (obj->permModify()) || + (obj->permYouOwner()) || + (!obj->permAnyOwner()) )) // public + { + if( !obj->isAttachment() ) + { + return true; + } + } + return false; + } + } func; + LLSelectNode* node = getFirstNode(&func); + return node ? node->getObject() : NULL; +} + +//----------------------------------------------------------------------------- +// getFirstEditableObject() +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstEditableObject(BOOL get_parent) +{ + struct f : public LLSelectedNodeFunctor + { + bool apply(LLSelectNode* node) + { + LLViewerObject* obj = node->getObject(); + return obj && obj->permModify(); + } + } func; + return getFirstSelectedObject(&func, get_parent); +} + +//----------------------------------------------------------------------------- +// getFirstMoveableObject() +//----------------------------------------------------------------------------- +LLViewerObject* LLObjectSelection::getFirstMoveableObject(BOOL get_parent) +{ + struct f : public LLSelectedNodeFunctor + { + bool apply(LLSelectNode* node) + { + LLViewerObject* obj = node->getObject(); + return obj && obj->permMove(); + } + } func; + return getFirstSelectedObject(&func, get_parent); +} + +//----------------------------------------------------------------------------- +// Position + Rotation update methods called from LLViewerJoystick +//----------------------------------------------------------------------------- +bool LLSelectMgr::selectionMove(const LLVector3& displ, + F32 roll, F32 pitch, F32 yaw, U32 update_type) +{ + if (update_type == UPD_NONE) + { + return false; + } + + LLVector3 displ_global; + bool update_success = true; + bool update_position = update_type & UPD_POSITION; + bool update_rotation = update_type & UPD_ROTATION; + const bool noedit_linked_parts = !gSavedSettings.getBOOL("EditLinkedParts"); + + if (update_position) + { + // calculate the distance of the object closest to the camera origin + F32 min_dist = 1e+30f; + LLVector3 obj_pos; + for (LLObjectSelection::root_iterator it = getSelection()->root_begin(); + it != getSelection()->root_end(); ++it) + { + obj_pos = (*it)->getObject()->getPositionEdit(); + + F32 obj_dist = dist_vec(obj_pos, LLViewerCamera::getInstance()->getOrigin()); + if (obj_dist < min_dist) + { + min_dist = obj_dist; + } + } + + // factor the distance inside the displacement vector. This will get us + // equally visible movements for both close and far away selections. + min_dist = sqrt(min_dist) / 2; + displ_global.setVec(displ.mV[0]*min_dist, + displ.mV[1]*min_dist, + displ.mV[2]*min_dist); + + // equates to: Displ_global = Displ * M_cam_axes_in_global_frame + displ_global = LLViewerCamera::getInstance()->rotateToAbsolute(displ_global); + } + + LLQuaternion new_rot; + if (update_rotation) + { + // let's calculate the rotation around each camera axes + LLQuaternion qx(roll, LLViewerCamera::getInstance()->getAtAxis()); + LLQuaternion qy(pitch, LLViewerCamera::getInstance()->getLeftAxis()); + LLQuaternion qz(yaw, LLViewerCamera::getInstance()->getUpAxis()); + new_rot.setQuat(qx * qy * qz); + } + + LLViewerObject *obj; + S32 obj_count = getSelection()->getObjectCount(); + for (LLObjectSelection::root_iterator it = getSelection()->root_begin(); + it != getSelection()->root_end(); ++it ) + { + obj = (*it)->getObject(); + bool enable_pos = false, enable_rot = false; + bool perm_move = obj->permMove(); + bool perm_mod = obj->permModify(); + + LLVector3d sel_center(getSelectionCenterGlobal()); + + if (update_rotation) + { + enable_rot = perm_move + && ((perm_mod && !obj->isAttachment()) || noedit_linked_parts); + + if (enable_rot) + { + int children_count = obj->getChildren().size(); + if (obj_count > 1 && children_count > 0) + { + // for linked sets, rotate around the group center + const LLVector3 t(obj->getPositionGlobal() - sel_center); + + // Ra = T x R x T^-1 + LLMatrix4 mt; mt.setTranslation(t); + const LLMatrix4 mnew_rot(new_rot); + LLMatrix4 mt_1; mt_1.setTranslation(-t); + mt *= mnew_rot; + mt *= mt_1; + + // Rfin = Rcur * Ra + obj->setRotation(obj->getRotationEdit() * mt.quaternion()); + displ_global += mt.getTranslation(); + } + else + { + obj->setRotation(obj->getRotationEdit() * new_rot); + } + } + else + { + update_success = false; + } + } + + if (update_position) + { + // establish if object can be moved or not + enable_pos = perm_move && !obj->isAttachment() + && (perm_mod || noedit_linked_parts); + + if (enable_pos) + { + obj->setPosition(obj->getPositionEdit() + displ_global); + } + else + { + update_success = false; + } + } + + if (enable_pos && enable_rot && obj->mDrawable.notNull()) + { + gPipeline.markMoved(obj->mDrawable, TRUE); + } + } + + if (update_position && update_success && obj_count > 1) + { + updateSelectionCenter(); + } + + return update_success; +} + +void LLSelectMgr::sendSelectionMove() +{ + LLSelectNode *node = mSelectedObjects->getFirstRootNode(); + if (node == NULL) + { + return; + } + + //saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + + U32 update_type = UPD_POSITION | UPD_ROTATION; + LLViewerRegion *last_region, *curr_region = node->getObject()->getRegion(); + S32 objects_in_this_packet = 0; + + // apply to linked objects if unable to select their individual parts + if (!gSavedSettings.getBOOL("EditLinkedParts") && !getTEMode()) + { + // tell simulator to apply to whole linked sets + update_type |= UPD_LINKED_SETS; + } + + // prepare first bulk message + gMessageSystem->newMessage("MultipleObjectUpdate"); + packAgentAndSessionID(&update_type); + + LLViewerObject *obj = NULL; + for (LLObjectSelection::root_iterator it = getSelection()->root_begin(); + it != getSelection()->root_end(); ++it) + { + obj = (*it)->getObject(); + + // note: following code adapted from sendListToRegions() (@3924) + last_region = curr_region; + curr_region = obj->getRegion(); + + // if not simulator or message too big + if (curr_region != last_region + || gMessageSystem->isSendFull(NULL) + || objects_in_this_packet >= MAX_OBJECTS_PER_PACKET) + { + // send sim the current message and start new one + gMessageSystem->sendReliable(last_region->getHost()); + objects_in_this_packet = 0; + gMessageSystem->newMessage("MultipleObjectUpdate"); + packAgentAndSessionID(&update_type); + } + + // add another instance of the body of data + packMultipleUpdate(*it, &update_type); + ++objects_in_this_packet; + } + + // flush remaining messages + if (gMessageSystem->getCurrentSendTotal() > 0) + { + gMessageSystem->sendReliable(curr_region->getHost()); + } + else + { + gMessageSystem->clearMessage(); + } + + //saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); +} diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h index dd5831a3c..0a364a90f 100644 --- a/indra/newview/llviewertexteditor.h +++ b/indra/newview/llviewertexteditor.h @@ -97,8 +97,8 @@ public: // should be changed to get a different asset id from the verifier // rather than checking if a re-load is necessary. Phoenix 2007-02-27 bool hasEmbeddedInventory(); - // - std::vector > getEmbeddedItems(); + // + std::vector > getEmbeddedItems(); // private: diff --git a/indra/newview/skins/Pony-Aquablue/colors.xml b/indra/newview/skins/Pony-Aquablue/colors.xml index 71a7787df..cf9466fad 100644 --- a/indra/newview/skins/Pony-Aquablue/colors.xml +++ b/indra/newview/skins/Pony-Aquablue/colors.xml @@ -1,3 +1,3 @@ - - - + + + diff --git a/indra/newview/skins/Pony-Aquablue/colors_base.xml b/indra/newview/skins/Pony-Aquablue/colors_base.xml index 917aeea7f..f77e42294 100644 --- a/indra/newview/skins/Pony-Aquablue/colors_base.xml +++ b/indra/newview/skins/Pony-Aquablue/colors_base.xml @@ -58,11 +58,11 @@ - - - - - + + + + + diff --git a/indra/newview/skins/dark/colors_base.xml b/indra/newview/skins/dark/colors_base.xml index 52ca9f1af..8e758b6cb 100644 --- a/indra/newview/skins/dark/colors_base.xml +++ b/indra/newview/skins/dark/colors_base.xml @@ -1,206 +1,206 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/floater_clothing.xml b/indra/newview/skins/default/xui/en-us/floater_clothing.xml index 346138442..3ba01e122 100644 --- a/indra/newview/skins/default/xui/en-us/floater_clothing.xml +++ b/indra/newview/skins/default/xui/en-us/floater_clothing.xml @@ -1,16 +1,16 @@ - - - - - - - -