Merge Firestorm LGPL
commit
9fde690e7e
|
|
@ -2,9 +2,9 @@
|
|||
* @file
|
||||
* @brief
|
||||
*
|
||||
* $LicenseInfo:firstyear=2017&license=fsviewerlgpl$
|
||||
* $LicenseInfo:firstyear=2018&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2017, The Phoenix Firestorm Project, Inc.
|
||||
* Copyright (C) 2018, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
|
|
|||
|
|
@ -586,6 +586,66 @@
|
|||
<key>version</key>
|
||||
<string>2.0.1.297014</string>
|
||||
</map>
|
||||
<key>fmodstudio</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>FMOD Studio, copyright (c) Firelight Technologies Pty, Ltd., 2012-2017.</string>
|
||||
<key>description</key>
|
||||
<string>FMOD Studio audio system library</string>
|
||||
<key>license</key>
|
||||
<string>fmodstudio</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/fmodstudio.txt</string>
|
||||
<key>name</key>
|
||||
<string>fmodstudio</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6324120be383af3564f2b46b07f1b765</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodstudio-1.10.02-darwin-.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>eccdcb4a1e96bb829284d01255f4f913</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodstudio-1.10.02-linux-201801091647.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>206f34d4a262a09323bc9d03cd81a2f6</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-1.10.02-windows-173500059.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.10.02</string>
|
||||
</map>
|
||||
<key>fmodex</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
|
|
@ -2512,7 +2572,7 @@
|
|||
<key>package_description</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2017, The Phoenix Firestorm Project, Inc.</string>
|
||||
<string>Copyright (c) 2018, The Phoenix Firestorm Project, Inc.</string>
|
||||
<key>description</key>
|
||||
<string>Firestorm Viewer</string>
|
||||
<key>license</key>
|
||||
|
|
@ -3184,7 +3244,7 @@
|
|||
<key>options</key>
|
||||
<array>
|
||||
<string>--kdu</string>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--platform linux32</string>
|
||||
<string>--package</string>
|
||||
<string>--btype RelWithDebInfo</string>
|
||||
|
|
@ -3238,7 +3298,7 @@
|
|||
<key>options</key>
|
||||
<array>
|
||||
<string>--kdu</string>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--platform linux32</string>
|
||||
</array>
|
||||
</map>
|
||||
|
|
@ -3262,7 +3322,7 @@
|
|||
<key>options</key>
|
||||
<array>
|
||||
<string>--kdu</string>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--platform linux32</string>
|
||||
</array>
|
||||
</map>
|
||||
|
|
@ -3286,7 +3346,7 @@
|
|||
<key>options</key>
|
||||
<array>
|
||||
<string>--kdu</string>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--platform linux32</string>
|
||||
</array>
|
||||
</map>
|
||||
|
|
@ -3488,7 +3548,7 @@
|
|||
<map>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--kdu</string>
|
||||
<string>--version</string>
|
||||
<string>--btype RelWithDebInfo</string>
|
||||
|
|
@ -3562,7 +3622,7 @@
|
|||
<map>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--kdu</string>
|
||||
<string>--version</string>
|
||||
<string>--platform win32</string>
|
||||
|
|
@ -3598,7 +3658,7 @@
|
|||
<map>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--kdu</string>
|
||||
<string>--version</string>
|
||||
<string>--platform win32</string>
|
||||
|
|
@ -3634,7 +3694,7 @@
|
|||
<map>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>--fmodex</string>
|
||||
<string>--fmodstudio</string>
|
||||
<string>--kdu</string>
|
||||
<string>--version</string>
|
||||
<string>--platform win32</string>
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ set(cmake_SOURCE_FILES
|
|||
FindAPR.cmake
|
||||
FindAutobuild.cmake
|
||||
FindBerkeleyDB.cmake
|
||||
FindFMODSTUDIO.cmake
|
||||
FindFMODEX.cmake
|
||||
FindGLH.cmake
|
||||
FindGoogleBreakpad.cmake
|
||||
|
|
@ -38,6 +39,7 @@ set(cmake_SOURCE_FILES
|
|||
FindURIPARSER.cmake
|
||||
FindXmlRpcEpi.cmake
|
||||
FindZLIB.cmake
|
||||
FMODSTUDIO.cmake
|
||||
FMODEX.cmake
|
||||
FreeType.cmake
|
||||
GLEXT.cmake
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ if(WINDOWS)
|
|||
if( NOT ND_USE_OPENJPEG2 )
|
||||
set(debug_files ${debug_files} openjpegd.dll )
|
||||
set(release_files ${release_files} openjpeg.dll )
|
||||
else()
|
||||
else()
|
||||
set(debug_files ${debug_files} openjp2.dll )
|
||||
set(release_files ${release_files} openjp2.dll )
|
||||
endif( NOT ND_USE_OPENJPEG2 )
|
||||
|
|
@ -70,6 +70,16 @@ if(WINDOWS)
|
|||
set(release_files ${release_files} libtcmalloc_minimal.dll)
|
||||
endif(USE_TCMALLOC)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
if( NOT ND_BUILD64BIT_ARCH )
|
||||
set(debug_files ${debug_files} fmodL.dll)
|
||||
set(release_files ${release_files} fmod.dll)
|
||||
else( NOT ND_BUILD64BIT_ARCH )
|
||||
set(debug_files ${debug_files} fmodL64.dll)
|
||||
set(release_files ${release_files} fmod64.dll)
|
||||
endif( NOT ND_BUILD64BIT_ARCH )
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
if (FMODEX)
|
||||
if( NOT ND_BUILD64BIT_ARCH )
|
||||
set(debug_files ${debug_files} fmodexL.dll)
|
||||
|
|
@ -185,10 +195,15 @@ elseif(DARWIN)
|
|||
libGLOD.dylib
|
||||
libhunspell-1.3.0.dylib
|
||||
libndofdev.dylib
|
||||
libgrowl.dylib
|
||||
libgrowl.dylib
|
||||
libgrowl++.dylib
|
||||
)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
set(debug_files ${debug_files} libfmodL.dylib)
|
||||
set(release_files ${release_files} libfmod.dylib)
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
if (FMODEX)
|
||||
set(debug_files ${debug_files} libfmodexL.dylib)
|
||||
set(release_files ${release_files} libfmodex.dylib)
|
||||
|
|
@ -247,7 +262,7 @@ elseif(LINUX)
|
|||
libdb-5.1.so
|
||||
libfreetype.so.6.6.2
|
||||
libfreetype.so.6
|
||||
)
|
||||
)
|
||||
endif( NOT ND_BUILD64BIT_ARCH )
|
||||
if( NOT ND_USE_OPENJPEG2 )
|
||||
set(release_files ${release_files} libopenjpeg.so )
|
||||
|
|
@ -258,6 +273,11 @@ elseif(LINUX)
|
|||
set(release_files ${release_files} "libtcmalloc_minimal.so")
|
||||
endif (USE_TCMALLOC)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
set(debug_files ${debug_files} "libfmodL.so")
|
||||
set(release_files ${release_files} "libfmod.so")
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
#if (FMODEX)
|
||||
# set(debug_files ${debug_files} "libfmodexL.so")
|
||||
# set(release_files ${release_files} "libfmodex.so")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON
|
||||
# FMOD can be set when launching the make using the argument -DFMODEX:BOOL=ON
|
||||
# When building using proprietary binaries though (i.e. having access to LL private servers),
|
||||
# we always build with FMODEX.
|
||||
# Open source devs should use the -DFMODEX:BOOL=ON then if they want to build with FMOD, whether
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# FMOD can be set when launching the make using the argument -DFMODSTUDIO:BOOL=ON
|
||||
# When building using proprietary binaries though (i.e. having access to LL private servers),
|
||||
# we always build with FMODSTUDIO.
|
||||
# Open source devs should use the -DFMODSTUDIO:BOOL=ON then if they want to build with FMOD, whether
|
||||
# they are using USESYSTEMLIBS or not.
|
||||
if (INSTALL_PROPRIETARY)
|
||||
set(FMODSTUDIO ON CACHE BOOL "Using FMOD Studio sound library.")
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
|
||||
|
||||
if (FMODSTUDIO)
|
||||
if (USESYSTEMLIBS)
|
||||
# In that case, we use the version of the library installed on the system
|
||||
set(FMODSTUDIO_FIND_REQUIRED ON)
|
||||
include(FindFMODSTUDIO)
|
||||
else (USESYSTEMLIBS)
|
||||
if (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
# If the path have been specified in the arguments, use that
|
||||
set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
|
||||
MESSAGE(STATUS "Using FMODSTUDIO path: ${FMODSTUDIO_LIBRARIES}, ${FMODSTUDIO_INCLUDE_DIR}")
|
||||
else (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
# If not, we're going to try to get the package listed in autobuild.xml
|
||||
# Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)
|
||||
# as accessing the private LL location will fail if you don't have the credential
|
||||
include(Prebuilt)
|
||||
use_prebuilt_binary(fmodstudio)
|
||||
if (WINDOWS)
|
||||
if (NOT ND_BUILD64BIT_ARCH)
|
||||
set(FMODSTUDIO_LIBRARY
|
||||
debug fmodL_vc
|
||||
optimized fmod_vc)
|
||||
elseif (ND_BUILD64BIT_ARCH)
|
||||
set(FMODSTUDIO_LIBRARY
|
||||
debug fmodL64_vc
|
||||
optimized fmod64_vc)
|
||||
endif(NOT ND_BUILD64BIT_ARCH)
|
||||
elseif (DARWIN)
|
||||
set(FMODSTUDIO_LIBRARY
|
||||
debug fmodL
|
||||
optimized fmod)
|
||||
elseif (LINUX)
|
||||
set(FMODSTUDIO_LIBRARY
|
||||
debug fmodL
|
||||
optimized fmod)
|
||||
endif (WINDOWS)
|
||||
set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
|
||||
set(FMODSTUDIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
|
||||
endif (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
endif (USESYSTEMLIBS)
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
# - Find FMODSTUDIO
|
||||
# Find the FMODSTUDIO includes and library
|
||||
# This module defines
|
||||
# FMODSTUDIO_INCLUDE_DIR, where to find fmod.h and fmod_errors.h
|
||||
# FMODSTUDIO_LIBRARIES, the libraries needed to use FMODSTUDIO.
|
||||
# FMODSTUDIO, If false, do not try to use FMODSTUDIO.
|
||||
# also defined, but not for general use are
|
||||
# FMODSTUDIO_LIBRARY, where to find the FMODSTUDIO library.
|
||||
|
||||
FIND_PATH(FMODSTUDIO_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod)
|
||||
|
||||
SET(FMODSTUDIO_NAMES ${FMODSTUDIO_NAMES} fmod fmod_vc)
|
||||
FIND_LIBRARY(FMODSTUDIO_LIBRARY
|
||||
NAMES ${FMODSTUDIO_NAMES}
|
||||
PATH_SUFFIXES fmod
|
||||
)
|
||||
|
||||
IF (FMODSTUDIO_SDK_DIR OR WINDOWS)
|
||||
if(WINDOWS)
|
||||
set(FMODSTUDIO_SDK_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows" CACHE PATH "Path to FMODSTUDIO")
|
||||
STRING(REGEX REPLACE "\\\\" "/" FMODSTUDIO_SDK_DIR ${FMODSTUDIO_SDK_DIR})
|
||||
endif(WINDOWS)
|
||||
find_library(FMODSTUDIO_LIBRARY
|
||||
fmod_vc fmodL_vc
|
||||
PATHS
|
||||
${FMODSTUDIO_SDK_DIR}/api/lib
|
||||
${FMODSTUDIO_SDK_DIR}/api
|
||||
${FMODSTUDIO_SDK_DIR}
|
||||
)
|
||||
find_path(FMODSTUDIO_INCLUDE_DIR fmod.h
|
||||
${FMODSTUDIO_SDK_DIR}/api/inc
|
||||
${FMODSTUDIO_SDK_DIR}/api
|
||||
${FMODSTUDIO_SDK_DIR}
|
||||
)
|
||||
find_path(FMODSTUDIO_INCLUDE_DIR fmod.h
|
||||
${FMODSTUDIO_SDK_DIR}/api/inc
|
||||
${FMODSTUDIO_SDK_DIR}/api
|
||||
${FMODSTUDIO_SDK_DIR}
|
||||
)
|
||||
IF (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
SET(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
|
||||
SET(FMODSTUDIO_FOUND "YES")
|
||||
endif (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
ENDIF (FMODSTUDIO_SDK_DIR OR WINDOWS)
|
||||
|
||||
IF (FMODSTUDIO_FOUND)
|
||||
IF (NOT FMODSTUDIO_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found FMODSTUDIO: ${FMODSTUDIO_LIBRARIES}")
|
||||
ENDIF (NOT FMODSTUDIO_FIND_QUIETLY)
|
||||
ELSE (FMODSTUDIO_FOUND)
|
||||
IF (FMODSTUDIO_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find FMODSTUDIO library")
|
||||
ENDIF (FMODSTUDIO_FIND_REQUIRED)
|
||||
ENDIF (FMODSTUDIO_FOUND)
|
||||
|
||||
# Deprecated declarations.
|
||||
SET (NATIVE_FMODSTUDIO_INCLUDE_PATH ${FMODSTUDIO_INCLUDE_DIR} )
|
||||
GET_FILENAME_COMPONENT (NATIVE_FMODSTUDIO_LIB_PATH ${FMODSTUDIO_LIBRARY} PATH)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
FMODSTUDIO_LIBRARY
|
||||
FMODSTUDIO_INCLUDE_DIR
|
||||
)
|
||||
|
|
@ -177,7 +177,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|||
set(CMAKE_OSX_SYSROOT macosx10.9)
|
||||
message(STATUS "OS X SDK 10.9 found.")
|
||||
else(IS_DIRECTORY "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk")
|
||||
error("Unable to determine which OS X SDK to use. Giving up.")
|
||||
message(FATAL_ERROR "Unable to determine which OS X SDK to use. Giving up.")
|
||||
endif(IS_DIRECTORY "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk")
|
||||
|
||||
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,2 @@
|
|||
2014-02-25 10:34
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ project(llaudio)
|
|||
|
||||
include(00-Common)
|
||||
include(LLAudio)
|
||||
include(FMODSTUDIO)
|
||||
include(FMODEX)
|
||||
include(OPENAL)
|
||||
include(LLCommon)
|
||||
|
|
@ -42,6 +43,23 @@ set(llaudio_HEADER_FILES
|
|||
llwindgen.h
|
||||
)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
include_directories(
|
||||
${FMODSTUDIO_INCLUDE_DIR}
|
||||
)
|
||||
list(APPEND llaudio_SOURCE_FILES
|
||||
llaudioengine_fmodstudio.cpp
|
||||
lllistener_fmodstudio.cpp
|
||||
llstreamingaudio_fmodstudio.cpp
|
||||
)
|
||||
|
||||
list(APPEND llaudio_HEADER_FILES
|
||||
llaudioengine_fmodstudio.h
|
||||
lllistener_fmodstudio.h
|
||||
llstreamingaudio_fmodstudio.h
|
||||
)
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
if (FMODEX)
|
||||
include_directories(
|
||||
${FMODEX_INCLUDE_DIR}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,753 @@
|
|||
/**
|
||||
* @file audioengine_fmodstudio.cpp
|
||||
* @brief Implementation of LLAudioEngine class abstracting the audio
|
||||
* support as a FMOD Studio implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llstreamingaudio.h"
|
||||
#include "llstreamingaudio_fmodstudio.h"
|
||||
|
||||
#include "llaudioengine_fmodstudio.h"
|
||||
#include "lllistener_fmodstudio.h"
|
||||
|
||||
#include "llerror.h"
|
||||
#include "llmath.h"
|
||||
#include "llrand.h"
|
||||
|
||||
#include "fmod.hpp"
|
||||
#include "fmod_errors.h"
|
||||
#include "lldir.h"
|
||||
|
||||
#include "sound_ids.h"
|
||||
|
||||
#include "indra_constants.h"
|
||||
|
||||
const U32 EXTRA_SOUND_CHANNELS = 10;
|
||||
|
||||
FMOD_RESULT F_CALLBACK windDSPCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int *outchannels);
|
||||
|
||||
FMOD::ChannelGroup *LLAudioEngine_FMODSTUDIO::mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT] = {0};
|
||||
|
||||
LLAudioEngine_FMODSTUDIO::LLAudioEngine_FMODSTUDIO(bool enable_profiler, U32 resample_method)
|
||||
: mInited(false)
|
||||
, mWindGen(NULL)
|
||||
, mWindDSPDesc(NULL)
|
||||
, mWindDSP(NULL)
|
||||
, mSystem(NULL)
|
||||
, mEnableProfiler(enable_profiler)
|
||||
, mResampleMethod(resample_method)
|
||||
{
|
||||
}
|
||||
|
||||
LLAudioEngine_FMODSTUDIO::~LLAudioEngine_FMODSTUDIO()
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
|
||||
{
|
||||
if(result == FMOD_OK)
|
||||
return false;
|
||||
|
||||
if (result != FMOD_ERR_INVALID_HANDLE)
|
||||
{
|
||||
LL_WARNS() << string << " Error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << string << " Error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LLAudioEngine_FMODSTUDIO::init(const S32 num_channels, void* userdata)
|
||||
{
|
||||
U32 version;
|
||||
FMOD_RESULT result;
|
||||
|
||||
LL_DEBUGS("AppInit") << "LLAudioEngine_FMODSTUDIO::init() initializing FMOD" << LL_ENDL;
|
||||
|
||||
result = FMOD::System_Create(&mSystem);
|
||||
if(Check_FMOD_Error(result, "FMOD::System_Create"))
|
||||
return false;
|
||||
|
||||
//will call LLAudioEngine_FMODSTUDIO::allocateListener, which needs a valid mSystem pointer.
|
||||
LLAudioEngine::init(num_channels, userdata);
|
||||
|
||||
result = mSystem->getVersion(&version);
|
||||
Check_FMOD_Error(result, "FMOD::System::getVersion");
|
||||
|
||||
if (version < FMOD_VERSION)
|
||||
{
|
||||
LL_WARNS("AppInit") << "Error : You are using the wrong FMOD Studio version (" << version
|
||||
<< ")! You should be using FMOD Studio" << FMOD_VERSION << LL_ENDL;
|
||||
}
|
||||
|
||||
// In this case, all sounds, PLUS wind and stream will be software.
|
||||
result = mSystem->setSoftwareChannels(num_channels + EXTRA_SOUND_CHANNELS);
|
||||
Check_FMOD_Error(result,"FMOD::System::setSoftwareChannels");
|
||||
|
||||
FMOD_ADVANCEDSETTINGS adv_settings = { };
|
||||
adv_settings.cbSize = sizeof(FMOD_ADVANCEDSETTINGS);
|
||||
switch (mResampleMethod)
|
||||
{
|
||||
default:
|
||||
case RESAMPLE_LINEAR:
|
||||
adv_settings.resamplerMethod = FMOD_DSP_RESAMPLER_LINEAR;
|
||||
break;
|
||||
case RESAMPLE_CUBIC:
|
||||
adv_settings.resamplerMethod = FMOD_DSP_RESAMPLER_CUBIC;
|
||||
break;
|
||||
case RESAMPLE_SPLINE:
|
||||
adv_settings.resamplerMethod = FMOD_DSP_RESAMPLER_SPLINE;
|
||||
break;
|
||||
}
|
||||
|
||||
result = mSystem->setAdvancedSettings(&adv_settings);
|
||||
Check_FMOD_Error(result, "FMOD::System::setAdvancedSettings");
|
||||
|
||||
U32 fmod_flags = FMOD_INIT_NORMAL | FMOD_INIT_3D_RIGHTHANDED | FMOD_INIT_THREAD_UNSAFE;
|
||||
if(mEnableProfiler)
|
||||
{
|
||||
fmod_flags |= FMOD_INIT_PROFILE_ENABLE;
|
||||
}
|
||||
|
||||
#if LL_LINUX
|
||||
bool audio_ok = false;
|
||||
|
||||
if (!audio_ok)
|
||||
{
|
||||
if (NULL == getenv("LL_BAD_FMOD_PULSEAUDIO")) /*Flawfinder: ignore*/
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "Trying PulseAudio audio output..." << LL_ENDL;
|
||||
if((result = mSystem->setOutput(FMOD_OUTPUTTYPE_PULSEAUDIO)) == FMOD_OK &&
|
||||
(result = mSystem->init(num_channels + EXTRA_SOUND_CHANNELS, fmod_flags, const_cast<char*>(APP_NAME.c_str()))) == FMOD_OK)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "PulseAudio output initialized OKAY" << LL_ENDL;
|
||||
audio_ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Check_FMOD_Error(result, "PulseAudio audio output FAILED to initialize");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "PulseAudio audio output SKIPPED" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
if (!audio_ok)
|
||||
{
|
||||
if (NULL == getenv("LL_BAD_FMOD_ALSA")) /*Flawfinder: ignore*/
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
|
||||
if((result = mSystem->setOutput(FMOD_OUTPUTTYPE_ALSA)) == FMOD_OK &&
|
||||
(result = mSystem->init(num_channels + EXTRA_SOUND_CHANNELS, fmod_flags, 0)) == FMOD_OK)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
|
||||
audio_ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Check_FMOD_Error(result, "ALSA audio output FAILED to initialize");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "ALSA audio output SKIPPED" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
if (!audio_ok)
|
||||
{
|
||||
LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
// We're interested in logging which output method we
|
||||
// ended up with, for QA purposes.
|
||||
FMOD_OUTPUTTYPE output_type;
|
||||
if(!Check_FMOD_Error(mSystem->getOutput(&output_type), "FMOD::System::getOutput"))
|
||||
{
|
||||
switch (output_type)
|
||||
{
|
||||
case FMOD_OUTPUTTYPE_NOSOUND:
|
||||
LL_INFOS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
|
||||
case FMOD_OUTPUTTYPE_PULSEAUDIO:
|
||||
LL_INFOS("AppInit") << "Audio output: PulseAudio" << LL_ENDL; break;
|
||||
case FMOD_OUTPUTTYPE_ALSA:
|
||||
LL_INFOS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
|
||||
default:
|
||||
LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
|
||||
};
|
||||
}
|
||||
#else // LL_LINUX
|
||||
|
||||
// initialize the FMOD engine
|
||||
result = mSystem->init( num_channels + EXTRA_SOUND_CHANNELS, fmod_flags, 0);
|
||||
if (result == FMOD_ERR_OUTPUT_CREATEBUFFER)
|
||||
{
|
||||
/*
|
||||
Ok, the speaker mode selected isn't supported by this soundcard. Switch it
|
||||
back to stereo...
|
||||
*/
|
||||
result = mSystem->setSoftwareFormat(44100, FMOD_SPEAKERMODE_STEREO, 0);
|
||||
Check_FMOD_Error(result,"Error falling back to stereo mode");
|
||||
/*
|
||||
... and re-init.
|
||||
*/
|
||||
result = mSystem->init( num_channels + EXTRA_SOUND_CHANNELS, fmod_flags, 0);
|
||||
}
|
||||
if(Check_FMOD_Error(result, "Error initializing FMOD Studio"))
|
||||
return false;
|
||||
#endif
|
||||
|
||||
if (mEnableProfiler)
|
||||
{
|
||||
Check_FMOD_Error(mSystem->createChannelGroup("None", &mChannelGroups[AUDIO_TYPE_NONE]), "FMOD::System::createChannelGroup");
|
||||
Check_FMOD_Error(mSystem->createChannelGroup("SFX", &mChannelGroups[AUDIO_TYPE_SFX]), "FMOD::System::createChannelGroup");
|
||||
Check_FMOD_Error(mSystem->createChannelGroup("UI", &mChannelGroups[AUDIO_TYPE_UI]), "FMOD::System::createChannelGroup");
|
||||
Check_FMOD_Error(mSystem->createChannelGroup("Ambient", &mChannelGroups[AUDIO_TYPE_AMBIENT]), "FMOD::System::createChannelGroup");
|
||||
}
|
||||
|
||||
// set up our favourite FMOD-native streaming audio implementation if none has already been added
|
||||
if (!getStreamingAudioImpl()) // no existing implementation added
|
||||
setStreamingAudioImpl(new LLStreamingAudio_FMODSTUDIO(mSystem));
|
||||
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init() FMOD Studio initialized correctly" << LL_ENDL;
|
||||
|
||||
FMOD_ADVANCEDSETTINGS adv_settings_dump = { };
|
||||
mSystem->getAdvancedSettings(&adv_settings_dump);
|
||||
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): resampler=" << adv_settings.resamplerMethod << " bytes" << LL_ENDL;
|
||||
|
||||
int r_numbuffers, r_samplerate, r_channels;
|
||||
unsigned int r_bufferlength;
|
||||
mSystem->getDSPBufferSize(&r_bufferlength, &r_numbuffers);
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_bufferlength=" << r_bufferlength << " bytes" << LL_ENDL;
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_numbuffers=" << r_numbuffers << LL_ENDL;
|
||||
|
||||
char r_name[512];
|
||||
mSystem->getDriverInfo(0, r_name, 511, NULL, &r_samplerate, NULL, &r_channels);
|
||||
r_name[511] = '\0';
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_name=\"" << r_name << "\"" << LL_ENDL;
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_samplerate=" << r_samplerate << "Hz" << LL_ENDL;
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_channels=" << r_channels << LL_ENDL;
|
||||
|
||||
int latency = 100; // optimistic default - i suspect if sample rate is 0, everything breaks.
|
||||
if ( r_samplerate != 0 )
|
||||
latency = (int)(1000.0f * r_bufferlength * r_numbuffers / r_samplerate);
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): latency=" << latency << "ms" << LL_ENDL;
|
||||
|
||||
mInited = true;
|
||||
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): initialization complete." << LL_ENDL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
std::string LLAudioEngine_FMODSTUDIO::getDriverName(bool verbose)
|
||||
{
|
||||
llassert_always(mSystem);
|
||||
if (verbose)
|
||||
{
|
||||
U32 version;
|
||||
if(!Check_FMOD_Error(mSystem->getVersion(&version), "FMOD::System::getVersion"))
|
||||
{
|
||||
return llformat("FMOD Studio %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
|
||||
}
|
||||
}
|
||||
return "FMOD Studio";
|
||||
}
|
||||
|
||||
|
||||
void LLAudioEngine_FMODSTUDIO::allocateListener(void)
|
||||
{
|
||||
try
|
||||
{
|
||||
mListenerp = (LLListener *) new LLListener_FMODSTUDIO(mSystem);
|
||||
}
|
||||
catch (const std::bad_alloc& e)
|
||||
{
|
||||
LL_WARNS() << "Listener allocation failed due to: " << e.what() << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLAudioEngine_FMODSTUDIO::shutdown()
|
||||
{
|
||||
LL_INFOS() << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
||||
LLAudioEngine::shutdown();
|
||||
|
||||
LL_INFOS() << "LLAudioEngine_FMODSTUDIO::shutdown() closing FMOD Studio" << LL_ENDL;
|
||||
if ( mSystem ) // speculative fix for MAINT-2657
|
||||
{
|
||||
Check_FMOD_Error(mSystem->close(), "FMOD::System::close");
|
||||
Check_FMOD_Error(mSystem->release(), "FMOD::System::release");
|
||||
}
|
||||
LL_INFOS() << "LLAudioEngine_FMODSTUDIO::shutdown() done closing FMOD Studio" << LL_ENDL;
|
||||
|
||||
delete mListenerp;
|
||||
mListenerp = NULL;
|
||||
}
|
||||
|
||||
|
||||
LLAudioBuffer * LLAudioEngine_FMODSTUDIO::createBuffer()
|
||||
{
|
||||
return new LLAudioBufferFMODSTUDIO(mSystem);
|
||||
}
|
||||
|
||||
|
||||
LLAudioChannel * LLAudioEngine_FMODSTUDIO::createChannel()
|
||||
{
|
||||
return new LLAudioChannelFMODSTUDIO(mSystem);
|
||||
}
|
||||
|
||||
bool LLAudioEngine_FMODSTUDIO::initWind()
|
||||
{
|
||||
mNextWindUpdate = 0.0;
|
||||
|
||||
cleanupWind();
|
||||
|
||||
mWindDSPDesc = new FMOD_DSP_DESCRIPTION();
|
||||
memset(mWindDSPDesc, 0, sizeof(*mWindDSPDesc)); //Set everything to zero
|
||||
mWindDSPDesc->pluginsdkversion = FMOD_PLUGIN_SDK_VERSION;
|
||||
strncpy(mWindDSPDesc->name, "Wind Unit", sizeof(mWindDSPDesc->name)); //Set name to "Wind Unit"
|
||||
mWindDSPDesc->numoutputbuffers = 1;
|
||||
mWindDSPDesc->read = &windDSPCallback; //Assign callback.
|
||||
if (Check_FMOD_Error(mSystem->createDSP(mWindDSPDesc, &mWindDSP), "FMOD::createDSP") || !mWindDSP)
|
||||
return false;
|
||||
|
||||
int frequency = 44100;
|
||||
FMOD_SPEAKERMODE mode;
|
||||
if (!Check_FMOD_Error(mSystem->getSoftwareFormat(&frequency, &mode, nullptr), "FMOD::System::getSoftwareFormat"))
|
||||
{
|
||||
mWindGen = new LLWindGen<MIXBUFFERFORMAT>((U32)frequency);
|
||||
|
||||
if (!Check_FMOD_Error(mWindDSP->setUserData((void*)mWindGen), "FMOD::DSP::setUserData") &&
|
||||
!Check_FMOD_Error(mWindDSP->setChannelFormat(FMOD_CHANNELMASK_STEREO, 2, mode), "FMOD::DSP::setChannelFormat") &&
|
||||
!Check_FMOD_Error(mSystem->playDSP(mWindDSP, nullptr, false, nullptr), "FMOD::System::playDSP"))
|
||||
return true; //Success
|
||||
}
|
||||
|
||||
cleanupWind();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioEngine_FMODSTUDIO::cleanupWind()
|
||||
{
|
||||
if (mWindDSP)
|
||||
{
|
||||
FMOD::ChannelGroup* mastergroup = NULL;
|
||||
if (!Check_FMOD_Error(mSystem->getMasterChannelGroup(&mastergroup), "FMOD::System::getMasterChannelGroup") && mastergroup)
|
||||
Check_FMOD_Error(mastergroup->removeDSP(mWindDSP), "FMOD::ChannelGroup::removeDSP");
|
||||
Check_FMOD_Error(mWindDSP->release(), "FMOD::DSP::release");
|
||||
mWindDSP = NULL;
|
||||
}
|
||||
|
||||
delete mWindDSPDesc;
|
||||
mWindDSPDesc = NULL;
|
||||
|
||||
delete mWindGen;
|
||||
mWindGen = NULL;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLAudioEngine_FMODSTUDIO::updateWind(LLVector3 wind_vec, F32 camera_height_above_water)
|
||||
{
|
||||
LLVector3 wind_pos;
|
||||
F64 pitch;
|
||||
F64 center_freq;
|
||||
|
||||
if (!mEnableWind)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL))
|
||||
{
|
||||
|
||||
// wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up)
|
||||
// need to convert this to the conventional orientation DS3D and OpenAL use
|
||||
// where +X = right, +Y = up, +Z = backwards
|
||||
|
||||
wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]);
|
||||
|
||||
// cerr << "Wind update" << endl;
|
||||
|
||||
pitch = 1.0 + mapWindVecToPitch(wind_vec);
|
||||
center_freq = 80.0 * pow(pitch,2.5*(mapWindVecToGain(wind_vec)+1.0));
|
||||
|
||||
mWindGen->mTargetFreq = (F32)center_freq;
|
||||
mWindGen->mTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain;
|
||||
mWindGen->mTargetPanGainR = (F32)mapWindVecToPan(wind_vec);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLAudioEngine_FMODSTUDIO::setInternalGain(F32 gain)
|
||||
{
|
||||
if (!mInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gain = llclamp( gain, 0.0f, 1.0f );
|
||||
|
||||
FMOD::ChannelGroup *master_group;
|
||||
if(Check_FMOD_Error(mSystem->getMasterChannelGroup(&master_group), "FMOD::System::getMasterChannelGroup"))
|
||||
return;
|
||||
|
||||
master_group->setVolume(gain);
|
||||
|
||||
LLStreamingAudioInterface *saimpl = getStreamingAudioImpl();
|
||||
if ( saimpl )
|
||||
{
|
||||
// fmod likes its streaming audio channel gain re-asserted after
|
||||
// master volume change.
|
||||
saimpl->setGain(saimpl->getGain());
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// LLAudioChannelFMODSTUDIO implementation
|
||||
//
|
||||
|
||||
LLAudioChannelFMODSTUDIO::LLAudioChannelFMODSTUDIO(FMOD::System *system) : LLAudioChannel(), mSystemp(system), mChannelp(NULL), mLastSamplePos(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LLAudioChannelFMODSTUDIO::~LLAudioChannelFMODSTUDIO()
|
||||
{
|
||||
cleanup();
|
||||
}
|
||||
|
||||
bool LLAudioChannelFMODSTUDIO::updateBuffer()
|
||||
{
|
||||
if (mCurrentSourcep)
|
||||
{
|
||||
if (LLAudioChannel::updateBuffer())
|
||||
{
|
||||
// Base class update returned true, which means that we need to actually
|
||||
// set up the channel for a different buffer.
|
||||
|
||||
LLAudioBufferFMODSTUDIO *bufferp = (LLAudioBufferFMODSTUDIO *) mCurrentSourcep->getCurrentBuffer();
|
||||
|
||||
// Grab the FMOD sample associated with the buffer
|
||||
FMOD::Sound *soundp = bufferp->getSound();
|
||||
if (!soundp)
|
||||
{
|
||||
// This is bad, there should ALWAYS be a sound associated with a legit
|
||||
// buffer.
|
||||
LL_ERRS() << "No FMOD sound!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Actually play the sound. Start it off paused so we can do all the necessary
|
||||
// setup.
|
||||
if (!mChannelp)
|
||||
{
|
||||
FMOD_RESULT result = getSystem()->playSound(soundp, nullptr, true, &mChannelp);
|
||||
Check_FMOD_Error(result, "FMOD::System::playSound");
|
||||
}
|
||||
|
||||
//LL_INFOS() << "Setting up channel " << std::hex << mChannelID << std::dec << LL_ENDL;
|
||||
}
|
||||
|
||||
//FMOD_RESULT result;
|
||||
|
||||
mChannelp->setVolume(getSecondaryGain() * mCurrentSourcep->getGain());
|
||||
//Check_FMOD_Error(result, "FMOD::Channel::setVolume");
|
||||
|
||||
mChannelp->setMode(mCurrentSourcep->isLoop() ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF);
|
||||
/*if(Check_FMOD_Error(result, "FMOD::Channel::setMode"))
|
||||
{
|
||||
S32 index;
|
||||
mChannelp->getIndex(&index);
|
||||
LL_WARNS() << "Channel " << index << "Source ID: " << mCurrentSourcep->getID()
|
||||
<< " at " << mCurrentSourcep->getPositionGlobal() << LL_ENDL;
|
||||
}*/
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "No source buffer!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::update3DPosition()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
// We're not actually a live channel (i.e., we're not playing back anything)
|
||||
return;
|
||||
}
|
||||
|
||||
LLAudioBufferFMODSTUDIO *bufferp = (LLAudioBufferFMODSTUDIO *)mCurrentBufferp;
|
||||
if (!bufferp)
|
||||
{
|
||||
// We don't have a buffer associated with us (should really have been picked up
|
||||
// by the above if.
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCurrentSourcep->isAmbient())
|
||||
{
|
||||
// Ambient sound, don't need to do any positional updates.
|
||||
set3DMode(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Localized sound. Update the position and velocity of the sound.
|
||||
set3DMode(true);
|
||||
|
||||
LLVector3 float_pos;
|
||||
float_pos.setVec(mCurrentSourcep->getPositionGlobal());
|
||||
FMOD_RESULT result = mChannelp->set3DAttributes((FMOD_VECTOR*)float_pos.mV, (FMOD_VECTOR*)mCurrentSourcep->getVelocity().mV);
|
||||
Check_FMOD_Error(result, "FMOD::Channel::set3DAttributes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::updateLoop()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
// May want to clear up the loop/sample counters.
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Hack: We keep track of whether we looped or not by seeing when the
|
||||
// sample position looks like it's going backwards. Not reliable; may
|
||||
// yield false negatives.
|
||||
//
|
||||
U32 cur_pos;
|
||||
Check_FMOD_Error(mChannelp->getPosition(&cur_pos,FMOD_TIMEUNIT_PCMBYTES),"FMOD::Channel::getPosition");
|
||||
|
||||
if (cur_pos < (U32)mLastSamplePos)
|
||||
{
|
||||
mLoopedThisFrame = true;
|
||||
}
|
||||
mLastSamplePos = cur_pos;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::cleanup()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
//LL_INFOS() << "Aborting cleanup with no channel handle." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
//LL_INFOS() << "Cleaning up channel: " << mChannelID << LL_ENDL;
|
||||
Check_FMOD_Error(mChannelp->stop(),"FMOD::Channel::stop");
|
||||
|
||||
mCurrentBufferp = NULL;
|
||||
mChannelp = NULL;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::play()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
LL_WARNS() << "Playing without a channel handle, aborting" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
Check_FMOD_Error(mChannelp->setPaused(false), "FMOD::Channel::setPaused");
|
||||
|
||||
getSource()->setPlayedOnce(true);
|
||||
|
||||
if(LLAudioEngine_FMODSTUDIO::mChannelGroups[getSource()->getType()])
|
||||
Check_FMOD_Error(mChannelp->setChannelGroup(LLAudioEngine_FMODSTUDIO::mChannelGroups[getSource()->getType()]),"FMOD::Channel::setChannelGroup");
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::playSynced(LLAudioChannel *channelp)
|
||||
{
|
||||
LLAudioChannelFMODSTUDIO *fmod_channelp = (LLAudioChannelFMODSTUDIO*)channelp;
|
||||
if (!(fmod_channelp->mChannelp && mChannelp))
|
||||
{
|
||||
// Don't have channels allocated to both the master and the slave
|
||||
return;
|
||||
}
|
||||
|
||||
U32 cur_pos;
|
||||
if(Check_FMOD_Error(mChannelp->getPosition(&cur_pos,FMOD_TIMEUNIT_PCMBYTES), "Unable to retrieve current position"))
|
||||
return;
|
||||
|
||||
cur_pos %= mCurrentBufferp->getLength();
|
||||
|
||||
// Try to match the position of our sync master
|
||||
Check_FMOD_Error(mChannelp->setPosition(cur_pos,FMOD_TIMEUNIT_PCMBYTES),"Unable to set current position");
|
||||
|
||||
// Start us playing
|
||||
play();
|
||||
}
|
||||
|
||||
|
||||
bool LLAudioChannelFMODSTUDIO::isPlaying()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool paused, playing;
|
||||
Check_FMOD_Error(mChannelp->getPaused(&paused),"FMOD::Channel::getPaused");
|
||||
Check_FMOD_Error(mChannelp->isPlaying(&playing),"FMOD::Channel::isPlaying");
|
||||
return !paused && playing;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// LLAudioChannelFMODSTUDIO implementation
|
||||
//
|
||||
|
||||
|
||||
LLAudioBufferFMODSTUDIO::LLAudioBufferFMODSTUDIO(FMOD::System *system) : mSystemp(system), mSoundp(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LLAudioBufferFMODSTUDIO::~LLAudioBufferFMODSTUDIO()
|
||||
{
|
||||
if(mSoundp)
|
||||
{
|
||||
Check_FMOD_Error(mSoundp->release(),"FMOD::Sound::Release");
|
||||
mSoundp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool LLAudioBufferFMODSTUDIO::loadWAV(const std::string& filename)
|
||||
{
|
||||
// Try to open a wav file from disk. This will eventually go away, as we don't
|
||||
// really want to block doing this.
|
||||
if (filename.empty())
|
||||
{
|
||||
// invalid filename, abort.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!gDirUtilp->fileExists(filename))
|
||||
{
|
||||
// File not found, abort.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mSoundp)
|
||||
{
|
||||
// If there's already something loaded in this buffer, clean it up.
|
||||
Check_FMOD_Error(mSoundp->release(),"FMOD::Sound::release");
|
||||
mSoundp = NULL;
|
||||
}
|
||||
|
||||
FMOD_MODE base_mode = FMOD_LOOP_NORMAL;
|
||||
FMOD_CREATESOUNDEXINFO exinfo;
|
||||
memset(&exinfo,0,sizeof(exinfo));
|
||||
exinfo.cbsize = sizeof(exinfo);
|
||||
exinfo.suggestedsoundtype = FMOD_SOUND_TYPE_WAV; //Hint to speed up loading.
|
||||
// Load up the wav file into an fmod sample
|
||||
FMOD_RESULT result = getSystem()->createSound(filename.c_str(), base_mode, &exinfo, &mSoundp);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
// We failed to load the file for some reason.
|
||||
LL_WARNS() << "Could not load data '" << filename << "': " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
|
||||
//
|
||||
// If we EVER want to load wav files provided by end users, we need
|
||||
// to rethink this!
|
||||
//
|
||||
// file is probably corrupt - remove it.
|
||||
LLFile::remove(filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Everything went well, return true
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
U32 LLAudioBufferFMODSTUDIO::getLength()
|
||||
{
|
||||
if (!mSoundp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
U32 length;
|
||||
Check_FMOD_Error(mSoundp->getLength(&length, FMOD_TIMEUNIT_PCMBYTES),"FMOD::Sound::getLength");
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::set3DMode(bool use3d)
|
||||
{
|
||||
FMOD_MODE current_mode;
|
||||
if(Check_FMOD_Error(mChannelp->getMode(¤t_mode),"FMOD::Channel::getMode"))
|
||||
return;
|
||||
FMOD_MODE new_mode = current_mode;
|
||||
new_mode &= ~(use3d ? FMOD_2D : FMOD_3D);
|
||||
new_mode |= use3d ? FMOD_3D : FMOD_2D;
|
||||
|
||||
if(current_mode != new_mode)
|
||||
{
|
||||
Check_FMOD_Error(mChannelp->setMode(new_mode),"FMOD::Channel::setMode");
|
||||
}
|
||||
}
|
||||
|
||||
// *NOTE: This is almost certainly being called on the mixer thread,
|
||||
// not the main thread. May have implications for callees or audio
|
||||
// engine shutdown.
|
||||
|
||||
FMOD_RESULT F_CALLBACK windDSPCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int *outchannels)
|
||||
{
|
||||
// inbuffer = incomming data.
|
||||
// newbuffer = outgoing data. AKA this DSP's output.
|
||||
// length = length in samples at this mix time. True buffer size, in bytes, would be (length * sizeof(float) * inchannels).
|
||||
// userdata = user-provided data attached this DSP via FMOD::DSP::setUserData.
|
||||
|
||||
LLWindGen<LLAudioEngine_FMODSTUDIO::MIXBUFFERFORMAT> *windgen;
|
||||
FMOD::DSP *thisdsp = (FMOD::DSP *)dsp_state->instance;
|
||||
|
||||
thisdsp->getUserData((void **)&windgen);
|
||||
|
||||
if (windgen)
|
||||
windgen->windGenerate((LLAudioEngine_FMODSTUDIO::MIXBUFFERFORMAT *)outbuffer, length);
|
||||
|
||||
return FMOD_OK;
|
||||
}
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
/**
|
||||
* @file audioengine_fmodstudio.h
|
||||
* @brief Definition of LLAudioEngine class abstracting the audio
|
||||
* support as a FMOD Studio implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_AUDIOENGINE_FMODSTUDIO_H
|
||||
#define LL_AUDIOENGINE_FMODSTUDIO_H
|
||||
|
||||
#include "llaudioengine.h"
|
||||
#include "llwindgen.h"
|
||||
|
||||
//Stubs
|
||||
class LLAudioStreamManagerFMODSTUDIO;
|
||||
namespace FMOD
|
||||
{
|
||||
class System;
|
||||
class Channel;
|
||||
class ChannelGroup;
|
||||
class Sound;
|
||||
class DSP;
|
||||
}
|
||||
typedef struct FMOD_DSP_DESCRIPTION FMOD_DSP_DESCRIPTION;
|
||||
|
||||
//Interfaces
|
||||
class LLAudioEngine_FMODSTUDIO : public LLAudioEngine
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
RESAMPLE_LINEAR=0,
|
||||
RESAMPLE_CUBIC,
|
||||
RESAMPLE_SPLINE
|
||||
};
|
||||
LLAudioEngine_FMODSTUDIO(bool enable_profiler, U32 resample_method);
|
||||
virtual ~LLAudioEngine_FMODSTUDIO();
|
||||
|
||||
// initialization/startup/shutdown
|
||||
virtual bool init(const S32 num_channels, void *user_data);
|
||||
virtual std::string getDriverName(bool verbose);
|
||||
virtual void allocateListener();
|
||||
|
||||
virtual void shutdown();
|
||||
|
||||
/*virtual*/ bool initWind();
|
||||
/*virtual*/ void cleanupWind();
|
||||
|
||||
/*virtual*/void updateWind(LLVector3 direction, F32 camera_height_above_water);
|
||||
|
||||
typedef F32 MIXBUFFERFORMAT;
|
||||
|
||||
FMOD::System *getSystem() const {return mSystem;}
|
||||
protected:
|
||||
/*virtual*/ LLAudioBuffer *createBuffer(); // Get a free buffer, or flush an existing one if you have to.
|
||||
/*virtual*/ LLAudioChannel *createChannel(); // Create a new audio channel.
|
||||
|
||||
/*virtual*/ void setInternalGain(F32 gain);
|
||||
|
||||
bool mInited;
|
||||
|
||||
LLWindGen<MIXBUFFERFORMAT> *mWindGen;
|
||||
|
||||
FMOD_DSP_DESCRIPTION *mWindDSPDesc;
|
||||
FMOD::DSP *mWindDSP;
|
||||
FMOD::System *mSystem;
|
||||
bool mEnableProfiler;
|
||||
U32 mResampleMethod;
|
||||
|
||||
public:
|
||||
static FMOD::ChannelGroup *mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT];
|
||||
};
|
||||
|
||||
|
||||
class LLAudioChannelFMODSTUDIO : public LLAudioChannel
|
||||
{
|
||||
public:
|
||||
LLAudioChannelFMODSTUDIO(FMOD::System *audioengine);
|
||||
virtual ~LLAudioChannelFMODSTUDIO();
|
||||
|
||||
protected:
|
||||
/*virtual*/ void play();
|
||||
/*virtual*/ void playSynced(LLAudioChannel *channelp);
|
||||
/*virtual*/ void cleanup();
|
||||
/*virtual*/ bool isPlaying();
|
||||
|
||||
/*virtual*/ bool updateBuffer();
|
||||
/*virtual*/ void update3DPosition();
|
||||
/*virtual*/ void updateLoop();
|
||||
|
||||
void set3DMode(bool use3d);
|
||||
protected:
|
||||
FMOD::System *getSystem() const {return mSystemp;}
|
||||
FMOD::System *mSystemp;
|
||||
FMOD::Channel *mChannelp;
|
||||
S32 mLastSamplePos;
|
||||
};
|
||||
|
||||
|
||||
class LLAudioBufferFMODSTUDIO : public LLAudioBuffer
|
||||
{
|
||||
public:
|
||||
LLAudioBufferFMODSTUDIO(FMOD::System *audioengine);
|
||||
virtual ~LLAudioBufferFMODSTUDIO();
|
||||
|
||||
/*virtual*/ bool loadWAV(const std::string& filename);
|
||||
/*virtual*/ U32 getLength();
|
||||
friend class LLAudioChannelFMODSTUDIO;
|
||||
protected:
|
||||
FMOD::System *getSystem() const {return mSystemp;}
|
||||
FMOD::System *mSystemp;
|
||||
FMOD::Sound *getSound() const{ return mSoundp; }
|
||||
FMOD::Sound *mSoundp;
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_AUDIOENGINE_FMODSTUDIO_H
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
/**
|
||||
* @file listener_fmodstudio.cpp
|
||||
* @brief Implementation of LISTENER class abstracting the audio
|
||||
* support as a FMOD Studio implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llaudioengine.h"
|
||||
#include "lllistener_fmodstudio.h"
|
||||
#include "fmod.hpp"
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// constructor
|
||||
//-----------------------------------------------------------------------
|
||||
LLListener_FMODSTUDIO::LLListener_FMODSTUDIO(FMOD::System *system)
|
||||
: LLListener(),
|
||||
mDopplerFactor(1.0f),
|
||||
mRolloffFactor(1.0f)
|
||||
{
|
||||
mSystem = system;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
LLListener_FMODSTUDIO::~LLListener_FMODSTUDIO()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::translate(LLVector3 offset)
|
||||
{
|
||||
LLListener::translate(offset);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::setPosition(LLVector3 pos)
|
||||
{
|
||||
LLListener::setPosition(pos);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::setVelocity(LLVector3 vel)
|
||||
{
|
||||
LLListener::setVelocity(vel);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, NULL, (FMOD_VECTOR*)mVelocity.mV, NULL, NULL);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::orient(LLVector3 up, LLVector3 at)
|
||||
{
|
||||
LLListener::orient(up, at);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, NULL, NULL, (FMOD_VECTOR*)at.mV, (FMOD_VECTOR*)up.mV);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::commitDeferredChanges()
|
||||
{
|
||||
if(!mSystem)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mSystem->update();
|
||||
}
|
||||
|
||||
|
||||
void LLListener_FMODSTUDIO::setRolloffFactor(F32 factor)
|
||||
{
|
||||
//An internal FMOD Studio optimization skips 3D updates if there have not been changes to the 3D sound environment.
|
||||
//Sadly, a change in rolloff is not accounted for, thus we must touch the listener properties as well.
|
||||
//In short: Changing the position ticks a dirtyflag inside fmod studio, which makes it not skip 3D processing next update call.
|
||||
if(mRolloffFactor != factor)
|
||||
{
|
||||
LLVector3 tmp_pos = mPosition - LLVector3(0.f,0.f,.1f);
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*) tmp_pos.mV, NULL, NULL, NULL);
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*) mPosition.mV, NULL, NULL, NULL);
|
||||
}
|
||||
mRolloffFactor = factor;
|
||||
mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
|
||||
}
|
||||
|
||||
|
||||
F32 LLListener_FMODSTUDIO::getRolloffFactor()
|
||||
{
|
||||
return mRolloffFactor;
|
||||
}
|
||||
|
||||
|
||||
void LLListener_FMODSTUDIO::setDopplerFactor(F32 factor)
|
||||
{
|
||||
mDopplerFactor = factor;
|
||||
mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
|
||||
}
|
||||
|
||||
|
||||
F32 LLListener_FMODSTUDIO::getDopplerFactor()
|
||||
{
|
||||
return mDopplerFactor;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* @file listener_fmodstudio.h
|
||||
* @brief Description of LISTENER class abstracting the audio support
|
||||
* as an FMOD Studio implementation (windows and Linux)
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LISTENER_FMODSTUDIO_H
|
||||
#define LL_LISTENER_FMODSTUDIO_H
|
||||
|
||||
#include "lllistener.h"
|
||||
|
||||
//Stubs
|
||||
namespace FMOD
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
//Interfaces
|
||||
class LLListener_FMODSTUDIO : public LLListener
|
||||
{
|
||||
public:
|
||||
LLListener_FMODSTUDIO(FMOD::System *system);
|
||||
virtual ~LLListener_FMODSTUDIO();
|
||||
|
||||
virtual void translate(LLVector3 offset);
|
||||
virtual void setPosition(LLVector3 pos);
|
||||
virtual void setVelocity(LLVector3 vel);
|
||||
virtual void orient(LLVector3 up, LLVector3 at);
|
||||
virtual void commitDeferredChanges();
|
||||
|
||||
virtual void setDopplerFactor(F32 factor);
|
||||
virtual F32 getDopplerFactor();
|
||||
virtual void setRolloffFactor(F32 factor);
|
||||
virtual F32 getRolloffFactor();
|
||||
protected:
|
||||
FMOD::System *mSystem;
|
||||
F32 mDopplerFactor;
|
||||
F32 mRolloffFactor;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,526 @@
|
|||
/**
|
||||
* @file streamingaudio_fmodstudio.cpp
|
||||
* @brief LLStreamingAudio_FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llmath.h"
|
||||
|
||||
#include "fmod.hpp"
|
||||
#include "fmod_errors.h"
|
||||
|
||||
#include "llstreamingaudio_fmodstudio.h"
|
||||
|
||||
inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
|
||||
{
|
||||
if (result == FMOD_OK)
|
||||
return false;
|
||||
LL_WARNS("AudioImpl") << string << " Error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
class LLAudioStreamManagerFMODSTUDIO
|
||||
{
|
||||
public:
|
||||
LLAudioStreamManagerFMODSTUDIO(FMOD::System *system, FMOD::ChannelGroup *group, const std::string& url);
|
||||
FMOD::Channel* startStream();
|
||||
bool stopStream(); // Returns true if the stream was successfully stopped.
|
||||
bool ready();
|
||||
|
||||
const std::string& getURL() { return mInternetStreamURL; }
|
||||
|
||||
FMOD_RESULT getOpenState(FMOD_OPENSTATE& openstate, unsigned int* percentbuffered = NULL, bool* starving = NULL, bool* diskbusy = NULL);
|
||||
protected:
|
||||
FMOD::System* mSystem;
|
||||
FMOD::ChannelGroup* mChannelGroup;
|
||||
FMOD::Channel* mStreamChannel;
|
||||
FMOD::Sound* mInternetStream;
|
||||
bool mReady;
|
||||
|
||||
std::string mInternetStreamURL;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Internet Streaming
|
||||
//---------------------------------------------------------------------------
|
||||
LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) :
|
||||
mSystem(system),
|
||||
mCurrentInternetStreamp(NULL),
|
||||
mStreamGroup(NULL),
|
||||
mFMODInternetStreamChannelp(NULL),
|
||||
mGain(1.0f)
|
||||
{
|
||||
FMOD_RESULT result;
|
||||
|
||||
// Number of milliseconds of audio to buffer for the audio card.
|
||||
// Must be larger than the usual Second Life frame stutter time.
|
||||
const U32 buffer_seconds = 10; //sec
|
||||
const U32 estimated_bitrate = 128; //kbit/sec
|
||||
result = mSystem->setStreamBufferSize(estimated_bitrate * buffer_seconds * 128/*bytes/kbit*/, FMOD_TIMEUNIT_RAWBYTES);
|
||||
Check_FMOD_Error(result, "FMOD::System::setStreamBufferSize");
|
||||
|
||||
Check_FMOD_Error(system->createChannelGroup("stream", &mStreamGroup), "FMOD::System::createChannelGroup");
|
||||
}
|
||||
|
||||
LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
|
||||
{
|
||||
stop();
|
||||
for (U32 i = 0; i < 100; ++i)
|
||||
{
|
||||
if (releaseDeadStreams())
|
||||
break;
|
||||
ms_sleep(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::start(const std::string& url)
|
||||
{
|
||||
//if (!mInited)
|
||||
//{
|
||||
// LL_WARNS() << "startInternetStream before audio initialized" << LL_ENDL;
|
||||
// return;
|
||||
//}
|
||||
|
||||
// "stop" stream but don't clear url, etc. in case url == mInternetStreamURL
|
||||
stop();
|
||||
|
||||
if (!url.empty())
|
||||
{
|
||||
if(mDeadStreams.empty())
|
||||
{
|
||||
LL_INFOS() << "Starting internet stream: " << url << LL_ENDL;
|
||||
mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem, mStreamGroup, url);
|
||||
mURL = url;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Deferring stream load until buffer release: " << url << LL_ENDL;
|
||||
mPendingURL = url;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Set internet stream to null" << LL_ENDL;
|
||||
mURL.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::update()
|
||||
{
|
||||
if (!releaseDeadStreams())
|
||||
{
|
||||
llassert_always(mCurrentInternetStreamp == NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!mPendingURL.empty())
|
||||
{
|
||||
llassert_always(mCurrentInternetStreamp == NULL);
|
||||
LL_INFOS() << "Starting internet stream: " << mPendingURL << LL_ENDL;
|
||||
mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem, mStreamGroup, mPendingURL);
|
||||
mURL = mPendingURL;
|
||||
mPendingURL.clear();
|
||||
}
|
||||
|
||||
// Don't do anything if there are no streams playing
|
||||
if (!mCurrentInternetStreamp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int progress;
|
||||
bool starving;
|
||||
bool diskbusy;
|
||||
FMOD_OPENSTATE open_state;
|
||||
FMOD_RESULT result = mCurrentInternetStreamp->getOpenState(open_state, &progress, &starving, &diskbusy);
|
||||
|
||||
if (result != FMOD_OK || open_state == FMOD_OPENSTATE_ERROR)
|
||||
{
|
||||
stop();
|
||||
return;
|
||||
}
|
||||
else if (open_state == FMOD_OPENSTATE_READY)
|
||||
{
|
||||
// Stream is live
|
||||
|
||||
// start the stream if it's ready
|
||||
if (!mFMODInternetStreamChannelp &&
|
||||
(mFMODInternetStreamChannelp = mCurrentInternetStreamp->startStream()))
|
||||
{
|
||||
// Reset volume to previously set volume
|
||||
setGain(getGain());
|
||||
Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(false), "FMOD::Channel::setPaused");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(mFMODInternetStreamChannelp)
|
||||
{
|
||||
FMOD::Sound *sound = NULL;
|
||||
|
||||
// <DKO> FmodEX Error checking
|
||||
//if(mFMODInternetStreamChannelp->getCurrentSound(&sound) == FMOD_OK && sound)
|
||||
if (!Check_FMOD_Error(mFMODInternetStreamChannelp->getCurrentSound(&sound), "FMOD::Channel::getCurrentSound") && sound)
|
||||
// </FS:CR>
|
||||
{
|
||||
FMOD_TAG tag;
|
||||
S32 tagcount, dirtytagcount;
|
||||
|
||||
// <DKO> FmodEX Error checking
|
||||
//if(sound->getNumTags(&tagcount, &dirtytagcount) == FMOD_OK && dirtytagcount)
|
||||
if (!Check_FMOD_Error(sound->getNumTags(&tagcount, &dirtytagcount), "FMOD::Sound::getNumTags") && dirtytagcount)
|
||||
// </FS:CR>
|
||||
{
|
||||
// <DKO> Stream metadata - originally by Shyotl Khur
|
||||
mMetadata.clear();
|
||||
mNewMetadata = true;
|
||||
// </DKO>
|
||||
for(S32 i = 0; i < tagcount; ++i)
|
||||
{
|
||||
if(sound->getTag(NULL, i, &tag) != FMOD_OK)
|
||||
continue;
|
||||
|
||||
std::string name = tag.name;
|
||||
switch(tag.type)
|
||||
{
|
||||
case(FMOD_TAGTYPE_ID3V2):
|
||||
{
|
||||
if(name == "TIT2") name = "TITLE";
|
||||
else if(name == "TPE1") name = "ARTIST";
|
||||
break;
|
||||
}
|
||||
case(FMOD_TAGTYPE_ASF):
|
||||
{
|
||||
if(name == "Title") name = "TITLE";
|
||||
else if(name == "WM/AlbumArtist") name = "ARTIST";
|
||||
break;
|
||||
}
|
||||
case(FMOD_TAGTYPE_FMOD):
|
||||
{
|
||||
if (!strcmp(tag.name, "Sample Rate Change"))
|
||||
{
|
||||
LL_INFOS() << "Stream forced changing sample rate to " << *((float *)tag.data) << LL_ENDL;
|
||||
mFMODInternetStreamChannelp->setFrequency(*((float *)tag.data));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch(tag.datatype)
|
||||
{
|
||||
case(FMOD_TAGDATATYPE_INT):
|
||||
{
|
||||
(mMetadata)[name]=*(LLSD::Integer*)(tag.data);
|
||||
LL_DEBUGS("StreamMetadata") << tag.name << ": " << *(int*)(tag.data) << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
case(FMOD_TAGDATATYPE_FLOAT):
|
||||
{
|
||||
(mMetadata)[name]=*(LLSD::Real*)(tag.data);
|
||||
LL_DEBUGS("StreamMetadata") << tag.name << ": " << *(float*)(tag.data) << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
case(FMOD_TAGDATATYPE_STRING):
|
||||
{
|
||||
std::string out = rawstr_to_utf8(std::string((char*)tag.data,tag.datalen));
|
||||
(mMetadata)[name]=out;
|
||||
LL_DEBUGS("StreamMetadata") << tag.name << ": " << out << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
case(FMOD_TAGDATATYPE_STRING_UTF16):
|
||||
{
|
||||
std::string out((char*)tag.data,tag.datalen);
|
||||
(mMetadata)[std::string(tag.name)]=out;
|
||||
LL_DEBUGS("StreamMetadata") << tag.name << ": " << out << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
case(FMOD_TAGDATATYPE_STRING_UTF16BE):
|
||||
{
|
||||
std::string out((char*)tag.data,tag.datalen);
|
||||
//U16* buf = (U16*)out.c_str();
|
||||
//for(U32 j = 0; j < out.size()/2; ++j)
|
||||
//(((buf[j] & 0xff)<<8) | ((buf[j] & 0xff00)>>8));
|
||||
(mMetadata)[std::string(tag.name)]=out;
|
||||
LL_DEBUGS("StreamMetadata") << tag.name << ": " << out << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(starving)
|
||||
{
|
||||
bool paused = false;
|
||||
if (mFMODInternetStreamChannelp->getPaused(&paused) == FMOD_OK && !paused)
|
||||
{
|
||||
LL_INFOS() << "Stream starvation detected! Pausing stream until buffer nearly full." << LL_ENDL;
|
||||
LL_INFOS() << " (diskbusy="<<diskbusy<<")" << LL_ENDL;
|
||||
LL_INFOS() << " (progress="<<progress<<")" << LL_ENDL;
|
||||
Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(true), "FMOD::Channel::setPaused");
|
||||
}
|
||||
}
|
||||
else if(progress > 80)
|
||||
{
|
||||
Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(false), "FMOD::Channel::setPaused");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::stop()
|
||||
{
|
||||
mPendingURL.clear();
|
||||
|
||||
if (mFMODInternetStreamChannelp)
|
||||
{
|
||||
Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(true), "FMOD::Channel::setPaused");
|
||||
Check_FMOD_Error(mFMODInternetStreamChannelp->setPriority(0), "FMOD::Channel::setPriority");
|
||||
mFMODInternetStreamChannelp = NULL;
|
||||
}
|
||||
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
LL_INFOS() << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
|
||||
if (mCurrentInternetStreamp->stopStream())
|
||||
{
|
||||
delete mCurrentInternetStreamp;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
|
||||
mDeadStreams.push_back(mCurrentInternetStreamp);
|
||||
}
|
||||
mCurrentInternetStreamp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::pause(int pauseopt)
|
||||
{
|
||||
if (pauseopt < 0)
|
||||
{
|
||||
pauseopt = mCurrentInternetStreamp ? 1 : 0;
|
||||
}
|
||||
|
||||
if (pauseopt)
|
||||
{
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
stop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
start(getURL());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// A stream is "playing" if it has been requested to start. That
|
||||
// doesn't necessarily mean audio is coming out of the speakers.
|
||||
int LLStreamingAudio_FMODSTUDIO::isPlaying()
|
||||
{
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
return 1; // Active and playing
|
||||
}
|
||||
else if (!mURL.empty() || !mPendingURL.empty())
|
||||
{
|
||||
return 2; // "Paused"
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
F32 LLStreamingAudio_FMODSTUDIO::getGain()
|
||||
{
|
||||
return mGain;
|
||||
}
|
||||
|
||||
|
||||
std::string LLStreamingAudio_FMODSTUDIO::getURL()
|
||||
{
|
||||
return mURL;
|
||||
}
|
||||
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol)
|
||||
{
|
||||
mGain = vol;
|
||||
|
||||
if (mFMODInternetStreamChannelp)
|
||||
{
|
||||
vol = llclamp(vol * vol, 0.f, 1.f); //should vol be squared here?
|
||||
|
||||
Check_FMOD_Error(mFMODInternetStreamChannelp->setVolume(vol), "FMOD::Channel::setVolume");
|
||||
}
|
||||
}
|
||||
// <DKO> Streamtitle display
|
||||
// virtual
|
||||
bool LLStreamingAudio_FMODSTUDIO::getNewMetadata(LLSD& metadata)
|
||||
{
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
if (mNewMetadata)
|
||||
{
|
||||
metadata = mMetadata;
|
||||
mNewMetadata = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
return mNewMetadata;
|
||||
}
|
||||
|
||||
metadata = LLSD();
|
||||
return false;
|
||||
}
|
||||
// </DKO>
|
||||
///////////////////////////////////////////////////////
|
||||
// manager of possibly-multiple internet audio streams
|
||||
|
||||
LLAudioStreamManagerFMODSTUDIO::LLAudioStreamManagerFMODSTUDIO(FMOD::System *system, FMOD::ChannelGroup *group, const std::string& url) :
|
||||
mSystem(system),
|
||||
mChannelGroup(group),
|
||||
mStreamChannel(NULL),
|
||||
mInternetStream(NULL),
|
||||
mReady(false)
|
||||
{
|
||||
mInternetStreamURL = url;
|
||||
|
||||
FMOD_RESULT result = mSystem->createStream(url.c_str(), FMOD_2D | FMOD_NONBLOCKING | FMOD_IGNORETAGS, 0, &mInternetStream);
|
||||
|
||||
if (result!= FMOD_OK)
|
||||
{
|
||||
LL_WARNS() << "Couldn't open fmod stream, error "
|
||||
<< FMOD_ErrorString(result)
|
||||
<< LL_ENDL;
|
||||
mReady = false;
|
||||
return;
|
||||
}
|
||||
|
||||
mReady = true;
|
||||
}
|
||||
|
||||
FMOD::Channel *LLAudioStreamManagerFMODSTUDIO::startStream()
|
||||
{
|
||||
// We need a live and opened stream before we try and play it.
|
||||
FMOD_OPENSTATE open_state;
|
||||
if (getOpenState(open_state) != FMOD_OK || open_state != FMOD_OPENSTATE_READY)
|
||||
{
|
||||
LL_WARNS() << "No internet stream to start playing!" << LL_ENDL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(mStreamChannel)
|
||||
return mStreamChannel; //Already have a channel for this stream.
|
||||
|
||||
Check_FMOD_Error(mSystem->playSound(mInternetStream, mChannelGroup, true, &mStreamChannel), "FMOD::System::playSound");
|
||||
return mStreamChannel;
|
||||
}
|
||||
|
||||
bool LLAudioStreamManagerFMODSTUDIO::stopStream()
|
||||
{
|
||||
if (mInternetStream)
|
||||
{
|
||||
bool close = true;
|
||||
FMOD_OPENSTATE open_state;
|
||||
if (getOpenState(open_state) == FMOD_OK)
|
||||
{
|
||||
switch (open_state)
|
||||
{
|
||||
case FMOD_OPENSTATE_CONNECTING:
|
||||
close = false;
|
||||
break;
|
||||
default:
|
||||
close = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (close && mInternetStream->release() == FMOD_OK)
|
||||
{
|
||||
mStreamChannel = NULL;
|
||||
mInternetStream = NULL;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
FMOD_RESULT LLAudioStreamManagerFMODSTUDIO::getOpenState(FMOD_OPENSTATE& state, unsigned int* percentbuffered, bool* starving, bool* diskbusy)
|
||||
{
|
||||
if (!mInternetStream)
|
||||
return FMOD_ERR_INVALID_HANDLE;
|
||||
FMOD_RESULT result = mInternetStream->getOpenState(&state, percentbuffered, starving, diskbusy);
|
||||
Check_FMOD_Error(result, "FMOD::Sound::getOpenState");
|
||||
return result;
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::setBufferSizes(U32 streambuffertime, U32 decodebuffertime)
|
||||
{
|
||||
Check_FMOD_Error(mSystem->setStreamBufferSize(streambuffertime / 1000 * 128 * 128, FMOD_TIMEUNIT_RAWBYTES), "FMOD::System::setStreamBufferSize");
|
||||
FMOD_ADVANCEDSETTINGS settings;
|
||||
memset(&settings,0,sizeof(settings));
|
||||
settings.cbSize=sizeof(settings);
|
||||
settings.defaultDecodeBufferSize = decodebuffertime;//ms
|
||||
Check_FMOD_Error(mSystem->setAdvancedSettings(&settings), "FMOD::System::setAdvancedSettings");
|
||||
}
|
||||
|
||||
bool LLStreamingAudio_FMODSTUDIO::releaseDeadStreams()
|
||||
{
|
||||
// Kill dead internet streams, if possible
|
||||
std::list<LLAudioStreamManagerFMODSTUDIO *>::iterator iter;
|
||||
for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
|
||||
{
|
||||
LLAudioStreamManagerFMODSTUDIO *streamp = *iter;
|
||||
if (streamp->stopStream())
|
||||
{
|
||||
LL_INFOS() << "Closed dead stream" << LL_ENDL;
|
||||
delete streamp;
|
||||
mDeadStreams.erase(iter++);
|
||||
}
|
||||
else
|
||||
{
|
||||
iter++;
|
||||
}
|
||||
}
|
||||
|
||||
return mDeadStreams.empty();
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
/**
|
||||
* @file streamingaudio_fmodstudio.h
|
||||
* @brief Definition of LLStreamingAudio_FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_STREAMINGAUDIO_FMODSTUDIO_H
|
||||
#define LL_STREAMINGAUDIO_FMODSTUDIO_H
|
||||
|
||||
#include "stdtypes.h" // from llcommon
|
||||
|
||||
#include "llstreamingaudio.h"
|
||||
#include "lltimer.h"
|
||||
|
||||
//Stubs
|
||||
class LLAudioStreamManagerFMODSTUDIO;
|
||||
namespace FMOD
|
||||
{
|
||||
class System;
|
||||
class Channel;
|
||||
class ChannelGroup;
|
||||
class DSP;
|
||||
}
|
||||
|
||||
//Interfaces
|
||||
class LLStreamingAudio_FMODSTUDIO : public LLStreamingAudioInterface
|
||||
{
|
||||
public:
|
||||
LLStreamingAudio_FMODSTUDIO(FMOD::System *system);
|
||||
/*virtual*/ ~LLStreamingAudio_FMODSTUDIO();
|
||||
|
||||
/*virtual*/ void start(const std::string& url);
|
||||
/*virtual*/ void stop();
|
||||
/*virtual*/ void pause(S32 pause);
|
||||
/*virtual*/ void update();
|
||||
/*virtual*/ S32 isPlaying();
|
||||
/*virtual*/ void setGain(F32 vol);
|
||||
/*virtual*/ F32 getGain();
|
||||
/*virtual*/ std::string getURL();
|
||||
|
||||
/*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
|
||||
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
|
||||
//Streamtitle display DKO
|
||||
virtual bool getNewMetadata(LLSD& metadata);
|
||||
// DKO
|
||||
private:
|
||||
bool releaseDeadStreams();
|
||||
|
||||
FMOD::System *mSystem;
|
||||
|
||||
LLAudioStreamManagerFMODSTUDIO *mCurrentInternetStreamp;
|
||||
FMOD::ChannelGroup* mStreamGroup;
|
||||
FMOD::Channel *mFMODInternetStreamChannelp;
|
||||
std::list<LLAudioStreamManagerFMODSTUDIO *> mDeadStreams;
|
||||
|
||||
std::string mURL;
|
||||
std::string mPendingURL;
|
||||
F32 mGain;
|
||||
// <DKO> Streamtitle display
|
||||
bool mNewMetadata;
|
||||
LLSD mMetadata;
|
||||
// </DKO> Streamtitle display
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_STREAMINGAUDIO_FMODSTUDIO_H
|
||||
|
|
@ -983,6 +983,9 @@ void LLFolderView::cut()
|
|||
LLClipboard::instance().reset();
|
||||
if(getVisible() && getEnabled() && (mSelectedItems.size() > 0))
|
||||
{
|
||||
// <FS:Ansariel> Next item gets selected if cutting in inventory
|
||||
bool cut_to_clipboard = true;
|
||||
|
||||
// Find out which item will be selected once the selection will be cut
|
||||
LLFolderViewItem* item_to_select = getNextUnselectedItem();
|
||||
|
||||
|
|
@ -997,10 +1000,12 @@ void LLFolderView::cut()
|
|||
if (listener)
|
||||
{
|
||||
listener->cutToClipboard();
|
||||
cut_to_clipboard &= listener->isCutToClipboard(); // <FS:Ansariel> Next item gets selected if cutting in inventory
|
||||
}
|
||||
}
|
||||
|
||||
// Update the selection
|
||||
if (!cut_to_clipboard) // <FS:Ansariel> Next item gets selected if cutting in inventory
|
||||
setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, mParentPanel.get()->hasFocus());
|
||||
}
|
||||
mSearchString.clear();
|
||||
|
|
|
|||
|
|
@ -122,10 +122,6 @@ LLFolderViewItem::Params::Params()
|
|||
// <FS:Ansariel> Inventory specials
|
||||
for_inventory("for_inventory", false)
|
||||
{
|
||||
// <FS:Ansariel> User-definable item height in folder views
|
||||
static LLCachedControl<S32> FolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
item_height = (S32)FolderViewItemHeight;
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
// Default constructor
|
||||
|
|
@ -164,7 +160,8 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
|
|||
mArrowSize(p.arrow_size),
|
||||
mMaxFolderItemOverlap(p.max_folder_item_overlap),
|
||||
// <FS:Ansariel> Inventory specials
|
||||
mForInventory(p.for_inventory)
|
||||
mForInventory(p.for_inventory),
|
||||
mItemTopPad(p.item_top_pad)
|
||||
{
|
||||
if (!sColorSetInitialized)
|
||||
{
|
||||
|
|
@ -745,7 +742,9 @@ void LLFolderViewItem::drawOpenFolderArrow(const Params& default_params, const L
|
|||
//--------------------------------------------------------------------------------//
|
||||
// Draw open folder arrow
|
||||
//
|
||||
const S32 TOP_PAD = default_params.item_top_pad;
|
||||
// <FS:Ansariel> Inventory specials
|
||||
//const S32 TOP_PAD = default_params.item_top_pad;
|
||||
const S32 TOP_PAD = mItemTopPad;
|
||||
|
||||
if (hasVisibleChildren() || !isFolderComplete())
|
||||
{
|
||||
|
|
@ -905,7 +904,9 @@ void LLFolderViewItem::draw()
|
|||
const BOOL filled = show_context || (getRoot() ? getRoot()->getParentPanel()->hasFocus() : FALSE); // If we have keyboard focus, draw selection filled
|
||||
|
||||
const Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
const S32 TOP_PAD = default_params.item_top_pad;
|
||||
// <FS:Ansariel> Inventory specials
|
||||
//const S32 TOP_PAD = default_params.item_top_pad;
|
||||
const S32 TOP_PAD = mItemTopPad;
|
||||
|
||||
const LLFontGL* font = getLabelFontForStyle(mLabelStyle);
|
||||
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ protected:
|
|||
|
||||
// <FS:Ansariel> Inventory specials
|
||||
bool mForInventory;
|
||||
S32 mItemTopPad;
|
||||
|
||||
// For now assuming all colors are the same in derived classes.
|
||||
static bool sColorSetInitialized;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ include(DBusGlib)
|
|||
include(DirectX)
|
||||
include(DragDrop)
|
||||
include(EXPAT)
|
||||
include(FMODSTUDIO)
|
||||
include(FMODEX)
|
||||
include(GLOD)
|
||||
include(GooglePerfTools)
|
||||
|
|
@ -66,6 +67,10 @@ endif (NOT HAVOK_TPV)
|
|||
endif( LLPHYSICSEXTENSIONS_SRC_DIR )
|
||||
# </FS:ND>
|
||||
|
||||
if(FMODSTUDIO)
|
||||
include_directories(${FMODSTUDIO_INCLUDE_DIR})
|
||||
endif(FMODSTUDIO)
|
||||
|
||||
if(FMODEX)
|
||||
include_directories(${FMODEX_INCLUDE_DIR})
|
||||
endif(FMODEX)
|
||||
|
|
@ -161,6 +166,7 @@ set(viewer_SOURCE_FILES
|
|||
fsfloatervoicecontrols.cpp
|
||||
fsfloatervolumecontrols.cpp
|
||||
fsfloatervramusage.cpp
|
||||
fsfloaterwearablefavorites.cpp
|
||||
fskeywords.cpp
|
||||
fslightshare.cpp
|
||||
fslslbridge.cpp
|
||||
|
|
@ -909,6 +915,7 @@ set(viewer_HEADER_FILES
|
|||
fsfloatervoicecontrols.h
|
||||
fsfloatervolumecontrols.h
|
||||
fsfloatervramusage.h
|
||||
fsfloaterwearablefavorites.h
|
||||
fsgridhandler.h
|
||||
fskeywords.h
|
||||
fslightshare.h
|
||||
|
|
@ -2018,6 +2025,11 @@ if (OPENAL)
|
|||
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL")
|
||||
endif (OPENAL)
|
||||
|
||||
if (FMODSTUDIO)
|
||||
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODSTUDIO")
|
||||
set(FMODWRAPPER_LIBRARY ${FMODSTUDIO_LIBRARY})
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
if (FMODEX)
|
||||
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
|
||||
set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY})
|
||||
|
|
@ -2151,6 +2163,14 @@ if (WINDOWS)
|
|||
set( VIEWERMANIFEST_PACKAGE_FLAGS )
|
||||
endif( ND_BUILD64BIT_ARCH )
|
||||
|
||||
if (FMODSTUDIO)
|
||||
list(APPEND COPY_INPUT_DEPENDENCIES
|
||||
${SHARED_LIB_STAGING_DIR}/Release/fmod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/fmodL.dll
|
||||
)
|
||||
endif (FMODSTUDIO)
|
||||
|
||||
if (FMODEX)
|
||||
list(APPEND COPY_INPUT_DEPENDENCIES
|
||||
${SHARED_LIB_STAGING_DIR}/Release/fmodex.dll
|
||||
|
|
@ -2457,7 +2477,7 @@ if (DARWIN)
|
|||
set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm")
|
||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}")
|
||||
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
|
||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2017 The Phoenix Firestorm Project, Inc.")
|
||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2018 The Phoenix Firestorm Project, Inc.")
|
||||
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib")
|
||||
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLNSApplication")
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
CFBundleName = "Firestorm";
|
||||
|
||||
CFBundleShortVersionString = "Firestorm version %%VERSION%%";
|
||||
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2017 The Phoenix Firestorm Project, Inc.";
|
||||
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2018 The Phoenix Firestorm Project, Inc.";
|
||||
|
|
|
|||
|
|
@ -598,4 +598,14 @@
|
|||
is_running_function="Floater.IsOpen"
|
||||
is_running_parameters="fs_group_titles"
|
||||
/>
|
||||
<command name="wearable_favorites"
|
||||
available_in_toybox="true"
|
||||
icon="Wearable_Favorites_Icon"
|
||||
label_ref="Command_Wearable_Favorites_Label"
|
||||
tooltip_ref="Command_Wearable_Favorites_Tooltip"
|
||||
execute_function="Floater.Toggle"
|
||||
execute_parameters="fs_wearable_favorites"
|
||||
is_running_function="Floater.IsOpen"
|
||||
is_running_parameters="fs_wearable_favorites"
|
||||
/>
|
||||
</commands>
|
||||
|
|
|
|||
|
|
@ -13022,13 +13022,13 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>RenderVolumeLODFactor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
|
||||
<string>Influences the distance at which the viewer will display a lower detail model. Higher values = more lag. IMPORTANT: Please disregard advice to increase this value, such as is commonly distributed in notecards.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
<real>2.0</real>
|
||||
<key>SanityCheckType</key>
|
||||
<string>LessThanEquals</string>
|
||||
<key>SanityValue</key>
|
||||
|
|
@ -19959,10 +19959,10 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>FMODExProfilerEnable</key>
|
||||
<key>FMODProfilerEnable</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable profiler tool if using FMOD Ex</string>
|
||||
<string>Enable profiler tool if using FMOD</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -19970,7 +19970,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FMODExDecodeBufferSize</key>
|
||||
<key>FMODDecodeBufferSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Sets the streaming decode buffer size (in milliseconds)</string>
|
||||
|
|
@ -19981,7 +19981,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1000</integer>
|
||||
</map>
|
||||
<key>FMODExStreamBufferSize</key>
|
||||
<key>FMODStreamBufferSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Sets the streaming buffer size (in milliseconds)</string>
|
||||
|
|
@ -19992,6 +19992,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>7000</integer>
|
||||
</map>
|
||||
<key>FMODResampleMethod</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Sets the method used for internal resampler 0(Linear), 1(Cubic), 2(Spline)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>DisablePrecacheDelayAfterTeleporting</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -24511,6 +24522,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FSWearableFavoritesSortOrder</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The sort order for the wearable favorites item list</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>3</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
||||
|
|
|
|||
|
|
@ -734,7 +734,16 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
|
||||
<key>ProtectWearableFavoritesFolders</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Keep the Wearable Favorites folder in Inventory safe from manual changes.</string>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
|
||||
<key>FSKeywordOn</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
<llsd>
|
||||
<array>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<string>Anime - 12AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.12499995529651642</real>
|
||||
<string>Anime - 3AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.22916656732559204</real>
|
||||
<string>Anime - 5:30AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.24999991059303284</real>
|
||||
<string>Anime - 6AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.27083322405815125</real>
|
||||
<string>Anime - 6:30AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.37499985098838806</real>
|
||||
<string>Anime - 9AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.49999982118606567</real>
|
||||
<string>Anime - 12PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.6249997615814209</real>
|
||||
<string>Anime - 3PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.74999970197677612</real>
|
||||
<string>Anime - 6PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.77083301544189453</real>
|
||||
<string>Anime - 6:30PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.87499964237213135</real>
|
||||
<string>Anime - 9PM</string>
|
||||
</array>
|
||||
</array>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<llsd>
|
||||
<array>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<string>FALLOUT - 12AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.12499995529651642</real>
|
||||
<string>FALLOUT - 3AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.20833325386047363</real>
|
||||
<string>FALLOUT - 5AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.24999991059303284</real>
|
||||
<string>FALLOUT - 6AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.37499985098838806</real>
|
||||
<string>FALLOUT - 9AM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.49999982118606567</real>
|
||||
<string>FALLOUT - 12PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.6249997615814209</real>
|
||||
<string>FALLOUT - 3PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.74999970197677612</real>
|
||||
<string>FALLOUT - 6PM</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.87499964237213135</real>
|
||||
<string>FALLOUT - 9PM</string>
|
||||
</array>
|
||||
</array>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<llsd>
|
||||
<array>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<string>Hyborian Dawn B - midnight</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.24652767181396484</real>
|
||||
<string>Hyborian Age - Water E-morning</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.49999982118606567</real>
|
||||
<string>Hyborian Age - Water F - noon</string>
|
||||
</array>
|
||||
<array>
|
||||
<real>0.74999970197677612</real>
|
||||
<string>Hyborian Age - Water E-evening</string>
|
||||
</array>
|
||||
</array>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.8988037109375</real>
|
||||
<real>1.1949462890625</real>
|
||||
<real>1.2279398441314697</real>
|
||||
<real>1.8988037109375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.35260009765625</real>
|
||||
<real>0.85935890674591064</real>
|
||||
<real>1.35052490234375</real>
|
||||
<real>1.35052490234375</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.815185546875</real>
|
||||
<real>1.02667236328125</real>
|
||||
<real>1.153564453125</real>
|
||||
<real>1.153564453125</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.52999997138977051</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00026999998954124749</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>3.7000000476837158</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>3.1415927410125732</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>4</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.065999999642372131</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>4.8569560817668389e-008</real>
|
||||
<real>0.83146911859512329</real>
|
||||
<real>-0.55557101964950562</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>735</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>8.2799997329711914</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.98174679279327393</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>2.22052001953125</real>
|
||||
<real>1.76385498046875</real>
|
||||
<real>1.8066678047180176</real>
|
||||
<real>2.22052001953125</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.4053955078125</real>
|
||||
<real>1.1382696628570557</real>
|
||||
<real>1.2821044921875</real>
|
||||
<real>1.2821044921875</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.41029912233352661</real>
|
||||
<real>0.43446910381317139</real>
|
||||
<real>0.79701787233352661</real>
|
||||
<real>0.79701787233352661</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.11019530892372131</real>
|
||||
<real>0.12288269400596619</real>
|
||||
<real>0.14980468153953552</real>
|
||||
<real>0.14980468153953552</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.22615399956703186</real>
|
||||
<real>0.31999999284744263</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69999998807907104</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.19999998807907104</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00014999999257270247</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>7.5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.47999998927116394</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
<real>-1.1924880638503055e-008</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>971</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>50</real>
|
||||
<key>sun_angle</key>
|
||||
<real>4.7123889923095703</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.169921875</real>
|
||||
<real>1.0309758186340332</real>
|
||||
<real>1.330078125</real>
|
||||
<real>1.330078125</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.6820068359375</real>
|
||||
<real>1.5790386199951172</real>
|
||||
<real>1.4586181640625</real>
|
||||
<real>1.6820068359375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.474609375</real>
|
||||
<real>0.66494756937026978</real>
|
||||
<real>0.791015625</real>
|
||||
<real>0.791015625</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00014999999257270247</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.088000006973743439</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>1</real>
|
||||
<real>1.1483815569590661e-006</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>2588</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0</real>
|
||||
<key>sun_angle</key>
|
||||
<real>1.5707951784133911</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.5765380859375</real>
|
||||
<real>1.4519634246826172</real>
|
||||
<real>1.3062744140625</real>
|
||||
<real>1.5765380859375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.3659820556640625</real>
|
||||
<real>1.0276046991348267</real>
|
||||
<real>1.1574554443359375</real>
|
||||
<real>1.1574554443359375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.19945311546325684</real>
|
||||
<real>0.34193974733352661</real>
|
||||
<real>0.72054684162139893</real>
|
||||
<real>0.72054684162139893</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.084902346134185791</real>
|
||||
<real>0.10760286450386047</real>
|
||||
<real>0.18509766459465027</real>
|
||||
<real>0.18509766459465027</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.22615399956703186</real>
|
||||
<real>0.31999999284744263</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.87999999523162842</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>9</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.47999998927116394</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.20000000298023224</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.70710688829421997</real>
|
||||
<real>-0.70710664987564087</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>471</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>27.709999084472656</real>
|
||||
<key>sun_angle</key>
|
||||
<real>5.4977869987487793</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.167266845703125</real>
|
||||
<real>1.014866828918457</real>
|
||||
<real>1.309295654296875</real>
|
||||
<real>1.309295654296875</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.6820068359375</real>
|
||||
<real>1.5790386199951172</real>
|
||||
<real>1.4586181640625</real>
|
||||
<real>1.6820068359375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.387725830078125</real>
|
||||
<real>0.61492735147476196</real>
|
||||
<real>0.815399169921875</real>
|
||||
<real>0.815399169921875</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.139999389648437</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00014999999257270247</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.088000006973743439</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.85491263866424561</real>
|
||||
<real>-0.51877200603485107</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>2588</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0</real>
|
||||
<key>sun_angle</key>
|
||||
<real>2.1162102222442627</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.5765380859375</real>
|
||||
<real>1.4519634246826172</real>
|
||||
<real>1.3062744140625</real>
|
||||
<real>1.5765380859375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.3659820556640625</real>
|
||||
<real>1.0276046991348267</real>
|
||||
<real>1.1574554443359375</real>
|
||||
<real>1.1574554443359375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.19945311546325684</real>
|
||||
<real>0.34193974733352661</real>
|
||||
<real>0.72054684162139893</real>
|
||||
<real>0.72054684162139893</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.084902346134185791</real>
|
||||
<real>0.10760286450386047</real>
|
||||
<real>0.18509766459465027</real>
|
||||
<real>0.18509766459465027</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.22615399956703186</real>
|
||||
<real>0.31999999284744263</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.87999999523162842</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>9.5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>12</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-1.0499999523162842</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.20000000298023224</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>500</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>27.709999084472656</real>
|
||||
<key>sun_angle</key>
|
||||
<real>6.152285099029541</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.167266845703125</real>
|
||||
<real>1.014866828918457</real>
|
||||
<real>1.309295654296875</real>
|
||||
<real>1.309295654296875</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.5087890625</real>
|
||||
<real>0.955352783203125</real>
|
||||
<real>0.3662109375</real>
|
||||
<real>1.5087890625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.09296870231628418</real>
|
||||
<real>0.7166895866394043</real>
|
||||
<real>1.2670313119888306</real>
|
||||
<real>1.2670313119888306</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.0052734613418579102</real>
|
||||
<real>0.4152558445930481</real>
|
||||
<real>0.89472651481628418</real>
|
||||
<real>0.44736325740814209</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>10.300000190734863</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>39.799999237060547</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-1.8999999761581421</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.20000000298023224</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.13052545487880707</real>
|
||||
<real>0.99144494533538818</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.13089895248413086</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>2.8590087890625</real>
|
||||
<real>1.3701038360595703</real>
|
||||
<real>0.5628662109375</real>
|
||||
<real>2.8590087890625</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.212158203125</real>
|
||||
<real>1.1134529113769531</real>
|
||||
<real>0.662841796875</real>
|
||||
<real>1.212158203125</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.19804692268371582</real>
|
||||
<real>0.8982093334197998</real>
|
||||
<real>1.3619530200958252</real>
|
||||
<real>1.3619530200958252</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.421875</real>
|
||||
<real>0.421875</real>
|
||||
<real>0.421875</real>
|
||||
<real>0.421875</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.19999998807907104</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>39.799999237060547</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.74999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.21300001442432404</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>-1</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>471</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.63999998569488525</real>
|
||||
<key>sun_angle</key>
|
||||
<real>3.2724905014038086</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.5087890625</real>
|
||||
<real>0.955352783203125</real>
|
||||
<real>0.3662109375</real>
|
||||
<real>1.5087890625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.09296870231628418</real>
|
||||
<real>0.7166895866394043</real>
|
||||
<real>1.2670313119888306</real>
|
||||
<real>1.2670313119888306</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.0052734613418579102</real>
|
||||
<real>0.4152558445930481</real>
|
||||
<real>0.89472651481628418</real>
|
||||
<real>0.44736325740814209</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>10.300000190734863</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>18</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-1.3999999761581421</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.20000000298023224</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.2199999988079071</real>
|
||||
<key>sun_angle</key>
|
||||
<real>6.2831845283508301</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>2.8590087890625</real>
|
||||
<real>1.3701038360595703</real>
|
||||
<real>0.5628662109375</real>
|
||||
<real>2.8590087890625</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.5087890625</real>
|
||||
<real>0.955352783203125</real>
|
||||
<real>0.3662109375</real>
|
||||
<real>1.5087890625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.19804692268371582</real>
|
||||
<real>0.8982093334197998</real>
|
||||
<real>1.3619530200958252</real>
|
||||
<real>1.3619530200958252</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.421875</real>
|
||||
<real>0.421875</real>
|
||||
<real>0.421875</real>
|
||||
<real>0.421875</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.19999998807907104</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>14.600000381469727</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.74999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>3</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.15999999642372131</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>1.8199258420281694e-006</real>
|
||||
<real>-1</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>471</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.63999998569488525</real>
|
||||
<key>sun_angle</key>
|
||||
<real>3.1415908336639404</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>2.8590087890625</real>
|
||||
<real>1.3701038360595703</real>
|
||||
<real>0.5628662109375</real>
|
||||
<real>2.8590087890625</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.6820068359375</real>
|
||||
<real>1.5790386199951172</real>
|
||||
<real>1.4586181640625</real>
|
||||
<real>1.6820068359375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.4041748046875</real>
|
||||
<real>0.53062635660171509</real>
|
||||
<real>0.7989501953125</real>
|
||||
<real>0.7989501953125</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>33.400001525878906</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-2.5</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.087999999523162842</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.80644398927688599</real>
|
||||
<real>0.59131050109863281</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>1000</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.93811345100402832</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.5765380859375</real>
|
||||
<real>1.4519634246826172</real>
|
||||
<real>1.3062744140625</real>
|
||||
<real>1.5765380859375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.3659820556640625</real>
|
||||
<real>1.0276046991348267</real>
|
||||
<real>1.1574554443359375</real>
|
||||
<real>1.1574554443359375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.19945311546325684</real>
|
||||
<real>0.34193974733352661</real>
|
||||
<real>0.72054684162139893</real>
|
||||
<real>0.36027342081069946</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.084902346134185791</real>
|
||||
<real>0.10760286450386047</real>
|
||||
<real>0.18509766459465027</real>
|
||||
<real>0.092548832297325134</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.25</real>
|
||||
<real>0.25</real>
|
||||
<real>0.25</real>
|
||||
<real>0.25</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.19999998807907104</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001500000071246177</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>11.400001525878906</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.74999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.70710521936416626</real>
|
||||
<real>0.70710831880569458</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>471</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>19.10999870300293</real>
|
||||
<key>sun_angle</key>
|
||||
<real>3.9269886016845703</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.167266845703125</real>
|
||||
<real>1.014866828918457</real>
|
||||
<real>1.309295654296875</real>
|
||||
<real>1.309295654296875</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.31272691488265991</real>
|
||||
<real>0.4980926513671875</real>
|
||||
<real>0.2284698486328125</real>
|
||||
<real>0.1660308837890625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.41029912233352661</real>
|
||||
<real>0.43446910381317139</real>
|
||||
<real>0.79701787233352661</real>
|
||||
<real>0.39850893616676331</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.080742180347442627</real>
|
||||
<real>0.08920837938785553</real>
|
||||
<real>0.17925781011581421</real>
|
||||
<real>0.089628905057907104</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.33428794145584106</real>
|
||||
<real>0.34057700634002686</real>
|
||||
<real>0.22557699680328369</real>
|
||||
<real>0.34057700634002686</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.87999999523162842</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.10999999195337296</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.34999942779541</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.47999998927116394</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00065000000176951289</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>27</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0099999904632568</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.47999998927116394</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.7650001049041748</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.16200000047683716</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
<real>-1.1924880638503055e-008</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>906.19991350494092</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>50</real>
|
||||
<key>sun_angle</key>
|
||||
<real>4.7123889923095703</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.954986572265625</real>
|
||||
<real>0.79802370071411133</real>
|
||||
<real>0.380950927734375</real>
|
||||
<real>0.318328857421875</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.74505615234375</real>
|
||||
<real>0.58181476593017578</real>
|
||||
<real>0.47369384765625</real>
|
||||
<real>0.24835205078125</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.23244559764862061</real>
|
||||
<real>0.77074909210205078</real>
|
||||
<real>1.0336413383483887</real>
|
||||
<real>0.51682066917419434</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.63999998569488525</real>
|
||||
<real>1.1399999856948853</real>
|
||||
<real>1.2799999713897705</real>
|
||||
<real>0.63999998569488525</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.5660400390625</real>
|
||||
<real>0.53396797180175781</real>
|
||||
<real>0.4964599609375</real>
|
||||
<real>0.5660400390625</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.18000000715255737</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.002444075434141</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.32999998331069946</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00019999999494757503</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5.3000001907348633</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0799999237060547</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>20</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.29999998211860657</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.0290000438690186</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.36800003051757813</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>1</real>
|
||||
<real>1.1483815569590661e-006</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>324</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.17000000178813934</real>
|
||||
<key>sun_angle</key>
|
||||
<real>1.5707951784133911</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.74609375</real>
|
||||
<real>1.45001220703125</real>
|
||||
<real>1.25390625</real>
|
||||
<real>0.58203125</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.2131640613079071</real>
|
||||
<real>0.29683592915534973</real>
|
||||
<real>0.23996521532535553</real>
|
||||
<real>0.098945312201976776</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.59999996423721313</real>
|
||||
<real>0.70078122615814209</real>
|
||||
<real>0.49921870231628418</real>
|
||||
<real>0.35039061307907104</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.098515614867210388</real>
|
||||
<real>0.16148437559604645</real>
|
||||
<real>0.15853270888328552</real>
|
||||
<real>0.080742187798023224</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.2725030779838562</real>
|
||||
<real>0.3394712507724762</real>
|
||||
<real>0.22668275237083435</real>
|
||||
<real>0.3394712507724762</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.87999999523162842</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>1.6884100437164307</real>
|
||||
<real>0.52609699964523315</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.53999996185302734</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.179999351501465</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.39999997615814209</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00039999998989515007</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>41.200000762939453</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0099999904632568</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>5</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.47999998927116394</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.9120000600814819</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.23500001430511475</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.70710688829421997</real>
|
||||
<real>-0.70710664987564087</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>1074</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>1.9999994039535522</real>
|
||||
<key>sun_angle</key>
|
||||
<real>5.4977869987487793</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.15093749761581421</real>
|
||||
<real>0.26906245946884155</real>
|
||||
<real>0.23860837519168854</real>
|
||||
<real>0.089687488973140717</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.74981689453125</real>
|
||||
<real>0.72567844390869141</real>
|
||||
<real>0.46893310546875</real>
|
||||
<real>0.24993896484375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.30415761470794678</real>
|
||||
<real>0.91567981243133545</real>
|
||||
<real>0.9619293212890625</real>
|
||||
<real>0.48096466064453125</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.65250003337860107</real>
|
||||
<real>1.1810156106948853</real>
|
||||
<real>1.2674999237060547</real>
|
||||
<real>0.63374996185302734</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.56300735473632813</real>
|
||||
<real>0.5989990234375</real>
|
||||
<real>0.4635009765625</real>
|
||||
<real>0.5989990234375</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.12999999523162842</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.159999847412109</real>
|
||||
<real>10.002444075434141</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.34999999403953552</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00019999999494757503</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5.3000001907348633</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0799999237060547</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>20</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.29999998211860657</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.0290000438690186</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.36800003051757813</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.70710796117782593</real>
|
||||
<real>-0.70710557699203491</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>324</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.17000000178813934</real>
|
||||
<key>sun_angle</key>
|
||||
<real>2.3561928272247314</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.74609375</real>
|
||||
<real>1.45001220703125</real>
|
||||
<real>1.25390625</real>
|
||||
<real>0.58203125</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.35030929960043622</real>
|
||||
<real>0.46551762368852856</real>
|
||||
<real>0.31948245200936221</real>
|
||||
<real>0.15517253929787689</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.62214583095983045</real>
|
||||
<real>0.55068354395088903</real>
|
||||
<real>0.34089408471041693</real>
|
||||
<real>0.32066405087450711</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.39911341003996359</real>
|
||||
<real>0.50879565638462854</real>
|
||||
<real>0.26287115690945573</real>
|
||||
<real>0.25439782819231427</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.30318339927105065</real>
|
||||
<real>0.31483941629373824</real>
|
||||
<real>0.25516060913757777</real>
|
||||
<real>0.31483941629373824</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.42333327018552769</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.182777554922552</real>
|
||||
<real>10.006722025016984</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.35611107127534236</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00031999999191612005</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>21.055553793907166</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.94611111104487833</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>11.444444182183815</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.63333325452275346</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.0988334751327926</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.25911108684539741</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.17605249583721161</real>
|
||||
<real>0.98438078165054321</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.25499996542930603</real>
|
||||
<key>sun_angle</key>
|
||||
<real>3.3185675144195557</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.0367064853958254</real>
|
||||
<real>0.85555024706991389</real>
|
||||
<real>0.60542814274958801</real>
|
||||
<real>0.35895459841412958</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.95999997854232788</real>
|
||||
<real>0.74666666984558105</real>
|
||||
<real>0.39111104607582092</real>
|
||||
<real>0.31999999284744263</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.35999998450279236</real>
|
||||
<real>0.49999505281448364</real>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.60923081636428833</real>
|
||||
<real>0.89999997615814209</real>
|
||||
<real>0.44999998807907104</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0.41999998688697815</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.73999994993209839</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.47999998927116394</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00013000000035390258</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>19.100000381469727</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>20</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.34999999403953552</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.3199999332427979</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.38999998569488525</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.12533323466777802</real>
|
||||
<real>0.99211472272872925</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.2199999988079071</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.12566371262073517</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.8300000429153442</real>
|
||||
<real>1.0707448720932007</real>
|
||||
<real>0.61773747205734253</real>
|
||||
<real>0.61000001430511475</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.49748563766479492</real>
|
||||
<real>0.6832616925239563</real>
|
||||
<real>0.48673826456069946</real>
|
||||
<real>0.2277538925409317</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.68343746662139893</real>
|
||||
<real>0.4503515362739563</real>
|
||||
<real>0.39656245708465576</real>
|
||||
<real>0.34171873331069946</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.80513662099838257</real>
|
||||
<real>1.0481249094009399</real>
|
||||
<real>0.51187503337860107</real>
|
||||
<real>0.52406245470046997</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.139999389648437</real>
|
||||
<real>10</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00031999999191612005</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>12.5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0499999523162842</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>11.19999885559082</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.44999998807907104</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.6470000743865967</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.13199999928474426</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.70264989137649536</real>
|
||||
<real>-0.7115357518196106</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.08999999612569809</real>
|
||||
<key>sun_angle</key>
|
||||
<real>2.3624777793884277</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.9921875</real>
|
||||
<real>1.423095703125</real>
|
||||
<real>1.0078125</real>
|
||||
<real>0.6640625</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.613311767578125</real>
|
||||
<real>0.51300573348999023</real>
|
||||
<real>0.371063232421875</real>
|
||||
<real>0.204437255859375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.23244559764862061</real>
|
||||
<real>0.77074909210205078</real>
|
||||
<real>1.0336413383483887</real>
|
||||
<real>0.51682066917419434</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.63999998569488525</real>
|
||||
<real>1.1399999856948853</real>
|
||||
<real>1.2799999713897705</real>
|
||||
<real>0.63999998569488525</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.34874999523162842</real>
|
||||
<real>0.33482420444488525</real>
|
||||
<real>0.27125000953674316</real>
|
||||
<real>0.34874999523162842</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.079999998211860657</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.002444075434141</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.39999997615814209</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00019999999494757503</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>5.3000001907348633</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0799999237060547</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>20</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.29999998211860657</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.8399999141693115</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.55000001192092896</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.70710611343383789</real>
|
||||
<real>0.70710742473602295</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>324</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.17000000178813934</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.7853972315788269</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.7578125</real>
|
||||
<real>1.5684814453125</real>
|
||||
<real>1.2421875</real>
|
||||
<real>0.5859375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.25665158033370972</real>
|
||||
<real>0.32695314288139343</real>
|
||||
<real>0.21304687857627869</real>
|
||||
<real>0.10898438096046448</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.58314204216003418</real>
|
||||
<real>0.61453121900558472</real>
|
||||
<real>0.30546873807907104</real>
|
||||
<real>0.30726560950279236</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.14073486626148224</real>
|
||||
<real>0.1655859500169754</real>
|
||||
<real>0.10441406071186066</real>
|
||||
<real>0.082792975008487701</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.279754638671875</real>
|
||||
<real>0.298828125</real>
|
||||
<real>0.201171875</real>
|
||||
<real>0.298828125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.53999996185302734</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.210000038146973</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.42999997735023499</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00031999999191612005</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>26.5</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.87999999523162842</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>11.600000381469727</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.74999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.75</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.70710521936416626</real>
|
||||
<real>0.70710831880569458</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.35999998450279236</real>
|
||||
<key>sun_angle</key>
|
||||
<real>3.9269886016845703</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0.42867279052734375</real>
|
||||
<real>0.494384765625</real>
|
||||
<real>0.349365234375</real>
|
||||
<real>0.164794921875</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.11958788335323334</real>
|
||||
<real>0.16424560546875</real>
|
||||
<real>0.11700439453125</real>
|
||||
<real>0.05474853515625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.68343746662139893</real>
|
||||
<real>0.4503515362739563</real>
|
||||
<real>0.39656245708465576</real>
|
||||
<real>0.34171873331069946</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.80513662099838257</real>
|
||||
<real>1.0481249094009399</real>
|
||||
<real>0.51187503337860107</real>
|
||||
<real>0.52406245470046997</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.34000000357627869</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.139999389648437</real>
|
||||
<real>10</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00041000000783242285</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>25.700000762939453</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0499999523162842</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>11.19999885559082</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.44999998807907104</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.6470000743865967</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.044000003486871719</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.70264989137649536</real>
|
||||
<real>-0.7115357518196106</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0.08999999612569809</real>
|
||||
<key>sun_angle</key>
|
||||
<real>2.3624777793884277</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.5589599609375</real>
|
||||
<real>1.3221702575683594</real>
|
||||
<real>0.7613525390625</real>
|
||||
<real>0.5196533203125</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.98492431640625</real>
|
||||
<real>0.78996026515960693</real>
|
||||
<real>0.56195068359375</real>
|
||||
<real>0.98492431640625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.828857421875</real>
|
||||
<real>0.7533721923828125</real>
|
||||
<real>0.686767578125</real>
|
||||
<real>0.828857421875</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.52999997138977051</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00019999999494757503</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>18.399999618530273</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>4.7123889923095703</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.8530001640319824</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.088000006973743439</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0.55557101964950562</real>
|
||||
<real>0.83146911859512329</real>
|
||||
<real>6.6251182317955681e-009</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>941</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>8.2799997329711914</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.98174679279327393</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.8755950927734375</real>
|
||||
<real>1.5636838674545288</real>
|
||||
<real>1.2884674072265625</real>
|
||||
<real>1.8755950927734375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.98492431640625</real>
|
||||
<real>0.78996026515960693</real>
|
||||
<real>0.56195068359375</real>
|
||||
<real>0.98492431640625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.828857421875</real>
|
||||
<real>0.7533721923828125</real>
|
||||
<real>0.686767578125</real>
|
||||
<real>0.828857421875</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.52999997138977051</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00019999999494757503</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>18.399999618530273</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>1.5707963705062866</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.8530001640319824</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.088000006973743439</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0.55557101964950562</real>
|
||||
<real>0.83146911859512329</real>
|
||||
<real>-2.4284780408834195e-008</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>941</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>8.2799997329711914</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.98174679279327393</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.8755950927734375</real>
|
||||
<real>1.5636838674545288</real>
|
||||
<real>1.2884674072265625</real>
|
||||
<real>1.8755950927734375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.98492431640625</real>
|
||||
<real>0.78996026515960693</real>
|
||||
<real>0.56195068359375</real>
|
||||
<real>0.98492431640625</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.395843505859375</real>
|
||||
<real>0.73051226139068604</real>
|
||||
<real>1.307281494140625</real>
|
||||
<real>1.307281494140625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.92669677734375</real>
|
||||
<real>1.0150165557861328</real>
|
||||
<real>1.04205322265625</real>
|
||||
<real>1.04205322265625</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.52999997138977051</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00019999999494757503</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>18.399999618530273</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>3.1415927410125732</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.8530001640319824</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.088000006973743439</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>4.8569560817668389e-008</real>
|
||||
<real>0.83146911859512329</real>
|
||||
<real>-0.55557101964950562</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>941</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>8.2799997329711914</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.98174679279327393</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.8755950927734375</real>
|
||||
<real>1.5636838674545288</real>
|
||||
<real>1.2884674072265625</real>
|
||||
<real>1.8755950927734375</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.95999962091445923</real>
|
||||
<real>0.7466665506362915</real>
|
||||
<real>0.39111113548278809</real>
|
||||
<real>0.95999962091445923</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.015937447547912598</real>
|
||||
<real>0.44135260581970215</real>
|
||||
<real>1.344062328338623</real>
|
||||
<real>1.344062328338623</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>3.7193314028627356e-007</real>
|
||||
<real>0.60923099517822266</real>
|
||||
<real>0.90000009536743164</real>
|
||||
<real>0.90000009536743164</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.42000007244688747</real>
|
||||
<real>0.42000007244688747</real>
|
||||
<real>0.42000007244688747</real>
|
||||
<real>0.42000040173551301</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.47999997496603469</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0001300000504218242</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>19.099992871280904</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>20.400001525878906</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.59999996423721313</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>2.3199996399878295</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.39000006251816299</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>0.30070504546165466</real>
|
||||
<real>0.95371717214584351</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>600</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>8.2799997329711914</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.30543184280395508</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.791229248046875</real>
|
||||
<real>1.0211048126220703</real>
|
||||
<real>0.341583251953125</real>
|
||||
<real>1.791229248046875</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.4453125</real>
|
||||
<real>0.4453125</real>
|
||||
<real>0.4453125</real>
|
||||
<real>0.1484375</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>1.4818992614746094</real>
|
||||
<real>1.2088453769683838</real>
|
||||
<real>1.5099046230316162</real>
|
||||
<real>0.75495231151580811</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.062745101749897003</real>
|
||||
<real>0.054901964962482452</real>
|
||||
<real>0.062745101749897003</real>
|
||||
<real>0.031372550874948502</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.5656999945640564</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.32999998331069946</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.49940013885498</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.29999998211860657</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>9.0200002887286246e-005</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>30.100000381469727</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>6.2831854820251465</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.59999996423721313</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>20</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.34000000357627869</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-1.4580322726942541e-007</real>
|
||||
<real>0.55191975831985474</real>
|
||||
<real>0.83389723300933838</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>3037</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>21</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>3.7999999523162842</real>
|
||||
<key>sun_angle</key>
|
||||
<real>3.72625732421875</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.12089811412885521</real>
|
||||
<real>0.33770671695460663</real>
|
||||
<real>0.67541757891583387</real>
|
||||
<real>0.76708334654569654</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.13497034943045882</real>
|
||||
<real>0.26690842067701936</real>
|
||||
<real>0.4016666400432598</real>
|
||||
<real>0.74541666984558219</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.47999998927116394</real>
|
||||
<real>0.97999995946884155</real>
|
||||
<real>0.14630000293254852</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
<real>0.070000000298023224</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.10260000079870224</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.088005410620646</real>
|
||||
<real>13.300018310546875</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.41999998688697815</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00028125001798306321</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>6.3874998847643383</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>3.5185837745666504</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0900000333786011</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>9.4000005722045898</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.44999998807907104</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>0.51583333298563971</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.13833333183079954</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0.28096383810043335</real>
|
||||
<real>0.64612644910812378</real>
|
||||
<real>0.70963364839553833</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>685.18749099969864</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>22</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>2</real>
|
||||
<key>sun_angle</key>
|
||||
<real>5.5806870460510254</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.29999998211860657</real>
|
||||
<real>0.17999999225139618</real>
|
||||
<real>0</real>
|
||||
<real>0.29999998211860657</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.97999995946884155</real>
|
||||
<real>0.97999995946884155</real>
|
||||
<real>0.97999995946884155</real>
|
||||
<real>0.48999997973442078</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.31999999284744263</real>
|
||||
<real>0.31999999284744263</real>
|
||||
<real>0.31999999284744263</real>
|
||||
<real>0.15999999642372131</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.50999999046325684</real>
|
||||
<real>0.50999999046325684</real>
|
||||
<real>0.50999999046325684</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>1</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.079999998211860657</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.49940013885498</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.25999999046325684</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.00031000000308267772</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>6.8000001907348633</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>40</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.19999980926513672</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.8899999856948853</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.23999999463558197</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.36227512359619141</real>
|
||||
<real>-0.93207120895385742</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>752</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>21</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0</real>
|
||||
<key>sun_angle</key>
|
||||
<real>2.7708849906921387</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.3799998760223389</real>
|
||||
<real>1.3799998760223389</real>
|
||||
<real>1.3799998760223389</real>
|
||||
<real>0.45999997854232788</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0.14999999105930328</real>
|
||||
<real>0.14999999105930328</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0.37999999523162842</real>
|
||||
<real>0.56000000238418579</real>
|
||||
<real>0.56000000238418579</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.45999997854232788</real>
|
||||
<real>0.37999999523162842</real>
|
||||
<real>0.57999998331069946</real>
|
||||
<real>0.57999998331069946</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.11999999731779099</real>
|
||||
<real>0.10999999940395355</real>
|
||||
<real>0.11999999731779099</real>
|
||||
<real>0.11999999731779099</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.69999998807907104</real>
|
||||
<real>0.34999999403953552</real>
|
||||
<real>0.79999995231628418</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.29999998211860657</real>
|
||||
<real>0.17000000178813934</real>
|
||||
<real>0.17000000178813934</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.39999997615814209</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.359999656677246</real>
|
||||
<real>10.029999732971191</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.29999998211860657</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>9.9999997473787516e-005</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>37.200000762939453</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>1.1938052177429199</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>1.0099999904632568</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>40</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.4999995231628418</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>1.2699999809265137</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.35999998450279236</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>0.76900023221969604</real>
|
||||
<real>0.56208312511444092</real>
|
||||
<real>-0.30446872115135193</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>349</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>24</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>2</real>
|
||||
<key>sun_angle</key>
|
||||
<real>2.5446903705596924</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>1.4099999666213989</real>
|
||||
<real>1.6500000953674316</real>
|
||||
<real>2.0399999618530273</real>
|
||||
<real>2.0399999618530273</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>1.6011199951171875</real>
|
||||
<real>0.4848175048828125</real>
|
||||
<real>0.53714460134506226</real>
|
||||
<real>1.6011199951171875</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.35260009765625</real>
|
||||
<real>0.85935890674591064</real>
|
||||
<real>1.35052490234375</real>
|
||||
<real>1.35052490234375</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.815185546875</real>
|
||||
<real>1.02667236328125</real>
|
||||
<real>1.153564453125</real>
|
||||
<real>1.153564453125</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.909454345703125</real>
|
||||
<real>0.77801179885864258</real>
|
||||
<real>0.551483154296875</real>
|
||||
<real>0.909454345703125</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.74000002145772326</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.069999694824219</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.52999997138977051</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0004400000034365803</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>10.300000190734863</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>3.1415927410125732</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.81000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>15.199999809265137</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.99999994039535522</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>4</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.065999999642372131</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>4.8569560817668389e-008</real>
|
||||
<real>0.83146911859512329</real>
|
||||
<real>-0.55557101964950562</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>735</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>2</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>8.2799997329711914</real>
|
||||
<key>sun_angle</key>
|
||||
<real>0.98174679279327393</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>2.547271728515625</real>
|
||||
<real>1.437103271484375</real>
|
||||
<real>1.5411819219589233</real>
|
||||
<real>2.547271728515625</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>ambient</key>
|
||||
<array>
|
||||
<real>0.55059814453125</real>
|
||||
<real>0.24620819091796875</real>
|
||||
<real>0.17596435546875</real>
|
||||
<real>0.55059814453125</real>
|
||||
</array>
|
||||
<key>blue_density</key>
|
||||
<array>
|
||||
<real>0.4730224609375</real>
|
||||
<real>1.208868145942688</real>
|
||||
<real>1.4644775390625</real>
|
||||
<real>1.4644775390625</real>
|
||||
</array>
|
||||
<key>blue_horizon</key>
|
||||
<array>
|
||||
<real>0.18896484375</real>
|
||||
<real>0.35201278328895569</real>
|
||||
<real>0.48291015625</real>
|
||||
<real>0.48291015625</real>
|
||||
</array>
|
||||
<key>cloud_color</key>
|
||||
<array>
|
||||
<real>0.31000000238418579</real>
|
||||
<real>0.31000000238418579</real>
|
||||
<real>0.31000000238418579</real>
|
||||
<real>0.31000000238418579</real>
|
||||
</array>
|
||||
<key>cloud_pos_density1</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.69569224119186401</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_pos_density2</key>
|
||||
<array>
|
||||
<real>0.5</real>
|
||||
<real>0.5</real>
|
||||
<real>0.125</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scale</key>
|
||||
<array>
|
||||
<real>0.26999998092651367</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>cloud_scroll_rate</key>
|
||||
<array>
|
||||
<real>10.139999389648437</real>
|
||||
<real>10.01099967956543</real>
|
||||
</array>
|
||||
<key>cloud_shadow</key>
|
||||
<array>
|
||||
<real>0.31000000238418579</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>density_multiplier</key>
|
||||
<array>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>distance_multiplier</key>
|
||||
<array>
|
||||
<real>34.600002288818359</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>east_angle</key>
|
||||
<real>0</real>
|
||||
<key>enable_cloud_scroll</key>
|
||||
<array>
|
||||
<boolean>1</boolean>
|
||||
<boolean>1</boolean>
|
||||
</array>
|
||||
<key>gamma</key>
|
||||
<array>
|
||||
<real>0.94999998807907104</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>glow</key>
|
||||
<array>
|
||||
<real>12.600000381469727</real>
|
||||
<real>0.0010000000474974513</real>
|
||||
<real>-0.64999997615814209</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_density</key>
|
||||
<array>
|
||||
<real>4</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>haze_horizon</key>
|
||||
<array>
|
||||
<real>0.14000000059604645</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>0.19915600121021271</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>lightnorm</key>
|
||||
<array>
|
||||
<real>-0</real>
|
||||
<real>1</real>
|
||||
<real>1.8954237930302043e-006</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>max_y</key>
|
||||
<array>
|
||||
<real>676</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
<key>preset_num</key>
|
||||
<integer>10</integer>
|
||||
<key>star_brightness</key>
|
||||
<real>0</real>
|
||||
<key>sun_angle</key>
|
||||
<real>4.7123870849609375</real>
|
||||
<key>sunlight_color</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -805,6 +805,16 @@ bool cmd_line_chat(const std::string& revised_text, EChatType type, bool from_ge
|
|||
}
|
||||
return false;
|
||||
}
|
||||
else if (command == "/zoffset_up")
|
||||
{
|
||||
gSavedPerAccountSettings.setF32("AvatarHoverOffsetZ", gSavedPerAccountSettings.getF32("AvatarHoverOffsetZ") + 0.05f);
|
||||
return false;
|
||||
}
|
||||
else if (command == "/zoffset_down")
|
||||
{
|
||||
gSavedPerAccountSettings.setF32("AvatarHoverOffsetZ", gSavedPerAccountSettings.getF32("AvatarHoverOffsetZ") - 0.05f);
|
||||
return false;
|
||||
}
|
||||
else if (command == sFSCmdLineOfferTp())
|
||||
{
|
||||
LLUUID target_key;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,376 @@
|
|||
/**
|
||||
* @file fsfloaterwearablefavorites.cpp
|
||||
* @brief Class for the favorite wearables floater
|
||||
*
|
||||
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (c) 2018 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "fsfloaterwearablefavorites.h"
|
||||
#include "fscommon.h"
|
||||
#include "llappearancemgr.h"
|
||||
#include "llbutton.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llinventoryobserver.h"
|
||||
#include "llmenugl.h"
|
||||
#include "llmenubutton.h"
|
||||
#include "lltoggleablemenu.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
#include "llviewermenu.h" // for gMenuHolder
|
||||
#include "rlvactions.h"
|
||||
#include "rlvlocks.h"
|
||||
|
||||
#define FS_WEARABLE_FAVORITES_FOLDER "#Wearable Favorites"
|
||||
|
||||
static LLDefaultChildRegistry::Register<FSWearableFavoritesItemsList> r("fs_wearable_favorites_items_list");
|
||||
|
||||
FSWearableFavoritesItemsList::FSWearableFavoritesItemsList(const Params& p)
|
||||
: LLWearableItemsList(p)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL FSWearableFavoritesItemsList::handleDragAndDrop(S32 x, S32 y, MASK mask,
|
||||
BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg)
|
||||
{
|
||||
// Scroll folder view if needed. Never accepts a drag or drop.
|
||||
*accept = ACCEPT_NO;
|
||||
autoScroll(x, y);
|
||||
|
||||
if (cargo_type == DAD_BODYPART || cargo_type == DAD_CLOTHING || cargo_type == DAD_OBJECT)
|
||||
{
|
||||
if (drop)
|
||||
{
|
||||
LLInventoryItem* item = (LLInventoryItem*)cargo_data;
|
||||
if (!mDADSignal.empty())
|
||||
{
|
||||
mDADSignal(item->getUUID());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*accept = ACCEPT_YES_SINGLE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LLUUID FSFloaterWearableFavorites::sFolderID = LLUUID();
|
||||
|
||||
FSFloaterWearableFavorites::FSFloaterWearableFavorites(const LLSD& key)
|
||||
: LLFloater(key),
|
||||
mItemsList(NULL),
|
||||
mInitialized(false),
|
||||
mDADCallbackConnection()
|
||||
{
|
||||
mCategoriesObserver = new LLInventoryCategoriesObserver();
|
||||
}
|
||||
|
||||
FSFloaterWearableFavorites::~FSFloaterWearableFavorites()
|
||||
{
|
||||
if (gInventory.containsObserver(mCategoriesObserver))
|
||||
{
|
||||
gInventory.removeObserver(mCategoriesObserver);
|
||||
}
|
||||
delete mCategoriesObserver;
|
||||
|
||||
if (mDADCallbackConnection.connected())
|
||||
{
|
||||
mDADCallbackConnection.disconnect();
|
||||
}
|
||||
|
||||
if (mOptionsMenuHandle.get())
|
||||
{
|
||||
mOptionsMenuHandle.get()->die();
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL FSFloaterWearableFavorites::postBuild()
|
||||
{
|
||||
mItemsList = getChild<FSWearableFavoritesItemsList>("favorites_list");
|
||||
mItemsList->setNoFilteredItemsMsg(getString("search_no_items"));
|
||||
mItemsList->setDoubleClickCallback(boost::bind(&FSFloaterWearableFavorites::onDoubleClick, this));
|
||||
|
||||
mRemoveItemBtn = getChild<LLButton>("remove_btn");
|
||||
mRemoveItemBtn->setCommitCallback(boost::bind(&FSFloaterWearableFavorites::handleRemove, this));
|
||||
|
||||
mFilterEditor = getChild<LLFilterEditor>("wearable_filter_input");
|
||||
mFilterEditor->setCommitCallback(boost::bind(&FSFloaterWearableFavorites::onFilterEdit, this, _2));
|
||||
|
||||
// Create menus.
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
|
||||
|
||||
registrar.add("FavWearables.Action", boost::bind(&FSFloaterWearableFavorites::onOptionsMenuItemClicked, this, _2));
|
||||
enable_registrar.add("FavWearables.CheckAction", boost::bind(&FSFloaterWearableFavorites::onOptionsMenuItemChecked, this, _2));
|
||||
|
||||
mOptionsButton = getChild<LLMenuButton>("options_btn");
|
||||
|
||||
LLToggleableMenu* options_menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_fs_wearable_favorites.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
if (options_menu)
|
||||
{
|
||||
mOptionsMenuHandle = options_menu->getHandle();
|
||||
mOptionsButton->setMenu(options_menu, LLMenuButton::MP_BOTTOM_LEFT);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//virtual
|
||||
void FSFloaterWearableFavorites::onOpen(const LLSD& /*info*/)
|
||||
{
|
||||
if (!mInitialized)
|
||||
{
|
||||
if (!gInventory.isInventoryUsable())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
initCategory();
|
||||
|
||||
LLViewerInventoryCategory* category = gInventory.getCategory(sFolderID);
|
||||
if (!category)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
|
||||
LLViewerInventoryCategory* category_cof = gInventory.getCategory(cof);
|
||||
if (!category_cof)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gInventory.addObserver(mCategoriesObserver);
|
||||
mCategoriesObserver->addCategory(sFolderID, boost::bind(&FSFloaterWearableFavorites::updateList, this, sFolderID));
|
||||
mCategoriesObserver->addCategory(cof, boost::bind(&FSFloaterWearableFavorites::updateList, this, sFolderID));
|
||||
category->fetch();
|
||||
|
||||
mItemsList->setSortOrder((LLWearableItemsList::ESortOrder)gSavedSettings.getU32("FSWearableFavoritesSortOrder"));
|
||||
updateList(sFolderID);
|
||||
mItemsList->setDADCallback(boost::bind(&FSFloaterWearableFavorites::onItemDAD, this, _1));
|
||||
|
||||
mInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void FSFloaterWearableFavorites::draw()
|
||||
{
|
||||
LLFloater::draw();
|
||||
|
||||
mRemoveItemBtn->setEnabled(mItemsList->numSelected() > 0);
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL FSFloaterWearableFavorites::handleKeyHere(KEY key, MASK mask)
|
||||
{
|
||||
if (FSCommon::isFilterEditorKeyCombo(key, mask))
|
||||
{
|
||||
mFilterEditor->setFocus(TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return LLFloater::handleKeyHere(key, mask);
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::initCategory()
|
||||
{
|
||||
LLUUID fs_favs_id;
|
||||
|
||||
LLUUID fs_root_cat_id = gInventory.findCategoryByName(ROOT_FIRESTORM_FOLDER);
|
||||
if (!fs_root_cat_id.isNull())
|
||||
{
|
||||
LLInventoryModel::item_array_t* items;
|
||||
LLInventoryModel::cat_array_t* cats;
|
||||
gInventory.getDirectDescendentsOf(fs_root_cat_id, cats, items);
|
||||
if (cats)
|
||||
{
|
||||
for (LLInventoryModel::cat_array_t::iterator it = cats->begin(); it != cats->end(); ++it)
|
||||
{
|
||||
if ((*it)->getName() == FS_WEARABLE_FAVORITES_FOLDER)
|
||||
{
|
||||
fs_favs_id = (*it)->getUUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fs_root_cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(), LLFolderType::FT_NONE, ROOT_FIRESTORM_FOLDER);
|
||||
}
|
||||
|
||||
if (fs_favs_id.isNull())
|
||||
{
|
||||
fs_favs_id = gInventory.createNewCategory(fs_root_cat_id, LLFolderType::FT_NONE, FS_WEARABLE_FAVORITES_FOLDER);
|
||||
}
|
||||
|
||||
sFolderID = fs_favs_id;
|
||||
}
|
||||
|
||||
//static
|
||||
LLUUID FSFloaterWearableFavorites::getFavoritesFolder()
|
||||
{
|
||||
if (sFolderID.notNull())
|
||||
{
|
||||
return sFolderID;
|
||||
}
|
||||
|
||||
LLUUID fs_root_cat_id = gInventory.findCategoryByName(ROOT_FIRESTORM_FOLDER);
|
||||
if (!fs_root_cat_id.isNull())
|
||||
{
|
||||
LLInventoryModel::item_array_t* items;
|
||||
LLInventoryModel::cat_array_t* cats;
|
||||
gInventory.getDirectDescendentsOf(fs_root_cat_id, cats, items);
|
||||
if (cats)
|
||||
{
|
||||
for (LLInventoryModel::cat_array_t::iterator it = cats->begin(); it != cats->end(); ++it)
|
||||
{
|
||||
if ((*it)->getName() == FS_WEARABLE_FAVORITES_FOLDER)
|
||||
{
|
||||
sFolderID = (*it)->getUUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sFolderID;
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::updateList(const LLUUID& folder_id)
|
||||
{
|
||||
mItemsList->updateList(folder_id);
|
||||
|
||||
if (gInventory.isCategoryComplete(folder_id))
|
||||
{
|
||||
mItemsList->setNoItemsCommentText(getString("empty_list")); // Have to reset it here because LLWearableItemsList::updateList might override it
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::onItemDAD(const LLUUID& item_id)
|
||||
{
|
||||
link_inventory_object(sFolderID, item_id, LLPointer<LLInventoryCallback>(NULL));
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::handleRemove()
|
||||
{
|
||||
uuid_vec_t selected_item_ids;
|
||||
mItemsList->getSelectedUUIDs(selected_item_ids);
|
||||
|
||||
for (uuid_vec_t::iterator it = selected_item_ids.begin(); it != selected_item_ids.end(); ++it)
|
||||
{
|
||||
remove_inventory_item(*it, LLPointer<LLInventoryCallback>(NULL));
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::onFilterEdit(const std::string& search_string)
|
||||
{
|
||||
mItemsList->setFilterSubString(search_string);
|
||||
mItemsList->setNoItemsCommentText(getString("empty_list"));
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::onOptionsMenuItemClicked(const LLSD& userdata)
|
||||
{
|
||||
const std::string action = userdata.asString();
|
||||
|
||||
if (action == "sort_by_name")
|
||||
{
|
||||
mItemsList->setSortOrder(LLWearableItemsList::E_SORT_BY_NAME);
|
||||
gSavedSettings.setU32("FSWearableFavoritesSortOrder", LLWearableItemsList::E_SORT_BY_NAME);
|
||||
}
|
||||
else if (action == "sort_by_most_recent")
|
||||
{
|
||||
mItemsList->setSortOrder(LLWearableItemsList::E_SORT_BY_MOST_RECENT);
|
||||
gSavedSettings.setU32("FSWearableFavoritesSortOrder", LLWearableItemsList::E_SORT_BY_MOST_RECENT);
|
||||
}
|
||||
else if (action == "sort_by_type_name")
|
||||
{
|
||||
mItemsList->setSortOrder(LLWearableItemsList::E_SORT_BY_TYPE_NAME);
|
||||
gSavedSettings.setU32("FSWearableFavoritesSortOrder", LLWearableItemsList::E_SORT_BY_TYPE_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
bool FSFloaterWearableFavorites::onOptionsMenuItemChecked(const LLSD& userdata)
|
||||
{
|
||||
const std::string action = userdata.asString();
|
||||
|
||||
if (action == "sort_by_name")
|
||||
{
|
||||
return mItemsList->getSortOrder() == LLWearableItemsList::E_SORT_BY_NAME;
|
||||
}
|
||||
else if (action == "sort_by_most_recent")
|
||||
{
|
||||
return mItemsList->getSortOrder() == LLWearableItemsList::E_SORT_BY_MOST_RECENT;
|
||||
}
|
||||
else if (action == "sort_by_type_name")
|
||||
{
|
||||
return mItemsList->getSortOrder() == LLWearableItemsList::E_SORT_BY_TYPE_NAME;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::onDoubleClick()
|
||||
{
|
||||
LLUUID selected_item_id = mItemsList->getSelectedUUID();
|
||||
if (selected_item_id.notNull())
|
||||
{
|
||||
uuid_vec_t ids;
|
||||
ids.push_back(selected_item_id);
|
||||
LLViewerInventoryItem* item = gInventory.getItem(selected_item_id);
|
||||
|
||||
if (get_is_item_worn(selected_item_id))
|
||||
{
|
||||
if ((item->getType() == LLAssetType::AT_CLOTHING && (!RlvActions::isRlvEnabled() || gRlvWearableLocks.canRemove(item))) ||
|
||||
(item->getType() == LLAssetType::AT_OBJECT) && (!RlvActions::isRlvEnabled() || gRlvAttachmentLocks.canDetach(item)))
|
||||
{
|
||||
LLAppearanceMgr::instance().removeItemsFromAvatar(ids);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item->getType() == LLAssetType::AT_BODYPART && (!RlvActions::isRlvEnabled() || (gRlvWearableLocks.canWear(item) & RLV_WEAR_REPLACE) == RLV_WEAR_REPLACE))
|
||||
{
|
||||
wear_multiple(ids, true);
|
||||
}
|
||||
else if (item->getType() == LLAssetType::AT_CLOTHING && LLAppearanceMgr::instance().canAddWearables(ids) && (!RlvActions::isRlvEnabled() || (gRlvWearableLocks.canWear(item) & RLV_WEAR_ADD) == RLV_WEAR_ADD))
|
||||
{
|
||||
wear_multiple(ids, false);
|
||||
}
|
||||
else if (item->getType() == LLAssetType::AT_OBJECT && LLAppearanceMgr::instance().canAddWearables(ids) && (!RlvActions::isRlvEnabled() || (gRlvAttachmentLocks.canAttach(item) & RLV_WEAR_ADD) == RLV_WEAR_ADD))
|
||||
{
|
||||
wear_multiple(ids, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
/**
|
||||
* @file fsfloaterwearablefavorites.h
|
||||
* @brief Class for the favorite wearables floater
|
||||
*
|
||||
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (c) 2018 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef FS_FLOATERWEARABLEFAVORITES_H
|
||||
#define FS_FLOATERWEARABLEFAVORITES_H
|
||||
|
||||
#include "llfloater.h"
|
||||
#include "llwearableitemslist.h"
|
||||
|
||||
class LLButton;
|
||||
class LLFilterEditor;
|
||||
class LLMenuButton;
|
||||
class LLInventoryCategoriesObserver;
|
||||
|
||||
class FSWearableFavoritesItemsList : public LLWearableItemsList
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLWearableItemsList::Params>
|
||||
{
|
||||
Params()
|
||||
{}
|
||||
};
|
||||
|
||||
virtual ~FSWearableFavoritesItemsList() {}
|
||||
|
||||
/* virtual */ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg);
|
||||
|
||||
typedef boost::signals2::signal<void(const LLUUID& id)> item_dad_callback_t;
|
||||
boost::signals2::connection setDADCallback(const item_dad_callback_t::slot_type& cb)
|
||||
{
|
||||
return mDADSignal.connect(cb);
|
||||
}
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
FSWearableFavoritesItemsList(const Params&);
|
||||
|
||||
item_dad_callback_t mDADSignal;
|
||||
};
|
||||
|
||||
class FSFloaterWearableFavorites : public LLFloater
|
||||
{
|
||||
public:
|
||||
FSFloaterWearableFavorites(const LLSD& key);
|
||||
virtual ~FSFloaterWearableFavorites();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& info);
|
||||
/*virtual*/ void draw();
|
||||
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
|
||||
/*virtual*/ bool hasAccelerators() const { return true; }
|
||||
|
||||
static LLUUID getFavoritesFolder();
|
||||
|
||||
private:
|
||||
void initCategory();
|
||||
void updateList(const LLUUID& folder_id);
|
||||
|
||||
void onItemDAD(const LLUUID& item_id);
|
||||
void handleRemove();
|
||||
void onFilterEdit(const std::string& search_string);
|
||||
void onDoubleClick();
|
||||
|
||||
void onOptionsMenuItemClicked(const LLSD& userdata);
|
||||
bool onOptionsMenuItemChecked(const LLSD& userdata);
|
||||
|
||||
bool mInitialized;
|
||||
|
||||
boost::signals2::connection mDADCallbackConnection;
|
||||
|
||||
LLInventoryCategoriesObserver* mCategoriesObserver;
|
||||
|
||||
FSWearableFavoritesItemsList* mItemsList;
|
||||
LLButton* mRemoveItemBtn;
|
||||
LLFilterEditor* mFilterEditor;
|
||||
LLMenuButton* mOptionsButton;
|
||||
LLHandle<LLView> mOptionsMenuHandle;
|
||||
|
||||
static LLUUID sFolderID;
|
||||
};
|
||||
|
||||
#endif // FS_FLOATERWEARABLEFAVORITES_H
|
||||
|
|
@ -314,7 +314,7 @@ void LLFloaterRegionInfo::requestRegionInfo()
|
|||
void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
|
||||
{
|
||||
static LLDispatcher dispatch;
|
||||
LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
|
||||
LLFloaterRegionInfo* floater = LLFloaterReg::findTypedInstance<LLFloaterRegionInfo>("region_info");
|
||||
if(!floater)
|
||||
{
|
||||
return;
|
||||
|
|
@ -350,7 +350,7 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
|
|||
void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
|
||||
{
|
||||
LLPanel* panel;
|
||||
LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
|
||||
LLFloaterRegionInfo* floater = LLFloaterReg::findTypedInstance<LLFloaterRegionInfo>("region_info");
|
||||
if(!floater)
|
||||
{
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -126,6 +126,9 @@ void commit_radio_group_land(LLUICtrl* ctrl);
|
|||
void commit_grid_mode(LLUICtrl *);
|
||||
void commit_slider_zoom(LLUICtrl *ctrl);
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
void commit_show_highlight(void *ctrl);
|
||||
|
||||
/**
|
||||
* Class LLLandImpactsObserver
|
||||
*
|
||||
|
|
@ -268,9 +271,13 @@ BOOL LLFloaterTools::postBuild()
|
|||
|
||||
// <FS:KC> show highlight
|
||||
mCheckShowHighlight = getChild<LLCheckBoxCtrl>("checkbox show highlight");
|
||||
mCheckShowHighlight->setValue(gSavedSettings.getBOOL("RenderHighlightSelections"));
|
||||
LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL);
|
||||
|
||||
mCheckActualRoot = getChild<LLCheckBoxCtrl>("checkbox actual root");
|
||||
// </FS:KC>
|
||||
|
||||
|
||||
//
|
||||
// Create Buttons
|
||||
//
|
||||
|
|
@ -476,6 +483,9 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
|
|||
// <FS:Ansariel> FIRE-7802: Grass and tree selection in build tool
|
||||
mCommitCallbackRegistrar.add("BuildTool.TreeGrass", boost::bind(&LLFloaterTools::onSelectTreeGrassCombo, this));
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
mCommitCallbackRegistrar.add("BuildTool.commitShowHighlight", boost::bind(&commit_show_highlight, this));
|
||||
|
||||
mLandImpactsObserver = new LLLandImpactsObserver();
|
||||
LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
|
||||
}
|
||||
|
|
@ -1070,6 +1080,15 @@ void LLFloaterTools::onOpen(const LLSD& key)
|
|||
{
|
||||
mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
|
||||
mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
|
||||
|
||||
// <FS:KC> Set the check box value from the saved setting
|
||||
// this function runs on selection change
|
||||
if (!mOpen)
|
||||
{
|
||||
mOpen = TRUE;
|
||||
mCheckShowHighlight->setValue(gSavedSettings.getBOOL("RenderHighlightSelections"));
|
||||
}
|
||||
// </FS:KC>
|
||||
|
||||
std::string panel = key.asString();
|
||||
if (!panel.empty())
|
||||
|
|
@ -1099,6 +1118,12 @@ void LLFloaterTools::onClose(bool app_quitting)
|
|||
LLSelectMgr::getInstance()->promoteSelectionToRoot();
|
||||
gSavedSettings.setBOOL("EditLinkedParts", FALSE);
|
||||
|
||||
// <FS:KC>
|
||||
LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL);
|
||||
|
||||
mOpen = FALSE; //hack cause onOpen runs on every selection change but onClose doesnt.
|
||||
// </FS:KC>
|
||||
|
||||
gViewerWindow->showCursor();
|
||||
|
||||
resetToolState();
|
||||
|
|
@ -1295,6 +1320,23 @@ void commit_select_component(void *data)
|
|||
}
|
||||
}
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
void commit_show_highlight(void *data)
|
||||
{
|
||||
LLFloaterTools* floaterp = (LLFloaterTools*)data;
|
||||
BOOL show_highlight = floaterp->mCheckShowHighlight->get();
|
||||
if (show_highlight)
|
||||
{
|
||||
LLSelectMgr::getInstance()->setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_SHOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLSelectMgr::getInstance()->setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_HIDE);
|
||||
}
|
||||
}
|
||||
// </FS:KC>
|
||||
|
||||
|
||||
// static
|
||||
void LLFloaterTools::setObjectType( LLPCode pcode )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -224,12 +224,14 @@ public:
|
|||
private:
|
||||
BOOL mDirty;
|
||||
BOOL mHasSelection;
|
||||
BOOL mOpen; //Phoenix:KC
|
||||
|
||||
//Phoenix:KC
|
||||
S32 mCollapsedHeight;
|
||||
S32 mExpandedHeight;
|
||||
std::map<std::string, std::string> mStatusText;
|
||||
|
||||
|
||||
protected:
|
||||
LLSD mMediaSettings;
|
||||
|
||||
|
|
|
|||
|
|
@ -536,7 +536,10 @@ void LLGroupListItem::onProfileBtnClick()
|
|||
void LLGroupListItem::changed(LLGroupChange gc)
|
||||
{
|
||||
LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mID);
|
||||
if(group_data)
|
||||
// <FS:Ansariel> FIRE-22148: Only update group icon if the received group data actually contains group icon info
|
||||
//if (group_data)
|
||||
if ((gc == GC_ALL || gc == GC_PROPERTIES) && group_data)
|
||||
// </FS:Ansariel>
|
||||
setGroupIconID(group_data->mInsigniaID);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@
|
|||
#endif
|
||||
// </FS:Zi>
|
||||
#include "fsfloaterplacedetails.h"
|
||||
#include "fsfloaterwearablefavorites.h"
|
||||
#include "llviewerattachmenu.h"
|
||||
#include "llresmgr.h"
|
||||
|
||||
|
|
@ -1375,6 +1376,13 @@ BOOL LLInvFVBridge::isProtectedFolder(bool ignore_setting /*= false*/) const
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if ((mUUID == FSFloaterWearableFavorites::getFavoritesFolder()
|
||||
|| model->isObjectDescendentOf(mUUID, FSFloaterWearableFavorites::getFavoritesFolder()))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectWearableFavoritesFolders"))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
// </FS:TT>
|
||||
|
|
@ -5670,9 +5678,11 @@ bool LLFolderBridge::isProtected() const
|
|||
{
|
||||
static LLCachedControl<bool> protectAOFolders(gSavedPerAccountSettings, "ProtectAOFolders");
|
||||
static LLCachedControl<bool> protectBridgeFolder(gSavedPerAccountSettings, "ProtectBridgeFolder");
|
||||
static LLCachedControl<bool> WearableFavoritesprotectBridgeFolder(gSavedPerAccountSettings, "ProtectWearableFavoritesFolders");
|
||||
|
||||
return ((mUUID == AOEngine::instance().getAOFolder() && protectAOFolders) ||
|
||||
(mUUID == FSLSLBridge::instance().getBridgeFolder() && protectBridgeFolder));
|
||||
(mUUID == FSLSLBridge::instance().getBridgeFolder() && protectBridgeFolder) ||
|
||||
(mUUID == FSFloaterWearableFavorites::getFavoritesFolder() && WearableFavoritesprotectBridgeFolder));
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@
|
|||
|
||||
// Firestorm includes
|
||||
#include "aoengine.h"
|
||||
#include "fsfloaterwearablefavorites.h"
|
||||
#include "fslslbridge.h"
|
||||
|
||||
BOOL LLInventoryState::sWearNewClothing = FALSE;
|
||||
|
|
@ -433,7 +434,10 @@ void copy_inventory_category(LLInventoryModel* model,
|
|||
LLInventoryItem* item = *iter;
|
||||
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(update_folder_cb, new_cat_uuid));
|
||||
|
||||
if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
|
||||
// <FS:Ansariel> FIRE-21719: Copy-pasting a folder doesn't copy contained links
|
||||
//if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
|
||||
if (!item->getIsLinkType() && !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
// If the item is nocopy, we do nothing or, optionally, move it
|
||||
if (move_no_copy_items)
|
||||
|
|
@ -445,6 +449,12 @@ void copy_inventory_category(LLInventoryModel* model,
|
|||
// Decrement the count in root_id since that one item won't be copied over
|
||||
LLMarketplaceData::instance().decrementValidationWaiting(root_id);
|
||||
}
|
||||
// <FS:Ansariel> FIRE-21719: Copy-pasting a folder doesn't copy contained links
|
||||
else if (item->getIsLinkType())
|
||||
{
|
||||
link_inventory_object(new_cat_uuid, item->getLinkedUUID(), cb);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
else
|
||||
{
|
||||
copy_inventory_item(
|
||||
|
|
@ -640,6 +650,9 @@ BOOL get_is_item_removable(const LLInventoryModel* model, const LLUUID& id)
|
|||
||
|
||||
(model->isObjectDescendentOf(id, FSLSLBridge::instance().getBridgeFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder"))
|
||||
||
|
||||
(model->isObjectDescendentOf(id, FSFloaterWearableFavorites::getFavoritesFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectWearableFavoritesFolders"))
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
|
|
@ -707,6 +720,9 @@ BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id)
|
|||
||
|
||||
((id == FSLSLBridge::instance().getBridgeFolder() || model->isObjectDescendentOf(id, FSLSLBridge::instance().getBridgeFolder()))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder"))
|
||||
||
|
||||
((id == FSFloaterWearableFavorites::getFavoritesFolder() || model->isObjectDescendentOf(id, FSFloaterWearableFavorites::getFavoritesFolder()))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectWearableFavoritesFolders"))
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
|
|
@ -762,6 +778,9 @@ BOOL get_is_category_renameable(const LLInventoryModel* model, const LLUUID& id)
|
|||
||
|
||||
((id == FSLSLBridge::instance().getBridgeFolder() || model->isObjectDescendentOf(id, FSLSLBridge::instance().getBridgeFolder()))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder"))
|
||||
||
|
||||
((id == FSFloaterWearableFavorites::getFavoritesFolder() || model->isObjectDescendentOf(id, FSFloaterWearableFavorites::getFavoritesFolder()))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectWearableFavoritesFolders"))
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -64,11 +64,11 @@
|
|||
#include "rlvhandler.h"
|
||||
#include "rlvlocks.h"
|
||||
// [/RLVa:KB]
|
||||
//-TT Patch: ReplaceWornItemsOnly
|
||||
// <FS:TT> Patch: ReplaceWornItemsOnly
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llviewerobject.h"
|
||||
#include "llgesturemgr.h"
|
||||
//-TT
|
||||
// </FS:TT>
|
||||
|
||||
//#define DIFF_INVENTORY_FILES
|
||||
#ifdef DIFF_INVENTORY_FILES
|
||||
|
|
@ -76,6 +76,7 @@
|
|||
#endif
|
||||
|
||||
#include "aoengine.h"
|
||||
#include "fsfloaterwearablefavorites.h"
|
||||
#include "fslslbridge.h"
|
||||
#ifdef OPENSIM
|
||||
#include "llviewernetwork.h"
|
||||
|
|
@ -1310,7 +1311,9 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
|
|||
if ((isObjectDescendentOf(item->getUUID(), AOEngine::instance().getAOFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectAOFolders")) ||
|
||||
(isObjectDescendentOf(item->getUUID(), FSLSLBridge::instance().getBridgeFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder")))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder")) ||
|
||||
(isObjectDescendentOf(item->getUUID(), FSFloaterWearableFavorites::getFavoritesFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectWearableFavoritesFolders")))
|
||||
{
|
||||
LL_INFOS("Inventory") << "Cannot move item because it is descendent of a protected folder" << LL_ENDL;
|
||||
return;
|
||||
|
|
@ -1352,7 +1355,9 @@ void LLInventoryModel::changeCategoryParent(LLViewerInventoryCategory* cat,
|
|||
if ((isObjectDescendentOf(cat->getUUID(), AOEngine::instance().getAOFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectAOFolders")) ||
|
||||
(isObjectDescendentOf(cat->getUUID(), FSLSLBridge::instance().getBridgeFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder")))
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectBridgeFolder")) ||
|
||||
(isObjectDescendentOf(cat->getUUID(), FSFloaterWearableFavorites::getFavoritesFolder())
|
||||
&& gSavedPerAccountSettings.getBOOL("ProtectWearableFavoritesFolders")))
|
||||
{
|
||||
LL_INFOS("Inventory") << "Cannot move category because it is descendent of a protected folder" << LL_ENDL;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -211,6 +211,12 @@ LLFolderView * LLInventoryPanel::createFolderRoot(LLUUID root_id )
|
|||
// <FS:Ansariel> Inventory specials
|
||||
p.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
p.item_height = fsFolderViewItemHeight;
|
||||
p.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
return LLUICtrlFactory::create<LLFolderView>(p);
|
||||
}
|
||||
|
||||
|
|
@ -857,6 +863,12 @@ LLFolderViewFolder * LLInventoryPanel::createFolderViewFolder(LLInvFVBridge * br
|
|||
// <FS:Ansariel> Inventory specials
|
||||
params.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
params.item_height = fsFolderViewItemHeight;
|
||||
params.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
return LLUICtrlFactory::create<LLFolderViewFolder>(params);
|
||||
}
|
||||
|
||||
|
|
@ -876,6 +888,12 @@ LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge
|
|||
|
||||
// <FS:Ansariel> Inventory specials
|
||||
params.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
params.item_height = fsFolderViewItemHeight;
|
||||
params.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
return LLUICtrlFactory::create<LLFolderViewItem>(params);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -220,6 +220,8 @@ public:
|
|||
// <FS:Ansariel> Optional hiding of Inbox folder
|
||||
void updateShowInboxFolder(const LLSD &data);
|
||||
|
||||
void updateFolderLabel(const LLUUID& folder_id);
|
||||
|
||||
// DEBUG ONLY:
|
||||
static void dumpSelectionInformation(void* user_data);
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,15 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge
|
|||
params.font_color = item_color;
|
||||
params.font_highlight_color = item_color;
|
||||
params.allow_drop = allow_drop;
|
||||
|
||||
// <FS:Ansariel> Inventory specials
|
||||
params.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
params.item_height = fsFolderViewItemHeight;
|
||||
params.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
return LLUICtrlFactory::create<LLInboxFolderViewFolder>(params);
|
||||
}
|
||||
|
|
@ -102,6 +111,15 @@ LLFolderViewItem * LLInboxInventoryPanel::createFolderViewItem(LLInvFVBridge * b
|
|||
params.font_color = item_color;
|
||||
params.font_highlight_color = item_color;
|
||||
|
||||
// <FS:Ansariel> Inventory specials
|
||||
params.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
params.item_height = fsFolderViewItemHeight;
|
||||
params.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
return LLUICtrlFactory::create<LLInboxFolderViewItem>(params);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1736,6 +1736,12 @@ void LLPanelObjectInventory::reset()
|
|||
// <FS:Ansariel> Inventory specials
|
||||
p.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
p.item_height = fsFolderViewItemHeight;
|
||||
p.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
mFolders = LLUICtrlFactory::create<LLFolderView>(p);
|
||||
|
||||
mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
|
||||
|
|
@ -1900,6 +1906,12 @@ void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root
|
|||
// <FS:Ansariel> Inventory specials
|
||||
p.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
p.item_height = fsFolderViewItemHeight;
|
||||
p.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLFolderViewFolder* new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p);
|
||||
new_folder->addToFolder(mFolders);
|
||||
new_folder->toggleOpen();
|
||||
|
|
@ -1950,6 +1962,12 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li
|
|||
// <FS:Ansariel> Inventory specials
|
||||
p.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
p.item_height = fsFolderViewItemHeight;
|
||||
p.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
|
||||
child_categories.push_back(new obj_folder_pair(obj,
|
||||
(LLFolderViewFolder*)view));
|
||||
|
|
@ -1969,6 +1987,12 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li
|
|||
// <FS:Ansariel> Inventory specials
|
||||
params.for_inventory = true;
|
||||
|
||||
static LLCachedControl<S32> fsFolderViewItemHeight(*LLUI::sSettingGroups["config"], "FSFolderViewItemHeight");
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
params.item_height = fsFolderViewItemHeight;
|
||||
params.item_top_pad = default_params.item_top_pad - (default_params.item_height - fsFolderViewItemHeight) / 2 - 1;
|
||||
// </FS:Ansariel>
|
||||
|
||||
view = LLUICtrlFactory::create<LLFolderViewItem> (params);
|
||||
}
|
||||
view->addToFolder(folder);
|
||||
|
|
|
|||
|
|
@ -72,7 +72,10 @@ LLUUID notification_id_to_object_id(const LLUUID& notification_id)
|
|||
|
||||
|
||||
LLScriptFloater::LLScriptFloater(const LLSD& key)
|
||||
: LLDockableFloater(NULL, true, key)
|
||||
// <FS:Ansariel> FIRE-21546: Don't close docked floater if IMs arrive, but only if IMs shown in tabs - still hide when using docked windows!
|
||||
//: LLDockableFloater(NULL, true, key)
|
||||
: LLDockableFloater(NULL, gSavedSettings.getS32("FSChatWindow") != 1, key)
|
||||
// </FS:Ansariel>
|
||||
, mScriptForm(NULL)
|
||||
, mSaveFloaterPosition(false)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -238,6 +238,11 @@ LLSelectMgr::LLSelectMgr()
|
|||
|
||||
mForceSelection = FALSE;
|
||||
mShowSelection = FALSE;
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
mFSShowHideHighlight = FS_SHOW_HIDE_HIGHLIGHT_NORMAL;
|
||||
// </FS:KC>
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -5948,7 +5953,10 @@ void LLSelectMgr::updateSelectionSilhouette(LLObjectSelectionHandle object_handl
|
|||
}
|
||||
void LLSelectMgr::renderSilhouettes(BOOL for_hud)
|
||||
{
|
||||
if (!mRenderSilhouettes || !mRenderHighlightSelections)
|
||||
// <FS:KC> show/hide build highlight
|
||||
// if (!mRenderSilhouettes || !mRenderHighlightSelections)
|
||||
if (((mFSShowHideHighlight == FS_SHOW_HIDE_HIGHLIGHT_NORMAL) && (!mRenderSilhouettes || !mRenderHighlightSelections)) || (mFSShowHideHighlight == FS_SHOW_HIDE_HIGHLIGHT_HIDE))
|
||||
// </FS:KC>
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,15 @@ const S32 MAX_CHILDREN_PER_TASK = 255;
|
|||
const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
enum EFSShowHideHighlight
|
||||
{
|
||||
FS_SHOW_HIDE_HIGHLIGHT_NORMAL = 0,
|
||||
FS_SHOW_HIDE_HIGHLIGHT_SHOW = 1,
|
||||
FS_SHOW_HIDE_HIGHLIGHT_HIDE = 2
|
||||
};
|
||||
// </FS:KC>
|
||||
|
||||
// This is used by the DeRezObject message to determine where to put
|
||||
// derezed tasks.
|
||||
enum EDeRezDestination
|
||||
|
|
@ -612,6 +621,10 @@ public:
|
|||
void renderSilhouettes(BOOL for_hud);
|
||||
void enableSilhouette(BOOL enable) { mRenderSilhouettes = enable; }
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
void setFSShowHideHighlight(EFSShowHideHighlight state) { mFSShowHideHighlight = state; }
|
||||
// </FS:KC>
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Utility functions that operate on the current selection
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
|
@ -913,6 +926,10 @@ private:
|
|||
|
||||
LLAnimPauseRequest mPauseRequest;
|
||||
|
||||
// <FS:KC> show/hide build highlight
|
||||
EFSShowHideHighlight mFSShowHideHighlight;
|
||||
// </FS:KC>
|
||||
|
||||
// <FS:Zi> Warning when trying to duplicate while in edit linked parts/select face mode
|
||||
public:
|
||||
// returns TRUE if current selection does not contain individual selections
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@
|
|||
#include "llviewermedia_streamingaudio.h"
|
||||
#include "llaudioengine.h"
|
||||
|
||||
#ifdef LL_FMODSTUDIO
|
||||
# include "llaudioengine_fmodstudio.h"
|
||||
#endif
|
||||
|
||||
#ifdef LL_FMODEX
|
||||
# include "llaudioengine_fmodex.h"
|
||||
#endif
|
||||
|
|
@ -955,12 +959,21 @@ bool idle_startup()
|
|||
delete gAudiop;
|
||||
gAudiop = NULL;
|
||||
|
||||
#ifdef LL_FMODEX
|
||||
#ifdef LL_FMODSTUDIO
|
||||
#if !LL_WINDOWS
|
||||
if (NULL == getenv("LL_BAD_FMODSTUDIO_DRIVER"))
|
||||
#endif // !LL_WINDOWS
|
||||
{
|
||||
gAudiop = (LLAudioEngine *) new LLAudioEngine_FMODSTUDIO(gSavedSettings.getBOOL("FMODProfilerEnable"), gSavedSettings.getU32("FMODResampleMethod"));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LL_FMODEX
|
||||
#if !LL_WINDOWS
|
||||
if (NULL == getenv("LL_BAD_FMODEX_DRIVER"))
|
||||
#endif // !LL_WINDOWS
|
||||
{
|
||||
gAudiop = (LLAudioEngine *) new LLAudioEngine_FMODEX(gSavedSettings.getBOOL("FMODExProfilerEnable"));
|
||||
gAudiop = (LLAudioEngine *) new LLAudioEngine_FMODEX(gSavedSettings.getBOOL("FMODProfilerEnable"));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -977,7 +990,7 @@ bool idle_startup()
|
|||
if (gAudiop)
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
// FMOD Ex on Windows needs the window handle to stop playing audio
|
||||
// FMOD Studio and FMOD Ex on Windows needs the window handle to stop playing audio
|
||||
// when window is minimized. JC
|
||||
void* window_handle = (HWND)gViewerWindow->getPlatformWindow();
|
||||
#else
|
||||
|
|
@ -1072,6 +1085,36 @@ bool idle_startup()
|
|||
// *TODO: Does this need to be here?
|
||||
LLStringOps::setupDatetimeInfo(false);
|
||||
|
||||
// <FS:Beq> [FIRE-22130] for LOD Factors > 4 reset to the detected dafault
|
||||
if (gSavedSettings.getF32("RenderVolumeLODFactor") > 4.f)
|
||||
{
|
||||
bool feature_table_success = false;
|
||||
LLFeatureManager& feature_manager = LLFeatureManager::instance();
|
||||
U32 level = gSavedSettings.getU32("RenderQualityPerformance");
|
||||
if (feature_manager.isValidGraphicsLevel(level))
|
||||
{
|
||||
std::string level_name = feature_manager.getNameForGraphicsLevel(level);
|
||||
LLFeatureList* feature_list = feature_manager.findMask(level_name);
|
||||
if (feature_list)
|
||||
{
|
||||
F32 new_val = feature_list->getRecommendedValue("RenderVolumeLODFactor");
|
||||
if (new_val > 0.f)
|
||||
{
|
||||
feature_table_success = true;
|
||||
gSavedSettings.setF32("RenderVolumeLODFactor", new_val);
|
||||
LL_INFOS("AppInit") << "LOD Factor too high. Resetting to recommended value for graphics level '" << level_name << "': " << new_val << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!feature_table_success)
|
||||
{
|
||||
gSavedSettings.getControl("RenderVolumeLODFactor")->resetToDefault(true);
|
||||
LL_INFOS("AppInit") << "LOD Factor too high. Resetting to recommended value for global default: " << gSavedSettings.getF32("RenderVolumeLODFactor") << LL_ENDL;
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
// Go to the next startup state
|
||||
LLStartUp::setStartupState( STATE_BROWSER_INIT );
|
||||
return FALSE;
|
||||
|
|
@ -3038,14 +3081,6 @@ void login_show()
|
|||
//LLPanelLogin::show( gViewerWindow->getWindowRectScaled(), login_callback, NULL );
|
||||
FSPanelLogin::show( gViewerWindow->getWindowRectScaled(), login_callback, NULL );
|
||||
// </FS:Ansariel> [FS Login Panel]
|
||||
|
||||
// <FS:PP> Warning about too high LOD on startup
|
||||
if (gSavedSettings.getF32("RenderVolumeLODFactor") >= 4.0f)
|
||||
{
|
||||
LLNotificationsUtil::add("RenderVolumeLODFactorWarning");
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
}
|
||||
|
||||
// Callback for when login screen is closed. Option 0 = connect, option 1 = quit.
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ void LLViewerAudio::startInternetStreamWithAutoFade(std::string streamURI)
|
|||
|
||||
LLStreamingAudioInterface *stream = gAudiop->getStreamingAudioImpl();
|
||||
if(stream && stream->supportsAdjustableBufferSizes())
|
||||
stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"),gSavedSettings.getU32("FMODExDecodeBufferSize"));
|
||||
stream->setBufferSizes(gSavedSettings.getU32("FMODStreamBufferSize"),gSavedSettings.getU32("FMODDecodeBufferSize"));
|
||||
|
||||
gAudiop->startInternetStream(mNextStreamURI);
|
||||
startFading();
|
||||
|
|
@ -192,7 +192,7 @@ bool LLViewerAudio::onIdleUpdate()
|
|||
{
|
||||
LLStreamingAudioInterface *stream = gAudiop->getStreamingAudioImpl();
|
||||
if(stream && stream->supportsAdjustableBufferSizes())
|
||||
stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"),gSavedSettings.getU32("FMODExDecodeBufferSize"));
|
||||
stream->setBufferSizes(gSavedSettings.getU32("FMODStreamBufferSize"),gSavedSettings.getU32("FMODDecodeBufferSize"));
|
||||
|
||||
gAudiop->startInternetStream(mNextStreamURI);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -286,7 +286,7 @@ static bool handleVolumeLODChanged(const LLSD& newvalue)
|
|||
LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f;
|
||||
|
||||
// <FS:PP> Warning about too high LOD on LOD change
|
||||
if (LLVOVolume::sLODFactor >= 4.0f)
|
||||
if (LLVOVolume::sLODFactor > 4.0f)
|
||||
{
|
||||
LLNotificationsUtil::add("RenderVolumeLODFactorWarning");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@
|
|||
#include "fsfloatervoicecontrols.h"
|
||||
#include "fsfloatervolumecontrols.h"
|
||||
#include "fsfloatervramusage.h"
|
||||
#include "fsfloaterwearablefavorites.h"
|
||||
#include "fsmoneytracker.h"
|
||||
#include "fspanelclassified.h"
|
||||
#include "lggbeamcolormapfloater.h"
|
||||
|
|
@ -466,6 +467,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("fs_teleporthistory", "floater_fs_teleporthistory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterTeleportHistory>);
|
||||
LLFloaterReg::add("fs_voice_controls", "floater_fs_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterVoiceControls>);
|
||||
LLFloaterReg::add("fs_volume_controls", "floater_fs_volume_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterVolumeControls>);
|
||||
LLFloaterReg::add("fs_wearable_favorites", "floater_fs_wearable_favorites.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterWearableFavorites>);
|
||||
LLFloaterReg::add("imcontacts", "floater_fs_contacts.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterContacts>);
|
||||
LLFloaterReg::add("lgg_beamcolormap", "floater_beamcolor.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<lggBeamColorMapFloater>);
|
||||
LLFloaterReg::add("lgg_beamshape", "floater_beamshape.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<lggBeamMapFloater>);
|
||||
|
|
|
|||
|
|
@ -743,7 +743,7 @@ void LLVOVolume::updateTextures()
|
|||
if (mDrawable.notNull() && !isVisible() && !mDrawable->isActive())
|
||||
{ //delete vertex buffer to free up some VRAM
|
||||
LLSpatialGroup* group = mDrawable->getSpatialGroup();
|
||||
if (group)
|
||||
if (group && (group->mVertexBuffer.notNull() || !group->mBufferMap.empty() || !group->mDrawMap.empty()))
|
||||
{
|
||||
group->destroyGL(true);
|
||||
|
||||
|
|
|
|||
|
|
@ -663,6 +663,7 @@ static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_i
|
|||
LLWearableItemsList::Params::Params()
|
||||
: standalone("standalone", true)
|
||||
, worn_indication_enabled("worn_indication_enabled", true)
|
||||
, show_create_new("show_create_new", true) // <FS:Ansariel> Optional "Create new" menu item
|
||||
{}
|
||||
|
||||
LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
|
||||
|
|
@ -676,6 +677,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
|
|||
setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3));
|
||||
}
|
||||
mWornIndicationEnabled = p.worn_indication_enabled;
|
||||
mShowCreateNew = p.show_create_new; // <FS:Ansariel> Optional "Create new" menu item
|
||||
setNoItemsCommentText(LLTrans::getString("NoneFound"));
|
||||
}
|
||||
|
||||
|
|
@ -950,8 +952,16 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
|
|||
// [/RLVa:KB]
|
||||
} // for
|
||||
|
||||
bool standalone = mParent ? mParent->isStandalone() : false;
|
||||
// <FS:Ansariel> Standalone check doesn't make sense here as the context
|
||||
// menu is only shown if standalone is true. If not, this
|
||||
// method isn't called at all and it is assumed you provide
|
||||
// your own right-click handler (LLWearableItemsList::ContextMenu
|
||||
// is only used in LLWearableItemsList::onRightClick handler
|
||||
// method which in return is only set as event handler if
|
||||
// standalone is true).
|
||||
bool standalone = /*mParent ? mParent->isStandalone() :*/ false;
|
||||
bool wear_add_visible = mask & (MASK_CLOTHING|MASK_ATTACHMENT) && n_worn == 0 && can_be_worn && (n_already_worn != 0 || mask & MASK_ATTACHMENT);
|
||||
bool show_create_new = mParent ? mParent->showCreateNew() : true; // <FS:Ansariel> Optional "Create new" menu item
|
||||
|
||||
// *TODO: eliminate multiple traversals over the menu items
|
||||
setMenuItemVisible(menu, "wear_wear", n_already_worn == 0 && n_worn == 0 && can_be_worn);
|
||||
|
|
@ -970,7 +980,10 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
|
|||
setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART|MASK_ATTACHMENT) && n_worn == n_items && n_worn == 1);
|
||||
// [/SL:KB]
|
||||
setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1 && n_items == 1);
|
||||
setMenuItemVisible(menu, "create_new", mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);
|
||||
// <FS:Ansariel> Optional "Create new" menu item
|
||||
//setMenuItemVisible(menu, "create_new", mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);
|
||||
setMenuItemVisible(menu, "create_new", show_create_new && mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);
|
||||
// </FS:Ansariel>
|
||||
setMenuItemEnabled(menu, "create_new", LLAppearanceMgr::instance().canAddWearables(ids));
|
||||
setMenuItemVisible(menu, "show_original", !standalone);
|
||||
setMenuItemEnabled(menu, "show_original", n_items == 1 && n_links == n_items);
|
||||
|
|
|
|||
|
|
@ -439,6 +439,7 @@ public:
|
|||
{
|
||||
Optional<bool> standalone;
|
||||
Optional<bool> worn_indication_enabled;
|
||||
Optional<bool> show_create_new; // <FS:Ansariel> Optional "Create new" menu item
|
||||
|
||||
Params();
|
||||
};
|
||||
|
|
@ -469,6 +470,8 @@ public:
|
|||
|
||||
void setSortOrder(ESortOrder sort_order, bool sort_now = true);
|
||||
|
||||
bool showCreateNew() const { return mShowCreateNew; } // <FS:Ansariel> Optional "Create new" menu item
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
LLWearableItemsList(const LLWearableItemsList::Params& p);
|
||||
|
|
@ -477,6 +480,7 @@ protected:
|
|||
|
||||
bool mIsStandalone;
|
||||
bool mWornIndicationEnabled;
|
||||
bool mShowCreateNew; // <FS:Ansariel> Optional "Create new" menu item
|
||||
|
||||
ESortOrder mSortOrder;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ BEGIN
|
|||
VALUE "FileDescription", "Firestorm"
|
||||
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
|
||||
VALUE "InternalName", "Firestorm"
|
||||
VALUE "LegalCopyright", "Copyright \251 2010-2017, The Phoenix Firestorm Project, Inc."
|
||||
VALUE "LegalCopyright", "Copyright \251 2010-2018, The Phoenix Firestorm Project, Inc."
|
||||
VALUE "OriginalFilename", "Firestorm.exe"
|
||||
VALUE "ProductName", "Firestorm"
|
||||
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
|
||||
|
|
|
|||
|
|
@ -726,7 +726,7 @@
|
|||
reference="White" />
|
||||
<color
|
||||
name="InventoryItemSuffixColor"
|
||||
reference="White_25" />
|
||||
reference="White_50" />
|
||||
<color
|
||||
name="InventoryItemLibraryColor"
|
||||
reference="White" />
|
||||
|
|
|
|||
|
|
@ -717,7 +717,7 @@
|
|||
reference="White" />
|
||||
<color
|
||||
name="InventoryItemSuffixColor"
|
||||
reference="White_25" />
|
||||
reference="White_50" />
|
||||
<color
|
||||
name="InventoryItemLibraryColor"
|
||||
reference="White" />
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 547 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 610 B |
|
|
@ -793,6 +793,7 @@ with the same filename but different name
|
|||
<texture name="block_list" file_name="toolbar_icons/blocklist.png" preload="true" />
|
||||
<texture name="resync_animations" file_name="toolbar_icons/resync_animations.png" preload="true" />
|
||||
<texture name="Group_Titles_Icon" file_name="toolbar_icons/group_titles.png" preload="true" />
|
||||
<texture name="Wearable_Favorites_Icon" file_name="toolbar_icons/wearable_favorites.png" preload="true" />
|
||||
|
||||
<texture name="skin ansastorm blood" file_name="skinspreview/ansa_blood.jpg" preload="true" />
|
||||
<texture name="skin ansastorm bright blue" file_name="skinspreview/ansa_blue.jpg" preload="true" />
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 536 B |
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="floater_fs_wearable_favorites" title="Kleidungsfavoriten">
|
||||
<floater.string name="empty_list">
|
||||
Kleidung oder Objekt hier hinziehen, um zur Liste hinzuzufügen.
|
||||
</floater.string>
|
||||
<floater.string name="search_no_items">
|
||||
Keine treffenden Objekte gefunden.
|
||||
</floater.string>
|
||||
<panel name="buttons_panel">
|
||||
<filter_editor label="Kleidungsfavoriten filtern" name="wearable_filter_input"/>
|
||||
<menu_button name="options_btn" tool_tip="Kleidungsfavoriten-Optionen"/>
|
||||
<button name="remove_btn" tool_tip="Kleidung aus Kleidungsfavoriten löschen"/>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -332,7 +332,7 @@
|
|||
</text>
|
||||
<button name="Reset_Particle_Cnt" label="S" tool_tip="Auf Standardwert zurücksetzen."/>
|
||||
|
||||
<text name="T_Terrain_Scale" tool_tip="Legt die Qualitöt der Standard-Bodentexturen (Terrain) fest.">
|
||||
<text name="T_Terrain_Scale" tool_tip="Legt die Qualität der Standard-Bodentexturen (Terrain) fest.">
|
||||
Terr.-Skal.
|
||||
</text>
|
||||
<button name="Reset_Terrain_Scale" label="S" tool_tip="Auf Standardwert zurücksetzen."/>
|
||||
|
|
@ -342,7 +342,7 @@
|
|||
</text>
|
||||
<button name="Reset_Terrain_Quality" label="S" tool_tip="Auf Standardwert zurücksetzen."/>
|
||||
|
||||
<text name="T_Object_Detail" tool_tip="Legt den Detailgrad von Objekten fest. Höhere Werte erzeugen einen höheren Detailgrad von Objekten.">
|
||||
<text name="T_Object_Detail" tool_tip="Legt fest, wann ein niedrigerer Detailgrad von Objekten verwendet wird, um Renderkosten zu reduzieren. Bitte mit Vorsicht verwenden: Höhere Werte verschlechtern die Performance.">
|
||||
Obj.-Detail.
|
||||
</text>
|
||||
<button name="Reset_Object_Detail" label="S" tool_tip="Auf Standardwert zurücksetzen."/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<toggleable_menu name="menu_wearable_favorites">
|
||||
<menu_item_check label="Sortierung nach Name..." name="sort_by_name"/>
|
||||
<menu_item_check label="Sortierung nach Aktualität..." name="sort_by_most_recent"/>
|
||||
<menu_item_check label="Sortierung nach Typname..." name="sort_by_type_name"/>
|
||||
</toggleable_menu>
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
<menu_item_call label="L$ kaufen" name="Buy and Sell L$"/>
|
||||
<menu_item_check label="Inventar" name="Inventory"/>
|
||||
<menu_item_check label="Inventar" name="ShowSidetrayInventory"/>
|
||||
<menu_item_check label="Kleidungsfavoriten" name="WearableFavorites"/>
|
||||
<menu_item_call label="Auswahlen" name="Picks"/>
|
||||
<menu_item_call label="Erlebnisse" name="Experiences"/>
|
||||
<menu_item_call label="Profil" name="Profile"/>
|
||||
|
|
|
|||
|
|
@ -5309,12 +5309,15 @@ Welche Bezeichnung soll für die Region
|
|||
<usetemplate ignoretext="Weise mich darauf hin, dass das Umschalten der Sichtbarkeit des Online-Status etwas dauern kann." name="okignore" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RenderVolumeLODFactorWarning">
|
||||
ACHTUNG: Die Detailstufe (LOD) scheint auf einen hohen Wert eingestellt zu sein.
|
||||
ACHTUNG: Die Detailstufe (LOD) ist auf einen hohen Wert eingestellt.
|
||||
|
||||
Werte höher als 8 sind bedeutungslos und erzeugen keine Verbesserung. Sie sollten diesen Wert nicht höher als 4 einstellen und zudem nur in bestimmten Situationen (z.B. zum Erstellen von Fotos in hohen Auflösungen). Ein hoher Wert verringert die Grafik-Performance maßgeblich.
|
||||
Für den normalen Gebrauch ist ein Wert zwischen 1 und 3 ausreichend.
|
||||
Ziehen Sie in Erwägung Objekte zu ersetzen, die bei einem entsprechenden Wert deformiert aussehen.
|
||||
|
||||
Für den normalen Gebrauch sollte ein Wert von 2 ausreichen. Sollten Sie einige Objekte besitzen, die bei diesem Wert deformiert aussehen, sollten Sie in Erwägung ziehen, diese zu ersetzen.
|
||||
<usetemplate ignoretext="Warnen bei zu hoher Detailstufe" name="okignore" yestext="OK"/>
|
||||
LOD-Faktor >3: Verschlechtert Performance. Nur für Fotoaufnahmen ratsam.
|
||||
LOD-Faktor >4: Nur in Ausnahmefällen verwenden. Wird beim Neustart zurückgesetzt.
|
||||
LOD-Faktor >8: Hat keinen echten Effekt. Kann Fehler verursachen.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="CurrencyURIOverrideReceived">
|
||||
Diese Region hat sich dazu entschieden, das Währungsportal eines Drittanbieters zu nutzen.
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
<text name="MeshDetailText">
|
||||
Darstellungsgrad:
|
||||
</text>
|
||||
<slider label=" Objekte:" name="ObjectMeshDetail"/>
|
||||
<slider label=" Objekte:" name="ObjectMeshDetail" tool_tip="Legt fest, wann ein niedrigerer Detailgrad von Objekten verwendet wird, um Renderkosten zu reduzieren. Bitte mit Vorsicht verwenden: Höhere Werte verschlechtern die Performance."/>
|
||||
<slider label=" Flexiprimitiva:" name="FlexibleMeshDetail"/>
|
||||
<slider label=" Bäume:" name="TreeMeshDetail"/>
|
||||
<slider label=" Avatare:" name="AvatarMeshDetail"/>
|
||||
|
|
|
|||
|
|
@ -5827,6 +5827,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Command_Group_Titles_Label">
|
||||
Gruppentitel
|
||||
</string>
|
||||
<string name="Command_Wearable_Favorites_Label">
|
||||
Kleidungsfavoriten
|
||||
</string>
|
||||
<string name="Command_Appearance_Tooltip">
|
||||
Avatar ändern
|
||||
</string>
|
||||
|
|
@ -6007,6 +6010,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Command_Group_Titles_Tooltip">
|
||||
Aktuellen Gruppentitel ändern
|
||||
</string>
|
||||
<string name="Command_Wearable_Favorites_Tooltip">
|
||||
Liste der Kleidungsfavoriten öffnen
|
||||
</string>
|
||||
<string name="Toolbar_Bottom_Tooltip">
|
||||
gegenwärtig in der unteren Symbolleiste
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,93 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
positioning="cascading"
|
||||
can_close="true"
|
||||
can_resize="true"
|
||||
height="350"
|
||||
help_topic="fs_wearable_favorites"
|
||||
min_height="150"
|
||||
min_width="175"
|
||||
layout="topleft"
|
||||
name="floater_fs_wearable_favorites"
|
||||
save_rect="true"
|
||||
save_visibility="true"
|
||||
single_instance="true"
|
||||
reuse_instance="true"
|
||||
title="Favorite Wearables"
|
||||
width="310">
|
||||
|
||||
<floater.string name="empty_list">
|
||||
Drag wearable items here to add to list.
|
||||
</floater.string>
|
||||
<floater.string name="search_no_items">
|
||||
No matching items found.
|
||||
</floater.string>
|
||||
|
||||
<panel
|
||||
follows="left|top|right"
|
||||
height="27"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
name="buttons_panel"
|
||||
right="-1"
|
||||
top="2">
|
||||
<filter_editor
|
||||
follows="left|top|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
label="Filter Wearables"
|
||||
max_length_chars="300"
|
||||
name="wearable_filter_input"
|
||||
top="1"
|
||||
right="-70" />
|
||||
<menu_button
|
||||
follows="right"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="Conv_toolbar_sort"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left_pad="2"
|
||||
name="options_btn"
|
||||
tool_tip="Wearable favorites options"
|
||||
top_delta="0"
|
||||
width="31" />
|
||||
<button
|
||||
follows="right"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="TrashItem_Off"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
left_pad="2"
|
||||
layout="topleft"
|
||||
name="remove_btn"
|
||||
tool_tip="Remove wearable from favorites list"
|
||||
top_delta="0"
|
||||
width="31"/>
|
||||
</panel>
|
||||
|
||||
<panel
|
||||
layout="topleft"
|
||||
follows="all"
|
||||
name="panel_fs_wearable_favorites"
|
||||
top="32"
|
||||
left="2"
|
||||
bottom="-2"
|
||||
right="-1">
|
||||
<fs_wearable_favorites_items_list
|
||||
layout="topleft"
|
||||
follows="all"
|
||||
name="favorites_list"
|
||||
multi_select="true"
|
||||
standalone="true"
|
||||
show_create_new="false"
|
||||
top="0"
|
||||
left="0"
|
||||
bottom="-1"
|
||||
right="-1"
|
||||
worn_indication_enabled="true" />
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -2676,7 +2676,7 @@
|
|||
layout="topleft"
|
||||
left="5"
|
||||
top_pad="5"
|
||||
tool_tip="Controls the detail of prims. Higher values produce greater detail for objects."
|
||||
tool_tip="Controls when lower-detail objects can be used to reduce rendering cost. Higher values cause lag, use with care."
|
||||
width="80">
|
||||
Obj. Detail
|
||||
</text>
|
||||
|
|
@ -2685,11 +2685,11 @@
|
|||
control_name="RenderVolumeLODFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="1"
|
||||
increment="0.125"
|
||||
layout="topleft"
|
||||
left_pad="-20"
|
||||
min_val="0"
|
||||
max_val="15"
|
||||
max_val="8.0"
|
||||
top_delta="-2"
|
||||
width="127"/>
|
||||
<spinner
|
||||
|
|
@ -2698,12 +2698,12 @@
|
|||
top_delta="-3"
|
||||
label_width="0"
|
||||
left_pad="3"
|
||||
decimal_digits="0"
|
||||
decimal_digits="3"
|
||||
follows="left|top"
|
||||
max_val="15"
|
||||
max_val="8.0"
|
||||
min_val="0"
|
||||
width="53"
|
||||
increment="1"/>
|
||||
increment="0.125"/>
|
||||
<button
|
||||
follows="left|top"
|
||||
name="Reset_Object_Detail"
|
||||
|
|
|
|||
|
|
@ -395,12 +395,15 @@
|
|||
width="134" />
|
||||
<check_box
|
||||
height="18"
|
||||
control_name="RenderHighlightSelections"
|
||||
initial_value="true"
|
||||
label="Show Highlight"
|
||||
layout="topleft"
|
||||
top_pad="-2"
|
||||
name="checkbox show highlight"
|
||||
width="134"/>
|
||||
width="134" >
|
||||
<check_box.commit_callback
|
||||
function="BuildTool.commitShowHighlight"/>
|
||||
</check_box>
|
||||
<button
|
||||
left_pad="0"
|
||||
image_selected="ForwardArrow_Press"
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue