This commit is contained in:
Ansariel
2026-01-25 12:48:31 +01:00
79 changed files with 719 additions and 790 deletions
+1 -1
View File
@@ -604,4 +604,4 @@ jobs:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Copy files to remote host
run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:viewerdownloads/${{ env.FS_RELEASE_FOLDER }}
run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:downloads/${{ env.FS_RELEASE_FOLDER }}
+1 -1
View File
@@ -606,4 +606,4 @@ jobs:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Copy files to remote host
run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:viewerdownloads/${{ env.FS_RELEASE_FOLDER }}
run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:downloads/${{ env.FS_RELEASE_FOLDER }}
+1 -1
View File
@@ -94,5 +94,5 @@ jobs:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Copy files to remote host
run: rclone copy ./to_deploy/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:viewerdownloads/${{ env.FS_RELEASE_FOLDER }}
run: rclone copy ./to_deploy/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:downloads/${{ env.FS_RELEASE_FOLDER }}
+6 -6
View File
@@ -1280,9 +1280,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>d9b763952986b176de253e804ffe16ee</string>
<string>68b1eae7b0f0b1c689f867ccc0045816</string>
<key>url</key>
<string>file:///opt/firestorm/kdu-8.6-darwin64-252732257.tar.bz2</string>
<string>file:///opt/firestorm/kdu-8.6.1-darwin64-260220143.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@@ -1292,9 +1292,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>989865df0a7730ec89666e648916ddb1</string>
<string>b06b152529a216491b954bc91850de0c</string>
<key>url</key>
<string>file:///opt/firestorm/kdu-8.6-linux64-252731650.tar.bz2</string>
<string>file:///opt/firestorm/kdu-8.6.1-linux64-260220142.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@@ -1304,9 +1304,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>ab733beda1aa6b2b5ee756df57758846</string>
<string>7b042bef7b06f122ac9755c02ee40f7d</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/kdu-8.6-windows64-252731650.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/kdu-8.6.1-windows64-260220142.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
+1 -1
View File
@@ -43,5 +43,5 @@ if (USE_KDU)
${AUTOBUILD_INSTALL_DIR}/include/kdu
${LIBS_OPEN_DIR}/llkdu
)
#target_compile_definitions(ll::kdu INTERFACE KDU_NO_THREADS=1) // <FS:Ansariel> Enable KDU internal threading
target_compile_definitions(ll::kdu INTERFACE KDU_NO_THREADS=1)
endif (USE_KDU)
+1 -1
View File
@@ -929,7 +929,7 @@ bool LLProfile::generate(const LLProfileParams& params, bool path_open,F32 detai
case LL_PCODE_HOLE_CIRCLE:
case LL_PCODE_HOLE_SAME:
default:
addHole(params, true, circle_detail, 0, hollow, 1.f);
addHole(params, false, circle_detail, 0, hollow, 1.f);
break;
}
}
@@ -340,6 +340,12 @@ LLCDResult LLConvexDecompositionVHACD::executeStage(int stage)
out_mesh.setVertices(ch.m_points);
out_mesh.setIndices(ch.m_triangles);
if (!mBoundDecomp)
{
mVHACD->Clean();
return LLCD_NULL_PTR;
}
mBoundDecomp->mDecomposedHulls.push_back(std::move(out_mesh));
}
+17 -28
View File
@@ -34,15 +34,12 @@
#include "llscrolllistctrl.h"
#include "llsd.h"
#include "llsdserialize.h"
#include "llsdserialize_xml.h"
#include "lltextbox.h"
// newview
#include "llagent.h"
#include "llfloaterworldmap.h"
#include "llfloaterreg.h"
#include "llnotificationsutil.h"
#include "llviewermessage.h"
#include "llworldmap.h"
#include "llworldmapmessage.h"
@@ -52,10 +49,10 @@ const F64 REGION_UPDATE_TIMER = 60.0;
ALFloaterRegionTracker::ALFloaterRegionTracker(const LLSD& key)
: LLFloater(key),
LLEventTimer(5.f),
mRefreshRegionListBtn(NULL),
mRemoveRegionBtn(NULL),
mOpenMapBtn(NULL),
mRegionScrollList(NULL),
mRefreshRegionListBtn(nullptr),
mRemoveRegionBtn(nullptr),
mOpenMapBtn(nullptr),
mRegionScrollList(nullptr),
mLastRegionUpdate(0.0)
{
loadFromJSON();
@@ -128,10 +125,8 @@ void ALFloaterRegionTracker::refresh()
mLastRegionUpdate = time_now;
}
for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++)
for (const auto& [sim_name, data] : llsd::inMap(mRegionMap))
{
const std::string& sim_name = it->first;
const LLSD& data = it->second;
if (data.isMap()) // Assume the rest is correct.
{
LLScrollListCell::Params label;
@@ -174,7 +169,8 @@ void ALFloaterRegionTracker::refresh()
count.color(LLColor4::grey);
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(sim_name);
if (!mEventTimer.getStarted()) mEventTimer.start();
if (!mEventTimer.getStarted())
mEventTimer.start();
}
LLScrollListItem::Params row;
row.value = sim_name;
@@ -203,9 +199,8 @@ void ALFloaterRegionTracker::requestRegionData()
if (!mRegionMap.size())
return;
for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++)
for (const auto& [name, data] : llsd::inMap(mRegionMap))
{
const std::string& name = it->first;
if (LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromName(name))
{
info->updateAgentCount(LLTimer::getElapsedSeconds());
@@ -220,11 +215,9 @@ void ALFloaterRegionTracker::requestRegionData()
void ALFloaterRegionTracker::removeRegions()
{
typedef std::vector<LLScrollListItem*> item_t;
item_t items = mRegionScrollList->getAllSelected();
for (item_t::const_iterator it = items.begin(); it != items.end(); ++it)
for (auto item : mRegionScrollList->getAllSelected())
{
mRegionMap.erase((*it)->getValue().asString());
mRegionMap.erase(item->getValue().asString());
}
mRegionScrollList->deleteSelectedItems();
saveToJSON();
@@ -234,9 +227,7 @@ void ALFloaterRegionTracker::removeRegions()
bool ALFloaterRegionTracker::saveToJSON()
{
const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, TRACKER_FILE);
llofstream out_file;
out_file.open(filename.c_str());
if (out_file.is_open())
if (llofstream out_file(filename.c_str()); out_file.is_open())
{
LLSDSerialize::toPrettyNotation(mRegionMap, out_file);
out_file.close();
@@ -248,9 +239,7 @@ bool ALFloaterRegionTracker::saveToJSON()
bool ALFloaterRegionTracker::loadFromJSON()
{
const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, TRACKER_FILE);
llifstream in_file;
in_file.open(filename.c_str());
if (in_file.is_open())
if (llifstream in_file(filename.c_str()); in_file.is_open())
{
LLSDSerialize::fromNotation(mRegionMap, in_file, LLSDSerialize::SIZE_UNLIMITED);
in_file.close();
@@ -266,8 +255,7 @@ std::string ALFloaterRegionTracker::getRegionLabelIfExists(const std::string& na
void ALFloaterRegionTracker::onRegionAddedCallback(const LLSD& notification, const LLSD& response)
{
const S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (option == 0)
if (const S32 option = LLNotificationsUtil::getSelectedOption(notification, response); option == 0)
{
const std::string& name = notification["payload"]["name"].asString();
std::string label = response["label"].asString();
@@ -276,8 +264,9 @@ void ALFloaterRegionTracker::onRegionAddedCallback(const LLSD& notification, con
{
if (mRegionMap.has(name))
{
for (LLSD::map_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++)
if (it->first == name) it->second["label"] = label;
for (auto& [sim_name, data] : llsd::inMap(mRegionMap))
if (sim_name == name)
data["label"] = label;
}
else
{
@@ -300,7 +289,7 @@ void ALFloaterRegionTracker::openMap()
else
{
const std::string& region = mRegionScrollList->getFirstSelected()->getValue().asString();
LLFloaterWorldMap* worldmap_floaterp = LLFloaterWorldMap::getInstance();
LLFloaterWorldMap* worldmap_floaterp = LLFloaterReg::findTypedInstance<LLFloaterWorldMap>("world_map");
if (!region.empty() && worldmap_floaterp)
{
worldmap_floaterp->trackURL(region, 128, 128, 0);
+6 -18
View File
@@ -30,11 +30,9 @@
#include "indra_constants.h" // for MASK_ALT etc.
#include "message.h" // for gMessageSystem
//#include "stdenums.h" // for ADD_TOP
#include "llagent.h" // for gAgent
#include "llanimationstates.h"
#include "llbutton.h"
#include "llcachename.h" // for gCacheName
#include "llcheckboxctrl.h"
#include "llfloater.h"
#include "llfloaterreg.h"
@@ -64,9 +62,6 @@ RecentAnimationList::RecentAnimationList()
{
}
RecentAnimationList::~RecentAnimationList()
{
}
void RecentAnimationList::addAnimation(const LLUUID& id, const LLUUID& playedBy)
{
@@ -241,7 +236,7 @@ void AnimationExplorer::onStopAndRevokePressed()
if (mCurrentObject.notNull())
{
if (LLViewerObject* vo = gObjectList.findObject(mCurrentObject); vo)
if (LLViewerObject* vo = gObjectList.findObject(mCurrentObject))
{
gAgentAvatarp->revokePermissionsOnObject(vo);
}
@@ -287,8 +282,7 @@ void AnimationExplorer::draw()
// update tiems and "Still playing" status in the list once every few seconds
static F64 last_update = 0.0;
F64 time = LLTimer::getElapsedSeconds();
if (time - last_update > 5.0)
if (F64 time = LLTimer::getElapsedSeconds(); time - last_update > 5.0)
{
last_update = time;
updateList(time);
@@ -313,11 +307,8 @@ void AnimationExplorer::updateList(F64 current_timestamp)
S32 anim_id_column = mAnimationScrollList->getColumn("animation_id")->mIndex;
// go through the full animation scroll list
std::vector<LLScrollListItem*> items = mAnimationScrollList->getAllData();
for (std::vector<LLScrollListItem*>::iterator list_iter = items.begin(); list_iter != items.end(); ++list_iter)
for (auto item : mAnimationScrollList->getAllData())
{
LLScrollListItem* item = *list_iter;
// get a pointer to the "Played" column text
LLScrollListText* played_text = dynamic_cast<LLScrollListText*>(item->getColumn(played_column));
@@ -385,8 +376,7 @@ void AnimationExplorer::addAnimation(const LLUUID& id, const LLUUID& played_by,
// if it was an avatar, get the name here
if (vo->isAvatar())
{
LLAvatarName av_name;
if (LLAvatarNameCache::get(played_by, &av_name))
if (LLAvatarName av_name; LLAvatarNameCache::get(played_by, &av_name))
{
playedByName = av_name.getCompleteName();
}
@@ -404,10 +394,8 @@ void AnimationExplorer::addAnimation(const LLUUID& id, const LLUUID& played_by,
// not an avatar, do a lookup by UUID
else
{
// find out if we know the name to this UUID already
std::map<LLUUID, std::string>::iterator iter = mKnownIDs.find(played_by);
// if we don't know it yet, start a lookup
if (iter == mKnownIDs.end())
// find out if we know the name to this UUID already; if we don't know it yet, start a lookup
if (!mKnownIDs.contains(played_by))
{
// if we are not already looking up this object's name, send a request out
if (std::find(mRequestedIDs.begin(), mRequestedIDs.end(), played_by) == mRequestedIDs.end())
+49 -51
View File
@@ -29,7 +29,7 @@
#define ANIMATIONEXPLORER_H
#include "llfloater.h"
#include "llfloaterbvhpreview.h" // for LLPreviewAnimation
#include "llfloaterbvhpreview.h" // for LLPreviewAnimation
#include "llsingleton.h"
// --------------------------------------------------------------------------
@@ -40,24 +40,23 @@
class AnimationExplorer;
class RecentAnimationList
: public LLSingleton<RecentAnimationList>
class RecentAnimationList : public LLSingleton<RecentAnimationList>
{
LLSINGLETON(RecentAnimationList);
~RecentAnimationList();
~RecentAnimationList() = default;
public:
struct AnimationEntry
{
LLUUID animationID; // asset ID of the animation
LLUUID playedBy; // object/agent who played this animation
F64 time; // time in seconds since viewer start when the animation started
LLUUID animationID; // asset ID of the animation
LLUUID playedBy; // object/agent who played this animation
F64 time; // time in seconds since viewer start when the animation started
};
std::deque<AnimationEntry> mAnimationList;
void addAnimation(const LLUUID& id, const LLUUID& playedBy); // called in llviewermessage.cpp
void requestList(AnimationExplorer* explorer); // request animation list
void addAnimation(const LLUUID& id, const LLUUID& playedBy); // called in llviewermessage.cpp
void requestList(AnimationExplorer* explorer); // request animation list
};
// --------------------------------------------------------------------------
@@ -72,63 +71,62 @@ class LLMessageSystem;
class LLScrollListCtrl;
class LLView;
class AnimationExplorer
: public LLFloater
class AnimationExplorer : public LLFloater
{
friend class LLFloaterReg;
private:
AnimationExplorer(const LLSD& key);
~AnimationExplorer();
private:
AnimationExplorer(const LLSD& key);
~AnimationExplorer();
public:
/*virtual*/ bool postBuild();
void addAnimation(const LLUUID& id, const LLUUID& playedBy, F64 time); // called from RecentAnimationList
public:
bool postBuild() override;
void addAnimation(const LLUUID& id, const LLUUID& playedBy, F64 time); // called from RecentAnimationList
// copied from llfloaterbvhpreview.h
bool handleMouseDown(S32 x, S32 y, MASK mask);
bool handleMouseUp(S32 x, S32 y, MASK mask);
bool handleHover(S32 x, S32 y, MASK mask);
bool handleScrollWheel(S32 x, S32 y, S32 clicks);
void onMouseCaptureLost();
// copied from llfloaterbvhpreview.h
bool handleMouseDown(S32 x, S32 y, MASK mask) override;
bool handleMouseUp(S32 x, S32 y, MASK mask) override;
bool handleHover(S32 x, S32 y, MASK mask) override;
bool handleScrollWheel(S32 x, S32 y, S32 clicks) override;
void onMouseCaptureLost() override;
void requestNameCallback(LLMessageSystem* msg); // object name query callback
void requestNameCallback(LLMessageSystem* msg); // object name query callback
protected:
void onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name);
void updateListEntry(const LLUUID& id, const std::string& name);
protected:
void onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name);
void updateListEntry(const LLUUID& id, const std::string& name);
LLScrollListCtrl* mAnimationScrollList;
LLButton* mStopButton;
LLButton* mBlacklistButton;
LLButton* mStopAndRevokeButton;
LLCheckBoxCtrl* mNoOwnedAnimationsCheckBox;
LLScrollListCtrl* mAnimationScrollList;
LLButton* mStopButton;
LLButton* mBlacklistButton;
LLButton* mStopAndRevokeButton;
LLCheckBoxCtrl* mNoOwnedAnimationsCheckBox;
LLView* mPreviewCtrl; // dummy control on the floater where the avatar preview should go
LLPointer<LLPreviewAnimation> mAnimationPreview; // actual avatar preview
LLView* mPreviewCtrl; // dummy control on the floater where the avatar preview should go
LLPointer<LLPreviewAnimation> mAnimationPreview; // actual avatar preview
S32 mLastMouseX;
S32 mLastMouseY;
S32 mLastMouseX;
S32 mLastMouseY;
LLUUID mCurrentAnimationID; // currently selected animation's asset ID
LLUUID mCurrentObject; // object ID that played the currently selected animation
LLUUID mCurrentAnimationID; // currently selected animation's asset ID
LLUUID mCurrentObject; // object ID that played the currently selected animation
std::vector<LLUUID> mRequestedIDs; // list of object IDs we requested named for
std::map<LLUUID, std::string> mKnownIDs; // known list of names for object IDs
std::vector<LLUUID> mRequestedIDs; // list of object IDs we requested named for
std::map<LLUUID, std::string> mKnownIDs; // known list of names for object IDs
typedef std::map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
typedef std::map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
void draw();
void update(); // request list update from RecentAnimationList
void updateList(F64 current_timestamp); // update times and playing status in animation list
void startMotion(const LLUUID& motionID);
void draw() override;
void update(); // request list update from RecentAnimationList
void updateList(F64 current_timestamp); // update times and playing status in animation list
void startMotion(const LLUUID& motionID);
void onSelectAnimation();
void onStopPressed();
void onBlacklistPressed();
void onStopAndRevokePressed();
void onOwnedCheckToggled();
void onSelectAnimation();
void onStopPressed();
void onBlacklistPressed();
void onStopAndRevokePressed();
void onOwnedCheckToggled();
};
#endif // ANIMATIONEXPLORER_H
+2 -20
View File
@@ -35,7 +35,6 @@
#include "llnotificationsutil.h"
#include "llspinctrl.h"
#include "llviewercontrol.h"
#include "llviewerinventory.h"
#include "utilitybar.h"
FloaterAO::FloaterAO(const LLSD& key)
@@ -51,10 +50,6 @@ FloaterAO::FloaterAO(const LLSD& key)
mEventTimer.stop();
}
FloaterAO::~FloaterAO()
{
}
void FloaterAO::reloading(bool reload)
{
if (reload)
@@ -283,9 +278,7 @@ bool FloaterAO::postBuild()
mPreviousButtonSmall->setCommitCallback(boost::bind(&FloaterAO::onClickPrevious, this));
mNextButtonSmall->setCommitCallback(boost::bind(&FloaterAO::onClickNext, this));
// <AS:Chanayane> Double click on animation in AO
mAnimationList->setDoubleClickCallback(boost::bind(&FloaterAO::onDoubleClick, this));
// </AS:Chanayane>
updateSmart();
@@ -777,15 +770,14 @@ void FloaterAO::onChangeCycleTime()
void FloaterAO::onClickPrevious()
{
AOEngine::instance().cycle(AOEngine::CyclePrevious);
AOEngine::instance().cycle(AOEngine::CyclePrevious, true);
}
void FloaterAO::onClickNext()
{
AOEngine::instance().cycle(AOEngine::CycleNext);
AOEngine::instance().cycle(AOEngine::CycleNext, true);
}
// <AS:Chanayane> Double click on animation in AO
void FloaterAO::onDoubleClick()
{
LLScrollListItem* item = mAnimationList->getFirstSelected();
@@ -817,7 +809,6 @@ void FloaterAO::onDoubleClick()
AOEngine::instance().playAnimation(*animUUID);
}
// </AS:Chanayane>
void FloaterAO::onClickMore()
{
@@ -872,7 +863,6 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
if (mCurrentBoldItem)
{
// <AS:Chanayane> Safer casts
if (LLScrollListCell* icon_cell = mCurrentBoldItem->getColumn(0))
{
if (LLScrollListIcon* icon = dynamic_cast<LLScrollListIcon*>(icon_cell))
@@ -888,7 +878,6 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
text->setFontStyle(LLFontGL::NORMAL);
}
}
// </AS:Chanayane>
mCurrentBoldItem = nullptr;
}
@@ -898,23 +887,17 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
return;
}
// <AS:Chanayane> Fix potential nullptr
if (!mAnimationList)
{
LL_WARNS("AO") << "Animation list control is null." << LL_ENDL;
return;
}
// </AS:Chanayane>
// <AS:Chanayane> Safer casts
// why do we have no LLScrollListCtrl::getItemByUserdata() ? -Zi
for (LLScrollListItem* item : mAnimationList->getAllData())
{
LLUUID* id = static_cast<LLUUID*>(item->getUserdata());
// <AS:Chanayane> compares the LLUUID values instead of pointer values
//if (id == &animation)
if (id && *id == animation)
// </AS:Chanayane>
{
mCurrentBoldItem = item;
@@ -937,7 +920,6 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
return;
}
}
// </AS:Chanayane>
}
// virtual
+6 -9
View File
@@ -48,19 +48,19 @@ class FloaterAO
private:
FloaterAO(const LLSD& key);
~FloaterAO();
~FloaterAO() = default;
public:
/*virtual*/ bool postBuild();
virtual void onOpen(const LLSD& key);
virtual void onClose(bool app_quitting);
bool postBuild() override;
void onOpen(const LLSD& key) override;
void onClose(bool app_quitting) override;
void updateList();
void updateScrollListData();
void updateSetParameters();
void updateAnimationList();
bool handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop, EDragAndDropType cargo_type, void* cargo_data,
EAcceptance* accept, std::string& tooltip_msg);
EAcceptance* accept, std::string& tooltip_msg) override;
protected:
LLScrollListItem* addAnimation(const std::string& name);
@@ -90,10 +90,7 @@ class FloaterAO
void onClickMore();
void onClickLess();
// <AS:Chanayane> Double click on animation in AO
void onDoubleClick();
// </AS:Chanayane>
void onAnimationChanged(const LLUUID& animation);
@@ -108,7 +105,7 @@ class FloaterAO
bool newSetCallback(const LLSD& notification, const LLSD& response);
bool removeSetCallback(const LLSD& notification, const LLSD& response);
virtual bool tick();
bool tick() override;
std::vector<AOSet*> mSetList;
AOSet* mSelectedSet;
+18 -13
View File
@@ -151,7 +151,7 @@ void AOEngine::onPauseAO()
}
}
void AOEngine::clear(bool from_timer)
void AOEngine::clear(bool fromTimer)
{
std::move(mSets.begin(), mSets.end(), std::back_inserter(mOldSets));
mSets.clear();
@@ -160,7 +160,7 @@ void AOEngine::clear(bool from_timer)
//<ND/> FIRE-3801; We cannot delete any AOSet object if we're called from a timer tick. AOSet is derived from LLEventTimer and destruction will
// fail in ~LLInstanceTracker when a destructor runs during iteration.
if (!from_timer)
if (!fromTimer)
{
std::for_each(mOldSets.begin(), mOldSets.end(), DeletePointer());
mOldSets.clear();
@@ -222,7 +222,7 @@ void AOEngine::setLastOverriddenMotion(const LLUUID& motion)
}
}
bool AOEngine::foreignAnimations()
bool AOEngine::foreignAnimations() const
{
// checking foreign animations only makes sense when smart sit is enabled
if (!mCurrentSet->getSmart())
@@ -520,7 +520,7 @@ void AOEngine::setStateCycleTimer(const AOSet::AOState* state)
}
}
const LLUUID AOEngine::override(const LLUUID& motion, bool start)
LLUUID AOEngine::override(const LLUUID& motion, bool start)
{
LL_DEBUGS("AOEngine") << "override(" << gAnimLibrary.animationName(motion) << "," << start << ")" << LL_ENDL;
@@ -861,7 +861,7 @@ void AOEngine::cycleTimeout(const AOSet* set)
cycle(CycleAny);
}
void AOEngine::cycle(eCycleMode cycleMode)
void AOEngine::cycle(eCycleMode cycleMode, bool resetTimer)
{
if (!mEnabled)
{
@@ -980,9 +980,13 @@ void AOEngine::cycle(eCycleMode cycleMode)
gAgent.sendAnimationRequest(oldAnimation, ANIM_REQUEST_STOP);
gAgentAvatarp->LLCharacter::stopMotion(oldAnimation);
}
if (resetTimer)
{
mCurrentSet->resetTimer();
}
}
// <AS:Chanayane> Double click on animation in AO
void AOEngine::playAnimation(const LLUUID& animation)
{
if (!mEnabled)
@@ -1098,6 +1102,8 @@ void AOEngine::playAnimation(const LLUUID& animation)
gAgent.sendAnimationRequest(oldAnimation, ANIM_REQUEST_STOP);
gAgentAvatarp->LLCharacter::stopMotion(oldAnimation);
}
mCurrentSet->resetTimer();
}
const AOSet* AOEngine::getCurrentSet() const
@@ -1108,7 +1114,6 @@ const AOSet::AOState* AOEngine::getCurrentState() const
{
return mCurrentSet->getStateByRemapID(mLastMotion);
}
// </AS:Chanayane>
void AOEngine::updateSortOrder(AOSet::AOState* state)
{
@@ -1746,7 +1751,7 @@ void AOEngine::update()
}
}
void AOEngine::reload(bool aFromTimer)
void AOEngine::reload(bool fromTimer)
{
bool wasEnabled = mEnabled;
@@ -1760,7 +1765,7 @@ void AOEngine::reload(bool aFromTimer)
gAgent.stopCurrentAnimations();
mLastOverriddenMotion = ANIM_AGENT_STAND;
clear(aFromTimer);
clear(fromTimer);
mAOFolder.setNull();
mTimerCollection.enableInventoryTimer(true);
tick();
@@ -1771,7 +1776,7 @@ void AOEngine::reload(bool aFromTimer)
}
}
AOSet* AOEngine::getSetByName(const std::string& name) const
AOSet* AOEngine::getSetByName(std::string_view name) const
{
for (auto set : mSets)
{
@@ -1819,7 +1824,7 @@ void AOEngine::selectSet(AOSet* set)
}
}
AOSet* AOEngine::selectSetByName(const std::string& name)
AOSet* AOEngine::selectSetByName(std::string_view name)
{
if (AOSet* set = getSetByName(name))
{
@@ -1880,9 +1885,9 @@ void AOEngine::saveSet(const AOSet* set)
mUpdatedSignal();
}
bool AOEngine::renameSet(AOSet* set, const std::string& name)
bool AOEngine::renameSet(AOSet* set, std::string_view name)
{
if (name.empty() || name.find(":") != std::string::npos)
if (name.empty() || name.find(":") != std::string_view::npos)
{
return false;
}
+130 -141
View File
@@ -32,202 +32,191 @@
#include "llextendedstatus.h"
#include "llsingleton.h"
#include "llviewerinventory.h"
#include <boost/signals2.hpp>
class AOTimerCollection
: public LLEventTimer
class AOTimerCollection : public LLEventTimer
{
public:
AOTimerCollection();
~AOTimerCollection() = default;
public:
AOTimerCollection();
~AOTimerCollection() = default;
virtual bool tick();
bool tick() override;
void enableInventoryTimer(bool enable);
void enableSettingsTimer(bool enable);
void enableReloadTimer(bool enable);
void enableImportTimer(bool enable);
void enableInventoryTimer(bool enable);
void enableSettingsTimer(bool enable);
void enableReloadTimer(bool enable);
void enableImportTimer(bool enable);
protected:
void updateTimers();
protected:
void updateTimers();
bool mInventoryTimer;
bool mSettingsTimer;
bool mReloadTimer;
bool mImportTimer;
bool mInventoryTimer;
bool mSettingsTimer;
bool mReloadTimer;
bool mImportTimer;
};
// ----------------------------------------------------
class AOSitCancelTimer
: public LLEventTimer
class AOSitCancelTimer : public LLEventTimer
{
public:
AOSitCancelTimer();
~AOSitCancelTimer() = default;
public:
AOSitCancelTimer();
~AOSitCancelTimer() = default;
void oneShot();
void stop();
void oneShot();
void stop();
virtual bool tick();
bool tick() override;
protected:
S32 mTickCount;
protected:
S32 mTickCount;
};
// ----------------------------------------------------
class AOState;
class LLInventoryItem;
class LLVFS;
class AOEngine
: public LLSingleton<AOEngine>
class AOEngine : public LLSingleton<AOEngine>
{
LLSINGLETON(AOEngine);
~AOEngine();
public:
enum eCycleMode
{
CycleAny,
CycleNext,
CyclePrevious
};
public:
enum eCycleMode
{
CycleAny,
CycleNext,
CyclePrevious
};
void enable(bool enable);
void enableStands(bool enable_stands);
const LLUUID override(const LLUUID& motion, bool start);
void tick();
void update();
void reload(bool);
void reloadStateAnimations(AOSet* set, AOSet::AOState* state);
void clear(bool from_timer);
void enable(bool enable);
void enableStands(bool enable_stands);
LLUUID override(const LLUUID& motion, bool start);
void tick();
void update();
void reload(bool fromTimer);
void reloadStateAnimations(AOSet* set, AOSet::AOState* state);
void clear(bool fromTimer);
const LLUUID& getAOFolder() const;
const LLUUID& getAOFolder() const;
void addSet(const std::string& name, inventory_func_type callback, bool reload = true);
bool removeSet(AOSet* set);
void addSet(const std::string& name, inventory_func_type callback, bool reload = true);
bool removeSet(AOSet* set);
void addAnimation(const AOSet* set, AOSet::AOState* state, const LLInventoryItem* item, bool reload = true);
bool removeAnimation(const AOSet* set, AOSet::AOState* state, S32 index);
void checkSitCancel();
void checkBelowWater(bool check_underwater);
void addAnimation(const AOSet* set, AOSet::AOState* state, const LLInventoryItem* item, bool reload = true);
bool removeAnimation(const AOSet* set, AOSet::AOState* state, S32 index);
void checkSitCancel();
void checkBelowWater(bool check_underwater);
bool importNotecard(const LLInventoryItem* item);
void processImport(bool from_timer);
bool importNotecard(const LLInventoryItem* item);
void processImport(bool from_timer);
bool swapWithPrevious(AOSet::AOState* state, S32 index);
bool swapWithNext(AOSet::AOState* state, S32 index);
bool swapWithPrevious(AOSet::AOState* state, S32 index);
bool swapWithNext(AOSet::AOState* state, S32 index);
void cycleTimeout(const AOSet* set);
void cycle(eCycleMode cycleMode);
void cycleTimeout(const AOSet* set);
void cycle(eCycleMode cycleMode, bool resetTimer = false);
// <AS:Chanayane> Double click on animation in AO
void playAnimation(const LLUUID& animation);
const AOSet* getCurrentSet() const;
const AOSet::AOState* getCurrentState() const;
// </AS:Chanayane>
void playAnimation(const LLUUID& animation);
const AOSet* getCurrentSet() const;
const AOSet::AOState* getCurrentState() const;
void inMouselook(bool mouselook);
void selectSet(AOSet* set);
AOSet* selectSetByName(const std::string& name);
AOSet* getSetByName(const std::string& name) const;
void inMouselook(bool mouselook);
void selectSet(AOSet* set);
AOSet* selectSetByName(std::string_view name);
AOSet* getSetByName(std::string_view name) const;
// callback from LLAppViewer
static void onLoginComplete();
// callback from LLAppViewer
static void onLoginComplete();
const std::vector<AOSet*> getSetList() const;
const std::string getCurrentSetName() const;
const AOSet* getDefaultSet() const;
bool renameSet(AOSet* set, const std::string& name);
const std::vector<AOSet*> getSetList() const;
const std::string getCurrentSetName() const;
const AOSet* getDefaultSet() const;
bool renameSet(AOSet* set, std::string_view name);
void setDefaultSet(AOSet* set);
void setOverrideSits(AOSet* set, bool override_sit);
void setSmart(AOSet* set, bool smart);
void setDisableMouselookStands(AOSet* set, bool disabled);
void setCycle(AOSet::AOState* set, bool cycle);
void setRandomize(AOSet::AOState* state, bool randomize);
void setCycleTime(AOSet::AOState* state, F32 time);
void setDefaultSet(AOSet* set);
void setOverrideSits(AOSet* set, bool override_sit);
void setSmart(AOSet* set, bool smart);
void setDisableMouselookStands(AOSet* set, bool disabled);
void setCycle(AOSet::AOState* set, bool cycle);
void setRandomize(AOSet::AOState* state, bool randomize);
void setCycleTime(AOSet::AOState* state, F32 time);
void saveSettings();
void saveSettings();
typedef boost::signals2::signal<void ()> updated_signal_t;
boost::signals2::connection setReloadCallback(const updated_signal_t::slot_type& cb)
{
return mUpdatedSignal.connect(cb);
};
typedef boost::signals2::signal<void()> updated_signal_t;
boost::signals2::connection setReloadCallback(const updated_signal_t::slot_type& cb)
{
return mUpdatedSignal.connect(cb);
};
typedef boost::signals2::signal<void (const LLUUID&)> animation_changed_signal_t;
boost::signals2::connection setAnimationChangedCallback(const animation_changed_signal_t::slot_type& cb)
{
return mAnimationChangedSignal.connect(cb);
};
typedef boost::signals2::signal<void(const LLUUID&)> animation_changed_signal_t;
boost::signals2::connection setAnimationChangedCallback(const animation_changed_signal_t::slot_type& cb)
{
return mAnimationChangedSignal.connect(cb);
};
protected:
void init();
protected:
void init();
void setLastMotion(const LLUUID& motion);
void setLastOverriddenMotion(const LLUUID& motion);
void setStateCycleTimer(const AOSet::AOState* state);
void setLastMotion(const LLUUID& motion);
void setLastOverriddenMotion(const LLUUID& motion);
void setStateCycleTimer(const AOSet::AOState* state);
void stopAllStandVariants();
void stopAllSitVariants();
void stopAllStandVariants();
void stopAllSitVariants();
bool foreignAnimations();
AOSet::AOState* mapSwimming(const LLUUID& motion) const;
AOSet::AOState* getStateForMotion(const LLUUID& motion) const;
bool foreignAnimations() const;
AOSet::AOState* mapSwimming(const LLUUID& motion) const;
AOSet::AOState* getStateForMotion(const LLUUID& motion) const;
void updateSortOrder(AOSet::AOState* state);
void saveSet(const AOSet* set);
void saveState(const AOSet::AOState* state);
void updateSortOrder(AOSet::AOState* state);
void saveSet(const AOSet* set);
void saveState(const AOSet::AOState* state);
bool createAnimationLink(AOSet::AOState* state, const LLInventoryItem* item);
bool findForeignItems(const LLUUID& uuid) const;
void purgeFolder(const LLUUID& uuid) const;
bool createAnimationLink(AOSet::AOState* state, const LLInventoryItem* item);
bool findForeignItems(const LLUUID& uuid) const;
void purgeFolder(const LLUUID& uuid) const;
void onRegionChange();
void onRegionChange();
void onToggleAOControl();
void onToggleAOStandsControl();
void onPauseAO();
void onToggleAOControl();
void onToggleAOStandsControl();
void onPauseAO();
static void onNotecardLoadComplete(const LLUUID& assetUUID, LLAssetType::EType type,
void* userdata, S32 status, LLExtStat extStatus);
void parseNotecard(const char* buffer);
static void onNotecardLoadComplete(const LLUUID& assetUUID, LLAssetType::EType type, void* userdata, S32 status, LLExtStat extStatus);
void parseNotecard(const char* buffer);
void updatePersistedStateAnimations();
void updatePersistedStateAnimations();
updated_signal_t mUpdatedSignal;
animation_changed_signal_t mAnimationChangedSignal;
updated_signal_t mUpdatedSignal;
animation_changed_signal_t mAnimationChangedSignal;
AOTimerCollection mTimerCollection;
AOSitCancelTimer mSitCancelTimer;
AOTimerCollection mTimerCollection;
AOSitCancelTimer mSitCancelTimer;
bool mEnabled;
bool mEnabledStands;
bool mInMouselook;
bool mUnderWater;
bool mEnabled;
bool mEnabledStands;
bool mInMouselook;
bool mUnderWater;
LLUUID mAOFolder;
LLUUID mLastMotion;
LLUUID mLastOverriddenMotion;
LLUUID mTransitionId;
LLUUID mAOFolder;
LLUUID mLastMotion;
LLUUID mLastOverriddenMotion;
LLUUID mTransitionId;
// this motion will be ignored once in the overrider when stopping, fixes a case
// where the AO doesn't correctly start up on login or when getting enabled manually
LLUUID mIgnoreMotionStopOnce;
// this motion will be ignored once in the overrider when stopping, fixes a case
// where the AO doesn't correctly start up on login or when getting enabled manually
LLUUID mIgnoreMotionStopOnce;
std::vector<AOSet*> mSets;
std::vector<AOSet*> mOldSets;
AOSet* mCurrentSet;
AOSet* mDefaultSet;
std::vector<AOSet*> mSets;
std::vector<AOSet*> mOldSets;
AOSet* mCurrentSet;
AOSet* mDefaultSet;
AOSet* mImportSet;
std::vector<AOSet*> mOldImportSets;
S32 mImportRetryCount;
AOSet* mImportSet;
std::vector<AOSet*> mOldImportSets;
S32 mImportRetryCount;
boost::signals2::connection mRegionChangeConnection;
boost::signals2::connection mRegionChangeConnection;
};
#endif // AOENGINE_H
+8 -2
View File
@@ -29,7 +29,7 @@
#include "llanimationstates.h"
#include "llinventorymodel.h"
AOSet::AOSet(const LLUUID inventoryID)
AOSet::AOSet(const LLUUID& inventoryID)
: LLEventTimer(10000.0f),
mInventoryID(inventoryID),
mName("** New AO Set **"),
@@ -232,6 +232,12 @@ void AOSet::stopTimer()
mEventTimer.stop();
}
void AOSet::resetTimer()
{
LL_DEBUGS("AOEngine") << "Resetting timer for " << getName() << "." << LL_ENDL;
mEventTimer.reset();
}
bool AOSet::tick()
{
AOEngine::instance().cycleTimeout(this);
@@ -253,7 +259,7 @@ const std::string& AOSet::getName() const
return mName;
}
void AOSet::setName(const std::string& name)
void AOSet::setName(std::string_view name)
{
mName = name;
}
+106 -106
View File
@@ -29,117 +29,117 @@
class LLInventoryItem;
class AOSet
: public LLEventTimer
class AOSet : public LLEventTimer
{
public:
AOSet(const LLUUID inventoryID);
~AOSet();
public:
AOSet(const LLUUID& inventoryID);
~AOSet();
// keep number and order in sync with list of names in the constructor
enum
{
Start = 0, // convenience, so we don't have to know the name of the first state
Standing = 0,
Walking,
Running,
Sitting,
SittingOnGround,
Crouching,
CrouchWalking,
Landing,
SoftLanding,
StandingUp,
Falling,
FlyingDown,
FlyingUp,
Flying,
FlyingSlow,
Hovering,
Jumping,
PreJumping,
TurningRight,
TurningLeft,
Typing,
Floating,
SwimmingForward,
SwimmingUp,
SwimmingDown,
AOSTATES_MAX
};
struct AOAnimation
{
std::string mName;
LLUUID mAssetUUID;
LLUUID mInventoryUUID;
LLUUID mOriginalUUID;
S32 mSortOrder;
};
struct AOState
{
std::string mName;
std::vector<std::string> mAlternateNames;
std::vector<const LLInventoryItem*> mAddQueue;
LLUUID mRemapID;
bool mCycle;
bool mRandom;
F32 mCycleTime;
std::vector<AOAnimation> mAnimations;
U32 mCurrentAnimation;
LLUUID mCurrentAnimationID;
LLUUID mInventoryUUID;
bool mDirty;
};
const LLUUID& getInventoryUUID() const;
void setInventoryUUID(const LLUUID& inventoryID);
const std::string& getName() const;
void setName(const std::string& name);
bool getSitOverride() const;
void setSitOverride(bool override_sit);
bool getSmart() const;
void setSmart(bool smart);
bool getMouselookStandDisable() const;
void setMouselookStandDisable(bool disable);
bool getComplete() const;
void setComplete(bool complete);
const LLUUID& getMotion() const;
void setMotion(const LLUUID& motion);
bool getDirty() const;
void setDirty(bool dirty);
AOState* getState(S32 eName);
AOState* getStateByName(const std::string& name);
AOState* getStateByRemapID(const LLUUID& id);
const LLUUID& getAnimationForState(AOState* state) const;
void startTimer(F32 timeout);
void stopTimer();
bool tick() override;
std::vector<std::string> mStateNames;
protected:
LLUUID mInventoryID;
// keep number and order in sync with list of names in the constructor
enum
{
Start = 0, // convenience, so we don't have to know the name of the first state
Standing = 0,
Walking,
Running,
Sitting,
SittingOnGround,
Crouching,
CrouchWalking,
Landing,
SoftLanding,
StandingUp,
Falling,
FlyingDown,
FlyingUp,
Flying,
FlyingSlow,
Hovering,
Jumping,
PreJumping,
TurningRight,
TurningLeft,
Typing,
Floating,
SwimmingForward,
SwimmingUp,
SwimmingDown,
AOSTATES_MAX
};
struct AOAnimation
{
std::string mName;
bool mSitOverride;
bool mSmart;
bool mMouselookStandDisable;
bool mComplete;
LLUUID mCurrentMotion;
bool mDirty;
LLUUID mAssetUUID;
LLUUID mInventoryUUID;
LLUUID mOriginalUUID;
S32 mSortOrder;
};
AOState mStates[AOSTATES_MAX];
struct AOState
{
std::string mName;
std::vector<std::string> mAlternateNames;
std::vector<const LLInventoryItem*> mAddQueue;
LLUUID mRemapID;
bool mCycle;
bool mRandom;
F32 mCycleTime;
std::vector<AOAnimation> mAnimations;
U32 mCurrentAnimation;
LLUUID mCurrentAnimationID;
LLUUID mInventoryUUID;
bool mDirty;
};
const LLUUID& getInventoryUUID() const;
void setInventoryUUID(const LLUUID& inventoryID);
const std::string& getName() const;
void setName(std::string_view name);
bool getSitOverride() const;
void setSitOverride(bool override_sit);
bool getSmart() const;
void setSmart(bool smart);
bool getMouselookStandDisable() const;
void setMouselookStandDisable(bool disable);
bool getComplete() const;
void setComplete(bool complete);
const LLUUID& getMotion() const;
void setMotion(const LLUUID& motion);
bool getDirty() const;
void setDirty(bool dirty);
AOState* getState(S32 eName);
AOState* getStateByName(const std::string& name);
AOState* getStateByRemapID(const LLUUID& id);
const LLUUID& getAnimationForState(AOState* state) const;
void startTimer(F32 timeout);
void stopTimer();
void resetTimer();
bool tick() override;
std::vector<std::string> mStateNames;
protected:
LLUUID mInventoryID;
std::string mName;
bool mSitOverride;
bool mSmart;
bool mMouselookStandDisable;
bool mComplete;
LLUUID mCurrentMotion;
bool mDirty;
AOState mStates[AOSTATES_MAX];
};
#endif // AOSET_H
+4 -1
View File
@@ -338,8 +338,8 @@ void ColladaExportFloater::saveTextures()
mSaver.mImageFormat = DAEExportUtil::image_format_ext[gSavedSettings.getS32("DAEExportTexturesFormat")];
LL_DEBUGS("export") << "Starting to save textures" << LL_ENDL;
mTimer.setTimerExpirySec(TEXTURE_DOWNLOAD_TIMEOUT);
mTimer.start();
mTimer.setTimerExpirySec(TEXTURE_DOWNLOAD_TIMEOUT);
updateTitleProgress();
gIdleCallbacks.addFunction(CacheReadResponder::saveTexturesWorker, this);
}
@@ -468,6 +468,7 @@ void ColladaExportFloater::CacheReadResponder::saveTexturesWorker(void* data)
me->mTexturesToSave.erase(id);
me->updateTitleProgress();
me->mTimer.reset();
me->mTimer.setTimerExpirySec(TEXTURE_DOWNLOAD_TIMEOUT);
}
else
{
@@ -491,6 +492,7 @@ void ColladaExportFloater::CacheReadResponder::saveTexturesWorker(void* data)
me->mTexturesToSave.erase(id);
me->updateTitleProgress();
me->mTimer.reset();
me->mTimer.setTimerExpirySec(TEXTURE_DOWNLOAD_TIMEOUT);
}
else if (me->mTimer.hasExpired())
{
@@ -498,6 +500,7 @@ void ColladaExportFloater::CacheReadResponder::saveTexturesWorker(void* data)
me->mTexturesToSave.erase(id);
me->updateTitleProgress();
me->mTimer.reset();
me->mTimer.setTimerExpirySec(TEXTURE_DOWNLOAD_TIMEOUT);
}
}
}
+1 -3
View File
@@ -25,7 +25,6 @@
#include "llviewerprecompiledheaders.h"
#include "dialogstack.h"
#include "llviewercontrol.h"
void DialogStack::update()
@@ -55,8 +54,7 @@ void DialogStack::pop(const LLUUID& uuid)
const LLUUID& DialogStack::flip(const LLUUID& uuid)
{
std::list<LLUUID>::iterator found = std::find(mNotificationIDs.begin(), mNotificationIDs.end(), uuid);
if (found != mNotificationIDs.end())
if (auto found = std::find(mNotificationIDs.begin(), mNotificationIDs.end(), uuid); found != mNotificationIDs.end())
{
if (found == mNotificationIDs.begin())
{
+1 -1
View File
@@ -31,7 +31,7 @@ class DialogStack
: public LLSingleton<DialogStack>
{
LLSINGLETON_EMPTY_CTOR(DialogStack);
~DialogStack() {}
~DialogStack() = default;
protected:
void update();
-22
View File
@@ -2703,17 +2703,6 @@ void LLAgent::endAnimationUpdateUI()
// clean up UI from mode we're leaving
if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_MOUSELOOK )
{
// <FS:Zi> FIRE-33958: clear out any visible toasts/group notices before leaving mouselook
LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>(
LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID)
);
if(channel)
{
channel->removeAndStoreAllStorableToasts();
}
// </FS:Zi>
// <FS:Zi> Unhide chat bar, unless autohide is enabled
gSavedSettings.setBOOL("MouseLookEnabled", false);
if(!gSavedSettings.getBOOL("AutohideChatBar"))
@@ -2876,17 +2865,6 @@ void LLAgent::endAnimationUpdateUI()
//---------------------------------------------------------------------
if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
// <FS:Zi> FIRE-33958: clear out any visible toasts/group notices before entering mouselook
LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>(
LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID)
);
if(channel)
{
channel->removeAndStoreAllStorableToasts();
}
// </FS:Zi>
// <FS:PP> FIRE-8868: Show UI in mouselook
if(!gSavedSettings.getBOOL("FSShowInterfaceInMouselook"))
{
+5 -1
View File
@@ -2498,7 +2498,11 @@ F32 LLFace::adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius
//the above calculation is too expensive
//the below is a good estimation: bounding box of the bounding sphere:
F32 alpha = 0.5f * (radius + screen_radius - d) / radius ;
F32 alpha = 1.f;
if (!is_approx_zero(radius)) // radius can be something like -1e-10
{
alpha = 0.5f * (radius + screen_radius - d) / radius;
}
alpha = llclamp(alpha, 0.f, 1.f) ;
return alpha * alpha ;
}
+1
View File
@@ -56,6 +56,7 @@ void LLFloaterMarketplace::onOpen(const LLSD& key)
else
{
openMarketplaceURL(params.url);
set_current_url(params.url); // Fix looping back to previous url when using the viewer navigation bar
}
}
-8
View File
@@ -327,14 +327,6 @@ bool LLFloaterModelPreview::postBuild()
#endif // OPENSIM <FS:AW optional opensim support>
// </Ansariel>
// <FS:CR> Show an alert dialog if using the Opensim viewer as functionality will be limited without Havok
#if !LL_HAVOK
LLSD args;
args["FEATURE"] = getString("no_havok");
LLNotificationsUtil::add("NoHavok", args);
#endif
// </FS:CR>
getChild<LLTextBox>("warning_message")->setTextArg("[VURL]", validate_url);
mUploadBtn = getChild<LLButton>("ok_btn");
@@ -39,6 +39,7 @@
#include "llfloaterpathfindinglinksets.h"
#include "llfloaterreg.h"
#include "llhandle.h"
#include "llnotificationsutil.h" // <FS:TJ/>
#include "llpanel.h"
#include "llpathfindingnavmeshzone.h"
#include "llpathfindingpathtool.h"
@@ -203,6 +204,12 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
{
setConsoleState(kConsoleStateLibraryNotImplemented);
LL_WARNS() <<"Errror: cannot find pathing library implementation."<<LL_ENDL;
// <FS:TJ> Show an alert dialog if using a viewer without pathfinding view / test support
LLSD args;
args["FEATURE"] = getString("no_havok");
LLNotificationsUtil::add("NoHavok", args);
// </FS:TJ>
}
else
{
+1 -1
View File
@@ -1217,7 +1217,7 @@ void LLFloaterPreference::onOpen(const LLSD& key)
#if LL_LINUX
// Lixux doesn't support automatic mode
LLComboBox* combo = getChild<LLComboBox>("double_click_action_combo");
LLComboBox* combo = getChild<LLComboBox>("mouse_warp_combo"); // <FS:Beq/> FIRE-36303 - Linux users cannot set double click on land to "no action"
S32 mode = gSavedSettings.getS32("MouseWarpMode");
if (mode == 0)
{
-9
View File
@@ -3387,9 +3387,6 @@ void LLModelPreview::updateStatusMessages()
// physStatusIcon->setImage(img);
// }
//}
#if !LL_HAVOK
has_physics_error |= PhysicsError::NOHAVOK;
#endif
auto physStatusIcon = mFMP->getChild<LLIconCtrl>("physics_status_message_icon");
@@ -3424,12 +3421,6 @@ void LLModelPreview::updateStatusMessages()
physStatusIcon->setImage(img);
}
// </FS:Beq>
else if (has_physics_error & PhysicsError::NOHAVOK)
{
mFMP->childSetValue("physics_status_message_text", mFMP->getString("phys_status_no_havok"));
LLUIImagePtr img = LLUI::getUIImage("ModelImport_Status_Warning");
physStatusIcon->setImage(img);
}
else
{
// This should not happen
+2 -2
View File
@@ -259,11 +259,11 @@ void LLHandlerUtil::logGroupNoticeToIMGroup(
payload["message"].asString().c_str()
);
logToIM(IM_SESSION_GROUP_START, group_name + GROUP_CHAT_SUFFIX, sender_name, msg, payload["group_id"], sender_id);
logToIM(IM_SESSION_GROUP_START, group_name, sender_name, msg, payload["group_id"], sender_id);
}
else
{
logToIM(IM_SESSION_GROUP_START, group_name + GROUP_CHAT_SUFFIX, sender_name, payload["message"],
logToIM(IM_SESSION_GROUP_START, group_name, sender_name, payload["message"],
payload["group_id"], sender_id);
}
// </FS:KC> Better group notices to IM log
+4 -1
View File
@@ -6897,7 +6897,10 @@ class LLToolsEnablePathfindingView : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
return (LLPathfindingManager::getInstance() != NULL) && LLPathfindingManager::getInstance()->isPathfindingEnabledForCurrentRegion() && LLPathfindingManager::getInstance()->isPathfindingViewEnabled();
// <FS:TJ> We still want the menu option to be enabled so we can warn the user when there is no Pathfinding support
//return (LLPathfindingManager::getInstance() != NULL) && LLPathfindingManager::getInstance()->isPathfindingEnabledForCurrentRegion() && LLPathfindingManager::getInstance()->isPathfindingViewEnabled();
return (LLPathfindingManager::getInstance() != NULL) && LLPathfindingManager::getInstance()->isPathfindingEnabledForCurrentRegion();
// </FS:TJ>
}
};
+3 -1
View File
@@ -1558,7 +1558,9 @@ bool LLViewerFetchedTexture::preCreateTexture(S32 usename/*= 0*/)
// from local images, but this might become unsafe in case of changes to fetcher
if (mBoostLevel == BOOST_PREVIEW)
{
mRawImage->biasedScaleToPowerOfTwo(1024);
// A local file with a preview flag likely means mesh's texture upload
// which should follow normal upload scaling rules
mRawImage->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
}
else
{ // leave black border, do not scale image content
+47 -48
View File
@@ -37,63 +37,62 @@ class LLLineEditor;
class LLPanel;
class LLTextEditor;
class Omnifilter
: public LLFloater
class Omnifilter : public LLFloater
{
friend class LLFloaterReg;
private:
Omnifilter(const LLSD& key);
private:
Omnifilter(const LLSD& key);
public:
bool postBuild() override final;
LLScrollListItem* addNeedle(const std::string& name, const OmnifilterEngine::Needle& needle);
public:
bool postBuild() override final;
LLScrollListItem* addNeedle(const std::string& name, const OmnifilterEngine::Needle& needle);
protected:
OmnifilterEngine::Needle* getSelectedNeedle();
protected:
OmnifilterEngine::Needle* getSelectedNeedle();
void onSelectNeedle();
void onNeedleChanged();
void onAddNeedleClicked();
void onRemoveNeedleClicked();
void onNeedleNameChanged();
void onNeedleCheckboxChanged(LLUICtrl* ctrl);
void onOwnerChanged();
void onSelectNeedle();
void onNeedleChanged();
void onAddNeedleClicked();
void onRemoveNeedleClicked();
void onNeedleNameChanged();
void onNeedleCheckboxChanged(LLUICtrl* ctrl);
void onOwnerChanged();
void onLogLine(time_t time, const std::string& logLine);
void onLogLine(time_t time, const std::string& logLine);
FSScrollListCtrl* mNeedleListCtrl{ nullptr };
LLButton* mAddNeedleBtn{ nullptr };
LLButton* mRemoveNeedleBtn{ nullptr };
FSScrollListCtrl* mFilterLogCtrl{ nullptr };
LLPanel* mPanelDetails{ nullptr };
LLLineEditor* mNeedleNameCtrl{ nullptr };
LLLineEditor* mSenderNameCtrl{ nullptr };
LLCheckBoxCtrl* mSenderCaseSensitiveCheck{ nullptr };
LLComboBox* mSenderMatchTypeCombo{ nullptr };
LLTextEditor* mContentCtrl{ nullptr };
LLCheckBoxCtrl* mContentCaseSensitiveCheck{ nullptr };
LLComboBox* mContentMatchTypeCombo{ nullptr };
LLLineEditor* mRegionNameCtrl{ nullptr };
LLLineEditor* mOwnerCtrl{ nullptr };
FSScrollListCtrl* mNeedleListCtrl{ nullptr };
LLButton* mAddNeedleBtn{ nullptr };
LLButton* mRemoveNeedleBtn{ nullptr };
FSScrollListCtrl* mFilterLogCtrl{ nullptr };
LLPanel* mPanelDetails{ nullptr };
LLLineEditor* mNeedleNameCtrl{ nullptr };
LLLineEditor* mSenderNameCtrl{ nullptr };
LLCheckBoxCtrl* mSenderCaseSensitiveCheck{ nullptr };
LLComboBox* mSenderMatchTypeCombo{ nullptr };
LLTextEditor* mContentCtrl{ nullptr };
LLCheckBoxCtrl* mContentCaseSensitiveCheck{ nullptr };
LLComboBox* mContentMatchTypeCombo{ nullptr };
LLLineEditor* mRegionNameCtrl{ nullptr };
LLLineEditor* mOwnerCtrl{ nullptr };
LLButton* mTypeNearbyBtn{ nullptr };
LLButton* mTypeIMBtn{ nullptr };
LLButton* mTypeGroupIMBtn{ nullptr };
LLButton* mTypeObjectChatBtn{ nullptr };
LLButton* mTypeObjectIMBtn{ nullptr };
LLButton* mTypeScriptErrorBtn{ nullptr };
LLButton* mTypeDialogBtn{ nullptr };
LLButton* mTypeOfferBtn{ nullptr };
LLButton* mTypeInviteBtn{ nullptr };
LLButton* mTypeLureBtn{ nullptr };
LLButton* mTypeLoadURLBtn{ nullptr };
LLButton* mTypeFriendshipOfferBtn{ nullptr };
LLButton* mTypeTeleportRequestBtn{ nullptr };
LLButton* mTypeGroupNoticeBtn{ nullptr };
LLButton* mTypeNearbyBtn{ nullptr };
LLButton* mTypeIMBtn{ nullptr };
LLButton* mTypeGroupIMBtn{ nullptr };
LLButton* mTypeObjectChatBtn{ nullptr };
LLButton* mTypeObjectIMBtn{ nullptr };
LLButton* mTypeScriptErrorBtn{ nullptr };
LLButton* mTypeDialogBtn{ nullptr };
LLButton* mTypeOfferBtn{ nullptr };
LLButton* mTypeInviteBtn{ nullptr };
LLButton* mTypeLureBtn{ nullptr };
LLButton* mTypeLoadURLBtn{ nullptr };
LLButton* mTypeFriendshipOfferBtn{ nullptr };
LLButton* mTypeTeleportRequestBtn{ nullptr };
LLButton* mTypeGroupNoticeBtn{ nullptr };
LLLineEditor* mChatReplaceCtrl{ nullptr };
LLLineEditor* mButtonReplyCtrl{ nullptr };
LLTextEditor* mTextBoxReplyCtrl{ nullptr };
LLLineEditor* mChatReplaceCtrl{ nullptr };
LLLineEditor* mButtonReplyCtrl{ nullptr };
LLTextEditor* mTextBoxReplyCtrl{ nullptr };
};
#endif // OMNIFILTER_H
+4 -3
View File
@@ -26,6 +26,7 @@
#include "omnifilterengine.h"
#include "fsyspath.h"
#include "llnotificationsutil.h"
#include "llsdserialize.h"
#include "llviewercontrol.h"
@@ -237,13 +238,13 @@ void OmnifilterEngine::loadNeedles()
return;
}
if (!std::filesystem::exists(mNeedlesXMLPath))
if (!std::filesystem::exists(fsyspath(mNeedlesXMLPath)))
{
// file does not exist (yet), just return empty
return;
}
if (!std::filesystem::is_regular_file(mNeedlesXMLPath))
if (!std::filesystem::is_regular_file(fsyspath(mNeedlesXMLPath)))
{
LL_DEBUGS("Omnifilter") << "Omnifilter storage at '" << mNeedlesXMLPath << "' is not a regular file." << LL_ENDL;
LLSD args;
@@ -252,7 +253,7 @@ void OmnifilterEngine::loadNeedles()
return;
}
if (std::filesystem::file_size(mNeedlesXMLPath) == 0)
if (std::filesystem::file_size(fsyspath(mNeedlesXMLPath)) == 0)
{
// file exists but is empty, this should not happen, so alert the user, they might have lost their needles
LL_DEBUGS("Omnifilter") << "Omnifilter storage file is empty." << mNeedlesXMLPath << LL_ENDL;
-2
View File
@@ -27,7 +27,6 @@
#include "llcheckboxctrl.h"
#include "llcolorswatch.h"
#include "llcombobox.h"
#include "lldir.h"
#include "llfoldertype.h"
#include "llinventoryfunctions.h" // for ROOT_FIRESTORM_FOLDER
#include "llinventorytype.h"
@@ -41,7 +40,6 @@
#include "llviewerobject.h"
#include "llviewerpartsim.h"
#include "llviewerpartsource.h"
#include "llviewerregion.h"
#include "llwindow.h"
#include "llviewerassetupload.h"
+1 -1
View File
@@ -148,7 +148,7 @@ class ParticleScriptCreationCallback : public LLInventoryCallback
{
public:
ParticleScriptCreationCallback(ParticleEditor* editor);
void fire(const LLUUID& inventoryItem);
void fire(const LLUUID& inventoryItem) override;
protected:
~ParticleScriptCreationCallback() = default;
+102 -129
View File
@@ -35,16 +35,13 @@
#include "fscommon.h"
#include "llagent.h"
#include "llappviewer.h"
#include "llcallbacklist.h"
#include "llcheckboxctrl.h"
#include "llcolorswatch.h"
#include "llcombobox.h"
#include "llcubemap.h"
#include "llenvironment.h"
#include "llf32uictrl.h"
#include "llfeaturemanager.h"
#include "llfloaterpreference.h" // for LLAvatarComplexityControls
#include "llfloaterreg.h"
#include "llinventoryfunctions.h"
#include "lllayoutstack.h"
#include "llnotificationsutil.h"
@@ -66,7 +63,7 @@ public:
mMarketplaceFolderUUID = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS);
}
virtual ~FSSettingsCollector() {}
~FSSettingsCollector() = default;
bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
{
@@ -85,7 +82,7 @@ public:
protected:
LLUUID mMarketplaceFolderUUID;
std::set<LLUUID> mSeen;
uuid_set_t mSeen;
};
@@ -106,8 +103,8 @@ FloaterQuickPrefs::QuickPrefsXMLEntry::QuickPrefsXMLEntry()
// </FS:Zi>
FloaterQuickPrefs::FloaterQuickPrefs(const LLSD& key)
: LLTransientDockableFloater(NULL, false, key),
mAvatarZOffsetSlider(NULL),
: LLTransientDockableFloater(nullptr, false, key),
mAvatarZOffsetSlider(nullptr),
mRlvBehaviorCallbackConnection(),
mEnvChangedConnection(),
mRegionChangedSlot()
@@ -166,20 +163,16 @@ void FloaterQuickPrefs::onOpen(const LLSD& key)
// Scan widgets and reapply control variables because some control types
// (LLSliderCtrl for example) don't update their GUI when hidden
control_list_t::iterator it;
for (it = mControlsList.begin(); it != mControlsList.end(); ++it)
for (const auto& [name, entry] : mControlsList)
{
const ControlEntry& entry = it->second;
LLUICtrl* current_widget = entry.widget;
if (!current_widget)
{
LL_WARNS() << "missing widget for control " << it->first << LL_ENDL;
LL_WARNS() << "missing widget for control " << name << LL_ENDL;
continue;
}
LLControlVariable* var = current_widget->getControlVariable();
if (var)
if (LLControlVariable* var = current_widget->getControlVariable())
{
current_widget->setValue(var->getValue());
}
@@ -283,17 +276,15 @@ void FloaterQuickPrefs::loadDayCyclePresets(const std::multimap<std::string, LLU
mDayCyclePresetsCombo->addSeparator();
// Add setting presets.
for (std::multimap<std::string, LLUUID>::const_iterator it = daycycle_map.begin(); it != daycycle_map.end(); ++it)
for (const auto& [preset_name, asset_id] : daycycle_map)
{
const std::string& preset_name = (*it).first;
const LLUUID& asset_id = (*it).second;
if (!preset_name.empty())
{
mDayCyclePresetsCombo->add(preset_name, LLSD(asset_id));
}
}
// <FS:Beq> Opensim legacy windlight support
// <FS:Beq> Opensim legacy windlight support
// Opensim may support both environment and extenvironment caps on the same region
// we also need these disabled in SL on the OpenSim build.
#ifdef OPENSIM
@@ -305,7 +296,7 @@ void FloaterQuickPrefs::loadDayCyclePresets(const std::multimap<std::string, LLU
{
mDayCyclePresetsCombo->addSeparator();
}
for(const auto& preset_name : LLEnvironment::getInstance()->mLegacyDayCycles)
for (const auto& preset_name : LLEnvironment::getInstance()->mLegacyDayCycles)
{
// we add by name and only build the envp on demand
LL_DEBUGS("WindlightCaps") << "Adding legacy day cycle " << preset_name << LL_ENDL;
@@ -324,17 +315,15 @@ void FloaterQuickPrefs::loadSkyPresets(const std::multimap<std::string, LLUUID>&
mWLPresetsCombo->addSeparator();
// Add setting presets.
for (std::multimap<std::string, LLUUID>::const_iterator it = sky_map.begin(); it != sky_map.end(); ++it)
for (const auto& [preset_name, asset_id] : sky_map)
{
const std::string& preset_name = (*it).first;
const LLUUID& asset_id = (*it).second;
if (!preset_name.empty())
{
mWLPresetsCombo->add(preset_name, LLSD(asset_id));
}
}
// <FS:Beq> Opensim legacy windlight support
// <FS:Beq> Opensim legacy windlight support
// Opensim may support both environment and extenvironment caps on the same region
// we also need these disabled in SL on the OpenSim build.
#ifdef OPENSIM
@@ -346,7 +335,7 @@ void FloaterQuickPrefs::loadSkyPresets(const std::multimap<std::string, LLUUID>&
{
mWLPresetsCombo->addSeparator();
}
for(const auto& preset_name : LLEnvironment::getInstance()->mLegacySkies)
for (const auto& preset_name : LLEnvironment::getInstance()->mLegacySkies)
{
// we add by name and only build the envp on demand
LL_DEBUGS("WindlightCaps") << "Adding legacy sky " << preset_name << LL_ENDL;
@@ -366,17 +355,15 @@ void FloaterQuickPrefs::loadWaterPresets(const std::multimap<std::string, LLUUID
mWaterPresetsCombo->addSeparator();
// Add setting presets.
for (std::multimap<std::string, LLUUID>::const_iterator it = water_map.begin(); it != water_map.end(); ++it)
for (const auto& [preset_name, asset_id] : water_map)
{
const std::string& preset_name = (*it).first;
const LLUUID& asset_id = (*it).second;
if (!preset_name.empty())
{
mWaterPresetsCombo->add(preset_name, LLSD(asset_id));
}
}
// <FS:Beq> Opensim legacy windlight support
// <FS:Beq> Opensim legacy windlight support
// Opensim may support both environment and extenvironment caps on the same region
// we also need these disabled in SL on the OpenSim build.
#ifdef OPENSIM
@@ -388,7 +375,7 @@ void FloaterQuickPrefs::loadWaterPresets(const std::multimap<std::string, LLUUID
{
mWaterPresetsCombo->addSeparator();
}
for(const auto& preset_name : LLEnvironment::getInstance()->mLegacyWater)
for (const auto& preset_name : LLEnvironment::getInstance()->mLegacyWater)
{
// we add by name and only build the envp on demand
LL_DEBUGS("WindlightCaps") << "Adding legacy water " << preset_name << LL_ENDL;
@@ -414,21 +401,19 @@ void FloaterQuickPrefs::loadPresets()
std::multimap<std::string, LLUUID> water_map;
std::multimap<std::string, LLUUID> daycycle_map;
for (LLInventoryModel::item_array_t::const_iterator it = items.begin(); it != items.end(); ++it)
for (const auto& item : items)
{
LLInventoryItem* item = *it;
LLSettingsType::type_e type = LLSettingsType::fromInventoryFlags(item->getFlags());
switch (type)
{
case LLSettingsType::ST_SKY:
sky_map.insert(std::make_pair(item->getName(), item->getAssetUUID()));
sky_map.emplace(item->getName(), item->getAssetUUID());
break;
case LLSettingsType::ST_WATER:
water_map.insert(std::make_pair(item->getName(), item->getAssetUUID()));
water_map.emplace(item->getName(), item->getAssetUUID());
break;
case LLSettingsType::ST_DAYCYCLE:
daycycle_map.insert(std::make_pair(item->getName(), item->getAssetUUID()));
daycycle_map.emplace(item->getName(), item->getAssetUUID());
break;
default:
LL_WARNS() << "Found invalid setting: " << item->getName() << LL_ENDL;
@@ -443,25 +428,23 @@ void FloaterQuickPrefs::loadPresets()
void FloaterQuickPrefs::setDefaultPresetsEnabled(bool enabled)
{
LLScrollListItem* item{ nullptr };
if (auto item = mWLPresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT)))
item->setEnabled(enabled);
item = mWLPresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT));
if (item) item->setEnabled(enabled);
if (auto item = mWLPresetsCombo->getItemByValue(LLSD(PRESET_NAME_DAY_CYCLE)))
item->setEnabled(enabled);
item = mWLPresetsCombo->getItemByValue(LLSD(PRESET_NAME_DAY_CYCLE));
if (item) item->setEnabled(enabled);
if (auto item = mWaterPresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT)))
item->setEnabled(enabled);
item = mWaterPresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT));
if (item) item->setEnabled(enabled);
if (auto item = mWaterPresetsCombo->getItemByValue(LLSD(PRESET_NAME_DAY_CYCLE)))
item->setEnabled(enabled);
item = mWaterPresetsCombo->getItemByValue(LLSD(PRESET_NAME_DAY_CYCLE));
if (item) item->setEnabled(enabled);
if (auto item = mDayCyclePresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT)))
item->setEnabled(enabled);
item = mDayCyclePresetsCombo->getItemByValue(LLSD(PRESET_NAME_REGION_DEFAULT));
if (item) item->setEnabled(enabled);
item = mDayCyclePresetsCombo->getItemByValue(LLSD(PRESET_NAME_NONE));
if (item) item->setEnabled(enabled);
if (auto item = mDayCyclePresetsCombo->getItemByValue(LLSD(PRESET_NAME_NONE)))
item->setEnabled(enabled);
}
void FloaterQuickPrefs::setSelectedEnvironment()
@@ -480,11 +463,10 @@ void FloaterQuickPrefs::setSelectedEnvironment()
// the sky and water settings in a day cycle, so check them after the
// day cycle. If no fixed sky or fixed water is set, they are either
// defined in the day cycle or inherited from a higher environment level.
LLSettingsDay::ptr_t day = LLEnvironment::instance().getEnvironmentDay(LLEnvironment::ENV_LOCAL);
if (day)
if (LLSettingsDay::ptr_t day = LLEnvironment::instance().getEnvironmentDay(LLEnvironment::ENV_LOCAL))
{
//LL_INFOS() << "EEP: day name = " << day->getName() << " - asset id = " << day->getAssetId() << LL_ENDL;
if( day->getAssetId().notNull())
if (day->getAssetId().notNull())
{ // EEP processing
mDayCyclePresetsCombo->selectByValue(LLSD(day->getAssetId()));
// Sky and Water are part of a day cycle in EEP
@@ -504,13 +486,11 @@ void FloaterQuickPrefs::setSelectedEnvironment()
// Sky is part of day so treat that as day cycle
mWLPresetsCombo->selectByValue(LLSD(PRESET_NAME_DAY_CYCLE));
// Water is not part of legacy day so we need to hunt around
LLSettingsWater::ptr_t water = LLEnvironment::instance().getEnvironmentFixedWater(LLEnvironment::ENV_LOCAL);
if (water)
if (LLSettingsWater::ptr_t water = LLEnvironment::instance().getEnvironmentFixedWater(LLEnvironment::ENV_LOCAL))
{
// This is going to be possible. OS will support both Legacy and EEP
// so having a water EEP asset with a Legacy day cycle could happen.
LLUUID asset_id = water->getAssetId();
if (asset_id.notNull())
if (LLUUID asset_id = water->getAssetId(); asset_id.notNull())
{
mWaterPresetsCombo->selectByValue(LLSD(asset_id));
}
@@ -532,11 +512,10 @@ void FloaterQuickPrefs::setSelectedEnvironment()
mDayCyclePresetsCombo->selectByValue(LLSD(PRESET_NAME_NONE));
}
LLSettingsSky::ptr_t sky = LLEnvironment::instance().getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL);
if (sky)
if (LLSettingsSky::ptr_t sky = LLEnvironment::instance().getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL))
{
//LL_INFOS() << "EEP: sky name = " << sky->getName() << " - asset id = " << sky->getAssetId() << LL_ENDL;
if(sky->getAssetId().notNull())
if (sky->getAssetId().notNull())
{
mWLPresetsCombo->selectByValue(LLSD(sky->getAssetId()));
}
@@ -554,11 +533,9 @@ void FloaterQuickPrefs::setSelectedEnvironment()
#endif
}
// Water is not part of legacy day so we need to hunt around
LLSettingsWater::ptr_t water = LLEnvironment::instance().getEnvironmentFixedWater(LLEnvironment::ENV_LOCAL);
if (water)
if (LLSettingsWater::ptr_t water = LLEnvironment::instance().getEnvironmentFixedWater(LLEnvironment::ENV_LOCAL))
{
LLUUID asset_id = water->getAssetId();
if (asset_id.notNull())
if (LLUUID asset_id = water->getAssetId(); asset_id.notNull())
{
mWaterPresetsCombo->selectByValue(LLSD(asset_id));
}
@@ -713,7 +690,7 @@ void FloaterQuickPrefs::loadSavedSettingsFromFile(const std::string& settings_pa
QuickPrefsXML xml;
LLXMLNodePtr root;
if (!LLXMLNode::parseFile(settings_path, root, NULL))
if (!LLXMLNode::parseFile(settings_path, root, nullptr))
{
LL_WARNS() << "Unable to load quick preferences from file: " << settings_path << LL_ENDL;
}
@@ -754,7 +731,7 @@ void FloaterQuickPrefs::loadSavedSettingsFromFile(const std::string& settings_pa
addControl(
xml_entry.control_name,
label,
NULL,
nullptr,
(ControlType)type,
xml_entry.integer,
xml_entry.min_value,
@@ -771,7 +748,7 @@ void FloaterQuickPrefs::loadSavedSettingsFromFile(const std::string& settings_pa
addControl(
"IndirectMaxNonImpostors",
label,
NULL,
nullptr,
(ControlType)type,
xml_entry.integer,
1,
@@ -800,14 +777,17 @@ bool FloaterQuickPrefs::isValidPreset(const LLSD& preset)
{
if (preset.isUUID())
{
if(!preset.asUUID().isNull()){ return true;}
if (!preset.asUUID().isNull())
{
return true;
}
}
else if (preset.isString())
{
if(!preset.asString().empty() &&
preset.asString() != PRESET_NAME_REGION_DEFAULT &&
preset.asString() != PRESET_NAME_DAY_CYCLE &&
preset.asString() != PRESET_NAME_NONE)
if (!preset.asString().empty() &&
preset.asString() != PRESET_NAME_REGION_DEFAULT &&
preset.asString() != PRESET_NAME_DAY_CYCLE &&
preset.asString() != PRESET_NAME_NONE)
{
return true;
}
@@ -840,22 +820,20 @@ void FloaterQuickPrefs::stepComboBox(LLComboBox* ctrl, bool forward)
void FloaterQuickPrefs::selectSkyPreset(const LLSD& preset)
{
// Opensim continued W/L support
auto& instance = LLEnvironment::instance();
// Opensim continued W/L support
#ifdef OPENSIM
if(!preset.isUUID() && LLGridManager::getInstance()->isInOpenSim())
{
LLSettingsSky::ptr_t legacy_sky = nullptr;
LLSD messages;
legacy_sky = LLEnvironment::createSkyFromLegacyPreset(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", "skies", preset.asString() + ".xml"), messages);
if (legacy_sky)
if (auto legacy_sky = LLEnvironment::createSkyFromLegacyPreset(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", "skies", preset.asString() + ".xml"), messages))
{
// Need to preserve current sky manually in this case in contrast to asset-based settings
LLSettingsWater::ptr_t current_water = LLEnvironment::instance().getCurrentWater();
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, legacy_sky, current_water);
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().updateEnvironment(static_cast<LLSettingsBase::Seconds>(gSavedSettings.getF32("FSEnvironmentManualTransitionTime")));
LLSettingsWater::ptr_t current_water = instance.getCurrentWater();
instance.setEnvironment(LLEnvironment::ENV_LOCAL, legacy_sky, current_water);
instance.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
instance.updateEnvironment(static_cast<LLSettingsBase::Seconds>(gSavedSettings.getF32("FSEnvironmentManualTransitionTime")));
}
else
{
@@ -866,26 +844,26 @@ void FloaterQuickPrefs::selectSkyPreset(const LLSD& preset)
else // note the else here bridges the endif
#endif
{
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID());
instance.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
instance.setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID());
}
}
void FloaterQuickPrefs::selectWaterPreset(const LLSD& preset)
{
auto& instance = LLEnvironment::instance();
#ifdef OPENSIM
if(!preset.isUUID() && LLGridManager::getInstance()->isInOpenSim())
{
LLSettingsWater::ptr_t legacy_water = nullptr;
LLSD messages;
legacy_water = LLEnvironment::createWaterFromLegacyPreset(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", "water", preset.asString() + ".xml"), messages);
if (legacy_water)
if (auto legacy_water = LLEnvironment::createWaterFromLegacyPreset(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", "water", preset.asString() + ".xml"), messages))
{
// Need to preserve current sky manually in this case in contrast to asset-based settings
LLSettingsSky::ptr_t current_sky = LLEnvironment::instance().getCurrentSky();
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, current_sky, legacy_water);
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().updateEnvironment(static_cast<LLSettingsBase::Seconds>(gSavedSettings.getF32("FSEnvironmentManualTransitionTime")));
LLSettingsSky::ptr_t current_sky = instance.getCurrentSky();
instance.setEnvironment(LLEnvironment::ENV_LOCAL, current_sky, legacy_water);
instance.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
instance.updateEnvironment(static_cast<LLSettingsBase::Seconds>(gSavedSettings.getF32("FSEnvironmentManualTransitionTime")));
}
else
{
@@ -896,24 +874,24 @@ void FloaterQuickPrefs::selectWaterPreset(const LLSD& preset)
else // beware the trailing else here.
#endif
{
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID());
instance.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
instance.setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID());
}
}
void FloaterQuickPrefs::selectDayCyclePreset(const LLSD& preset)
{
auto& instance = LLEnvironment::instance();
#ifdef OPENSIM
if(!preset.isUUID() && LLGridManager::getInstance()->isInOpenSim())
{
LLSettingsDay::ptr_t legacyday = nullptr;
LLSD messages;
legacyday = LLEnvironment::createDayCycleFromLegacyPreset(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", "days", preset.asString() + ".xml"), messages);
if (legacyday)
if (auto legacyday = LLEnvironment::createDayCycleFromLegacyPreset(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", "days", preset.asString() + ".xml"), messages))
{
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, legacyday);
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().updateEnvironment(static_cast<LLSettingsBase::Seconds>(gSavedSettings.getF32("FSEnvironmentManualTransitionTime")));
instance.setEnvironment(LLEnvironment::ENV_LOCAL, legacyday);
instance.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
instance.updateEnvironment(static_cast<LLSettingsBase::Seconds>(gSavedSettings.getF32("FSEnvironmentManualTransitionTime")));
}
else
{
@@ -924,8 +902,8 @@ void FloaterQuickPrefs::selectDayCyclePreset(const LLSD& preset)
else // beware trailing else that bridges the endif
#endif
{
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID());
instance.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
instance.setManualEnvironment(LLEnvironment::ENV_LOCAL, preset.asUUID());
}
}
@@ -1176,11 +1154,11 @@ void FloaterQuickPrefs::updateControl(const std::string& controlName, ControlEnt
// hide all widget types except for the one the user wants
LLUICtrl* widget{ nullptr };
for (it = typeMap.begin(); it != typeMap.end(); ++it)
for (const auto& [control_type, control_name] : typeMap)
{
if (entry.type != it->first)
if (entry.type != control_type)
{
widget = entry.panel->getChild<LLUICtrl>(it->second);
widget = entry.panel->findChild<LLUICtrl>(control_name);
if (widget)
{
@@ -1317,7 +1295,7 @@ LLUICtrl* FloaterQuickPrefs::addControl(const std::string& controlName, const st
if (!panel)
{
LL_WARNS() << "could not add panel" << LL_ENDL;
return NULL;
return nullptr;
}
// sanity checks
@@ -1335,8 +1313,8 @@ LLUICtrl* FloaterQuickPrefs::addControl(const std::string& controlName, const st
// create a new internal entry for this control
ControlEntry newControl;
newControl.panel = panel->getChild<LLPanel>("option_ordering_panel");
newControl.widget = NULL;
newControl.label_textbox = NULL;
newControl.widget = nullptr;
newControl.label_textbox = nullptr;
newControl.label = controlLabel;
newControl.type = type;
newControl.integer = integer;
@@ -1419,7 +1397,7 @@ void FloaterQuickPrefs::removeControl(const std::string& controlName, bool remov
}
}
void FloaterQuickPrefs::selectControl(std::string controlName)
void FloaterQuickPrefs::selectControl(const std::string& controlName)
{
// remove previously selected marker, if any
if (!mSelectedControl.empty() && hasControl(mSelectedControl))
@@ -1492,8 +1470,7 @@ void FloaterQuickPrefs::selectControl(std::string controlName)
}
// the rest will not need them
default:
{
}
break;
}
}
@@ -1544,14 +1521,13 @@ void FloaterQuickPrefs::onEditModeChanged()
std::string settings_path = getSettingsPath(true);
// loop through the list of controls, in the displayed order
std::list<std::string>::iterator it;
for (it = mControlsOrder.begin(); it != mControlsOrder.end(); ++it)
for (const auto& control_name : mControlsOrder)
{
const ControlEntry& entry = mControlsList[*it];
const ControlEntry& entry = mControlsList[control_name];
QuickPrefsXMLEntry xml_entry;
// add control values to the XML entry
xml_entry.control_name = *it;
xml_entry.control_name = control_name;
xml_entry.label = entry.label;
xml_entry.control_type = (U32)entry.type;
xml_entry.integer = entry.integer;
@@ -1571,8 +1547,7 @@ void FloaterQuickPrefs::onEditModeChanged()
// Write the resulting XML to file
if (!output_node->isNull())
{
LLFILE* fp = LLFile::fopen(settings_path, "w");
if (fp)
if (LLFILE* fp = LLFile::fopen(settings_path, "w"))
{
LLXMLNode::writeHeaderToFile(fp);
output_node->writeToFile(fp);
@@ -1614,12 +1589,11 @@ void FloaterQuickPrefs::onValuesChanged()
// disable selection so the border doesn't cause a crash
selectControl("");
// rename the old ordering entry
std::list<std::string>::iterator it;
for (it = mControlsOrder.begin(); it != mControlsOrder.end(); ++it)
for (auto& control_name : mControlsOrder)
{
if (*it == old_control_name)
if (control_name == old_control_name)
{
*it = new_control_name;
control_name = new_control_name;
break;
}
}
@@ -1689,6 +1663,7 @@ void FloaterQuickPrefs::onValuesChanged()
case TYPE_U32:
{
min_value = 0.0f;
[[fallthrough]];
}
// Fallthrough, S32 and U32 are integer values
case TYPE_S32:
@@ -1701,7 +1676,8 @@ void FloaterQuickPrefs::onValuesChanged()
// Everything else gets a text widget for now
default:
{
type=ControlTypeText;
type = ControlTypeText;
break;
}
}
@@ -1805,8 +1781,7 @@ void FloaterQuickPrefs::swapControls(const std::string& control1, const std::str
void FloaterQuickPrefs::onMoveUpClicked()
{
// find the control in the ordering list
std::list<std::string>::iterator it;
for (it = mControlsOrder.begin(); it != mControlsOrder.end(); ++it)
for (auto it = mControlsOrder.begin(); it != mControlsOrder.end(); ++it)
{
if (*it == mSelectedControl)
{
@@ -1835,8 +1810,7 @@ void FloaterQuickPrefs::onMoveUpClicked()
void FloaterQuickPrefs::onMoveDownClicked()
{
// find the control in the ordering list
std::list<std::string>::iterator it;
for (it = mControlsOrder.begin(); it != mControlsOrder.end(); ++it)
for (auto it = mControlsOrder.begin(); it != mControlsOrder.end(); ++it)
{
if (*it == mSelectedControl)
{
@@ -2050,8 +2024,7 @@ void FloaterQuickPrefs::onClickResetRenderSSAOEffectX()
void FloaterQuickPrefs::callbackRestoreDefaults(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if ( option == 0 ) // YES
if (S32 option = LLNotificationsUtil::getSelectedOption(notification, response); option == 0) // YES
{
selectControl("");
for (const auto& control : mControlsOrder)
+9 -8
View File
@@ -97,8 +97,8 @@ private:
void setDefaultPresetsEnabled(bool enabled);
public:
/*virtual*/ bool postBuild();
virtual void onOpen(const LLSD& key);
bool postBuild() override;
void onOpen(const LLSD& key) override;
void setSelectedSky(const std::string& preset_name);
void setSelectedWater(const std::string& preset_name);
@@ -196,7 +196,7 @@ private:
boost::signals2::connection mRegionChangedSlot;
public:
virtual void onClose(bool app_quitting);
void onClose(bool app_quitting) override;
protected:
enum ControlType
@@ -277,14 +277,14 @@ protected:
std::string getSettingsPath(bool save_mode);
// adds a new control and returns a pointer to the chosen widget
LLUICtrl* addControl(const std::string& controlName, const std::string& controlLabel, LLView* slot = NULL, ControlType type = ControlTypeRadio, bool integer = false, F32 min_value = -1000000.0f, F32 max_value = 1000000.0f, F32 increment = 0.0f);
LLUICtrl* addControl(const std::string& controlName, const std::string& controlLabel, LLView* slot = nullptr, ControlType type = ControlTypeRadio, bool integer = false, F32 min_value = -1000000.0f, F32 max_value = 1000000.0f, F32 increment = 0.0f);
// removes a control
void removeControl(const std::string& controlName, bool remove_slot = true);
// updates a single control
void updateControl(const std::string& controlName, ControlEntry& entry);
// make this control the currently selected one
void selectControl(std::string controlName);
void selectControl(const std::string& controlName);
// toggles edit mode
void onDoubleClickLabel(LLUICtrl* ctrl, LLPanel* panel);
@@ -305,8 +305,9 @@ protected:
// swaps two controls, used for move up and down
void swapControls(const std::string& control1, const std::string& control2);
bool hasControl( std::string const &aName ) const
{ return mControlsList.end() != mControlsList.find( aName ); }
bool hasControl(std::string const &aName) const
{
return mControlsList.end() != mControlsList.find(aName);
}
};
#endif // QUICKPREFS_H
+1 -1
View File
@@ -29,7 +29,7 @@ class LLControlVariable;
class SanityCheck : public LLSingleton<SanityCheck>
{
LLSINGLETON_EMPTY_CTOR(SanityCheck);
~SanityCheck() { };
~SanityCheck() = default;
public:
void init();
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="Model yüklənməsi">
<string name="no_havok">fizikası olan mesh yüklənir</string>
<string name="status_parse_error">Xəta: DAE faylının təhlilində problem var - Ətraflı məlumatlar üçün jurnalı baxın.</string>
<string name="status_bind_shape_orientation">Xəbərdarlıq: Matrix formu standart olaraq X koordinatına uyğun deyil.</string>
<string name="status_material_mismatch">Xəta: Modelin materialı standart modeldə yoxdur.</string>
@@ -24,7 +23,6 @@
<string name="phys_status_vertex_limit_exceeded">Bəzi fiziki qabıqlar üçün vertex limiti aşıldı (256); Digər 'Analiz Metodu'nu sınayın.</string>
<string name="phys_status_hull_limit_exceeded">Bəzi modellər qabığın limitini keçir (256); 'Sadələşdirmə'ni sınayın.</string>
<string name="phys_status_degenerate_triangles">Mesh fizikası çox sıxdır və ya degenerativ üçbucaqları ehtiva edir. Həll etmək üçün Analiz/Sadələşdirmədən istifadə edin.</string>
<string name="phys_status_no_havok">Bu versiya Havok-u dəstəkləmir və fizikanı Second Life-a yükləmək üçün tövsiyə edilmir. Nəticələr gözlənilməz ola bilər.</string>
<string name="phys_status_too_thin">0,5 m-dən kiçik bir və ya bir neçə ölçü, yalnız gövdəyə əsaslanan fiziki formalar (təhlil edilmiş) düzgün işləyəcək.</string>
<string name="phys_status_unknown_error">Tanınmamış xəta tapıldı.</string>
<string name="layer_all">Hamısı</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Yol tapma önizləməsi/yoxlanması">
<floater.string name="no_havok">
Yol tapma önizləməsi/yoxlanması
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Yol tapma kitabxanasının həyata keçirilməsi tapılmadı
</floater.string>
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="Modell hochladen">
<string name="no_havok">
Mesh-Upload mit Physics
</string>
<string name="status_idle"/>
<string name="status_parse_error">
Fehler: Fehler beim Modell-Parsen Details siehe Protokoll.
@@ -73,9 +70,6 @@
<string name="phys_status_degenerate_triangles">
Das Physik-Netz enthält degenerierte Dreiecke. Probieren Sie Analysieren/Vereinfachen.
</string>
<string name="phys_status_no_havok">
Diese Version enthält keine Havok-Unterstützung und wird nicht für das Hochladen von Physik in Second Life empfohlen. Unvorhersehbare Ergebnisse sind möglich!
</string>
<string name="phys_status_too_thin">
Eine oder mehrere Dimensionen sind kleiner als 0,5m - nur Hüllen-basierte (analysierte) physische Formen werden korrekt funktionieren.
</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Pathfinding-Ansicht/-Test">
<floater.string name="no_havok">
Pathfinding-Ansicht/-Test
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Pathfinding-Bibliotheksimplementierung nicht gefunden.
</floater.string>
@@ -11,8 +11,6 @@
name="Model Preview"
title="Upload Model"
help_topic="upload_model">
<string name="no_havok">mesh upload with physics</string>
<string name="status_idle"></string>
<string name="status_parse_error">Error: Model parsing issue - see log for details.</string>
<string name="status_bind_shape_orientation">Warning: bind shape matrix is not in standard X-forward orientation.</string>
@@ -37,7 +35,6 @@
<string name="phys_status_vertex_limit_exceeded">Some physical hulls exceed the vertex limit (256); try an alternative 'Analyze Method'.</string>
<string name="phys_status_hull_limit_exceeded">Some models exceed the hull limit (256); try 'simplify'.</string>
<string name="phys_status_degenerate_triangles">The physics mesh is too dense or contains degenerate triangles. Use Analyze/Simplify to resolve.</string>
<string name="phys_status_no_havok">This version contains no Havok support and is not recommended for physics upload in Second Life. Results may be unpredictable.</string>
<string name="phys_status_too_thin">One or more dimensions is less than 0.5m, only hull-based (analyzed) physics shapes will work correctly.</string>
<string name="phys_status_unknown_error">An unrecognized error was detected.</string>
<string name="layer_all">All</string> <!-- Text to display in physics layer combo box for "all layers" -->
@@ -11,6 +11,7 @@
single_instance="true"
title="Pathfinding view / test"
width="240">
<floater.string name="no_havok">Pathfinding view / test</floater.string>
<floater.string name="navmesh_viewer_status_unknown"></floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">Cannot find pathing library implementation.</floater.string>
<floater.string name="navmesh_viewer_status_region_not_enabled">This region is not enabled for pathfinding.</floater.string>
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="Subir modelo">
<string name="no_havok">
subida mesh con física
</string>
<string name="status_parse_error">
Error: Problema de análisis de DAE - consulta los datos en el registro.
</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Vista/prueba de pathfinding">
<floater.string name="no_havok">
Vista/prueba de pathfinding
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
No se encuentra la implementación de la biblioteca de localización de rutas.
</floater.string>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="Chargement du modèle">
<string name="no_havok">téléchargement du maillage avec physique</string>
<string name="status_parse_error">Erreur : Problème d&apos;analyse du modèle ; reportez-vous au journal pour plus de détails.</string>
<string name="status_bind_shape_orientation">Avertissement : la matrice de formes de reliure n&apos;est pas dans l&apos;orientation standard X-avant.</string>
<string name="status_material_mismatch">Erreur : le matériau du modèle ne correspond pas à un sous-ensemble du modèle de référence.</string>
@@ -24,7 +23,6 @@
<string name="phys_status_vertex_limit_exceeded">Certaines enveloppes physiques dépassent les limites de sommets.</string>
<string name="phys_status_hull_limit_exceeded">Certains modèles dépassent la limite de la coque (256) ; essayez de "simplifier"..</string>
<string name="phys_status_degenerate_triangles">Le maillage physique est trop dense ou contient des triangles non cohérents. Utilisez Analyser/Simplifier pour résoudre ce problème.</string>
<string name="phys_status_no_havok">Cette version ne contient pas de support Havok et n'est pas recommandée pour le chargement de physiques dans Second Life. Les résultats peuvent être imprévisibles.</string>
<string name="phys_status_too_thin">Une ou plusieurs dimensions sont inférieures à 0,5 m, seules les formes physiques basées sur la coque (analysées) fonctionneront correctement.</string>
<string name="phys_status_unknown_error">Une erreur inconnue a été détectée.</string>
<string name="layer_all">Tout</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Vue/Test de recherche de chemin">
<floater.string name="no_havok">
Vue/Test de recherche de chemin
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Implémentation de la bibliothèque de recherche de chemin introuvable
</floater.string>
@@ -5718,28 +5718,32 @@ Message d'erreur :
Impossible d'ouvrir le fichier en lecture :
[FILE_NAME]
Error message:
Message d'erreur:
[ERROR_MESSAGE] ([ERROR_CODE])
</notification>
<notification name="GenericFileOpenWriteError">
Impossible d'ouvrir le fichier en écriture :
[FILE_NAME]
Error message:
Message d'erreur :
[ERROR_MESSAGE] ([ERROR_CODE])
</notification>
<notification name="GenericFileReadError">
Impossible de lire le fichier :
[FILE_NAME]
Error message:
Message d'erreur :
[ERROR_MESSAGE] ([ERROR_CODE])
</notification>
<notification name="GenericFileWriteError">
Impossible d'écrire dans le fichier :
[FILE_NAME]
Error message:
Message d'erreur :
[ERROR_MESSAGE] ([ERROR_CODE])
</notification>
<notification name="ChatHistoryIsMissing">
Le fichier contenant la transcription du chat est manquant. Soit il n'y a pas de transcription pour ce chat, soit les transcriptions ne sont pas enregistrées.
Vous pouvez activer l'enregistrement des transcriptions dans Préférences &gt; Confidentialité &gt; Journaux et transcriptions.
</notification>
</notifications>
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="Caricamento Modello Mesh">
<string name="no_havok">
caricamento mesh con fisica
</string>
<string name="status_idle"/>
<string name="status_parse_error">
Errore: Errore elaborazione Dae - vedere il registro per informazioni dettagliate.
@@ -73,9 +70,6 @@
<string name="phys_status_degenerate_triangles">
La mesh fisica è troppo densa o contiene triangoli degenerati. Utilizzare Analizza/Semplifica per risolvere.
</string>
<string name="phys_status_no_havok">
Questa versione non contiene supporto Havok e non è consigliata per il caricamento di dati fisici in Second Life. I risultati potrebbero essere imprevedibili.
</string>
<string name="phys_status_too_thin">
Una o più dimensioni sono inferiori a 0,5 m, solo le forme fisiche basate sull'hull (analizzate) funzioneranno correttamente.
</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Visualizzazione / test pathfinding">
<floater.string name="no_havok">
Visualizzazione / test pathfinding
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Implementazione libreria percorsi non trovata.
</floater.string>
@@ -6,6 +6,7 @@
</text>
<check_box label="シーン内の光源のバウンディングボックス" name="lights_bounding_boxes"/>
<check_box label="リージョンのコーナー" name="fsregioncornerbeacons"/>
<check_box label="チャット範囲のスフィア" name="FSShowChatRangeSpheres" />
<check_box label="ビーコン" name="beacons"/>
<check_box label="ハイライト" name="highlights"/>
<check_box label="ビーコン情報をビューアウィンドウに載せる" name="FSRenderBeaconText"/>
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="モデルのアップロード">
<string name="no_havok">
物理と一緒にメッシュをアップロードします。
</string>
<string name="status_parse_error">
エラー:DAEファイルに問題が見つかりました。-詳細につきましてはログをご確認ください。
</string>
@@ -72,9 +69,6 @@
<string name="phys_status_degenerate_triangles">
物理メッシュが密すぎるか、極小な三角形が含まれています。この問題を解決するには、分析/簡素化を使用します。
</string>
<string name="phys_status_no_havok">
このバージョンはHavok対応ではありません。このため、Second Lifeに物理をアップロードする事はお勧めできません。その結果は予測不可能なものとなります。
</string>
<string name="phys_status_too_thin">
1つ以上の寸法が0.5m未満の場合、殻ベース(分析済み)の物理シェイプのみが正しく機能します。
</string>
@@ -63,7 +63,8 @@
</combo_item>
</combo_box>
<text name="region_name_label" value="リージョン名:"/>
<text name="owner_label" value="所有者:"/>
<line_editor name="region_name" tool_tip="ソースのリージョン名を入力します。インベントリのオファーでのみ使用できます。"/>
<text name="owner_label" value="所有者のキー:" tool_tip="グループ招待の場合:グループのUUIDを入力します。オブジェクトによるチャット、オブジェクト所有者の発言、デバッグチャット、またはダイレクトチャットの場合:オブジェクトのUUIDを入力します。オブジェクトIMの場合:オブジェクト所有者のUUIDを入力します。その他:送信者アバターのUUIDを入力します。"/>
<text name="match_source_label" value="一致するソース:"/>
<layout_stack name="buttons_stack">
<layout_panel name="buttons_group_1">
@@ -84,11 +85,11 @@
<layout_panel name="buttons_group_4">
<button name="type_inventory_offer" label="オファー" tool_tip="インベントリオファー内のフィールドと一致します。"/>
<button name="type_friendship" label="フレンドシップ" tool_tip="ユーザからのフレンドのリクエストです。"/>
<button name="type_lure" label="TPルアー" tool_tip="他のユーザからのテレポートのファーです。"/>
<button name="type_lure" label="TPルアー" tool_tip="他のユーザからのテレポートのファーです。"/>
</layout_panel>
<layout_panel name="buttons_group_5">
<button name="type_tp_request" label="TPリクエスト" tool_tip="テレポートのオファーを送信するよう求めるユーザーからのリクエストです。"/>
<button name="type_load_url" label="Load URL" tool_tip="Webサイトにアクセスするためのスクリプト化されたリクエストです。"/>
<button name="type_load_url" label="URL読み込み" tool_tip="Webサイトにアクセスするためのスクリプト化されたリクエストです。"/>
</layout_panel>
</layout_stack>
<text name="chat_replace_label" value="チャットの置き換え:"/>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="経路探索の表示/テスト">
<floater.string name="no_havok">
経路探索の表示/テスト
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
経路探索ライブラリの実装が見つかりません。
</floater.string>
@@ -341,7 +341,7 @@
<menu_item_check label="オブジェクトの選択距離の制限" name="Limit Select Distance"/>
<menu_item_check label="カメラの距離制限を解除" name="Disable Camera Distance"/>
<menu_item_check label="高解像度スナップショット" name="HighResSnapshot"/>
<menu_item_check label="スナップショットをディスクに保存" name="QuietSnapshotsToDisk"/>
<menu_item_check label="シャッター音を出さずにスナップショットをディスクに保存" name="QuietSnapshotsToDisk"/>
<menu label="パフォーマンスツール" name="Performance Tools">
<menu_item_call label="遅延メーター" name="Lag Meter"/>
<menu_item_check label="統計バー" name="Statistics Bar"/>
@@ -5767,4 +5767,11 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
[ERROR_MESSAGE][ERROR_CODE]
</notification>
<!-- </FS:Zi> -->
<!-- <FS:TJ>-->
<notification name="ChatHistoryIsMissing">
チャットの会話履歴ファイルが見つかりません。このチャットの会話履歴が存在しないか、保存されていません。
「初期設定」>「プライバシー」>「会話の記録とテキスト」で会話履歴の保存を有効にすることができます。
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<!-- </FS:TJ>-->
</notifications>
@@ -26,7 +26,6 @@
<text name="time_format_textbox2">
(再起動後に反映)
</text>
<check_box label="IMEの入力テキストを表示" name="use_ime" tool_tip="日本語、中国語などの特定の言語にのみ必要なIME(国際入力方式エディター)を使用します。"/>
<!--maturity-->
<text name="maturity_desired_prompt">
アクセスしたいコンテンツ:
@@ -36,6 +35,7 @@
<combo_box.item label="GeneralとModerate" name="Desired_Mature"/>
<combo_box.item label="General" name="Desired_PG"/>
</combo_box>
<check_box label="IME入力のテキストを表示" name="use_ime" tool_tip="日本語、中国語などの特定の言語にのみ必要なIME(国際入力方式エディタ)を使用します。"/>
<!--start location-->
<text name="start_location_textbox">
開始位置:
@@ -78,7 +78,7 @@
「離席中」とするまでの時間:
</text>
<text name="title_afk_quit_text">
退席になったらログアウトする
席になったらログアウトする
</text>
<combo_box label="「離席中」とするまでの時間:" name="afk">
<combo_box.item label="2分" name="item0"/>
@@ -98,7 +98,7 @@
<combo_box.item label="60分" name="item4"/>
<combo_box.item label="一時退席設定なし" name="item5"/>
</combo_box>
<check_box label="退席中は座る" name="AvatarSitOnAway"/>
<check_box label="席中は座る" name="AvatarSitOnAway"/>
<combo_box name="quitafk">
<combo_box.item label="2分" name="item0"/>
<combo_box.item label="5分" name="item1"/>
@@ -163,55 +163,55 @@
ここから(サウンドのUUIDを指定することで)デフォルトのインターフェイスサウンドを変更したり、
有効、無効にすることができます。初期設定値を確認するにはマウスをUUIDフィールドの上に乗せて下さい。
</text>
<text tool_tip="Firestormが通知/警告した時に再生するデフォルトのサウンドUUIDす。" name="textFSSndAlert">
<text tool_tip="Firestormが通知/警告した時に再生するデフォルトのサウンドUUIDを指定します。" name="textFSSndAlert">
デフォルトの警告音:
</text>
<button name="Prev_UISndAlert" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndAlert" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndAlert"/>
<text tool_tip="無効なキーを押した時に再生するサウンドのUUIDす。" name="textFSBadKeystroke">
<text tool_tip="無効なキーを押した時に再生するサウンドのUUIDを指定します。" name="textFSBadKeystroke">
無効なキー打鍵音:
</text>
<button name="Prev_UISndBadKeystroke" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndBadKeystroke" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndBadKeystroke"/>
<text tool_tip="マウスのボタンをクリックした時に再生するサウンドのUUIDす。" name="textFSClick">
<text tool_tip="マウスのボタンをクリックした時に再生するサウンドのUUIDを指定します。" name="textFSClick">
マウスボタンのクリック:
</text>
<button name="Prev_UISndClick" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndClick" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndClick"/>
<text tool_tip="マウスのボタンから手を離した時に再生するサウンドのUUIDす。" name="textFSClickRelease">
<text tool_tip="マウスのボタンから手を離した時に再生するサウンドのUUIDを指定します。" name="textFSClickRelease">
マウスボタンのリリース:
</text>
<button name="Prev_UISndClickRelease" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndClickRelease" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndClickRelease"/>
<text tool_tip="女性アバターがダメージを受けた時に再生するサウンドのUUIDす。" name="textFSHealthReductionF">
<text tool_tip="女性アバターがダメージを受けた時に再生するサウンドのUUIDを指定します。" name="textFSHealthReductionF">
女性のうめき声:
</text>
<button name="Prev_UISndHealthReductionF" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndHealthReductionF" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndHealthReductionF"/>
<text tool_tip="男性アバターがダメージを受けた時に再生するサウンドのUUIDす。" name="textFSHealthReductionM">
<text tool_tip="男性アバターがダメージを受けた時に再生するサウンドのUUIDを指定します。" name="textFSHealthReductionM">
男性のうめき声:
</text>
<button name="Prev_UISndHealthReductionM" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndHealthReductionM" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndHealthReductionM"/>
<text tool_tip="リンデンドル残高が減少した時に再生するサウンドのUUIDす。" name="textFSMoneyChangeDown">
<text tool_tip="リンデンドル残高が減少した時に再生するサウンドのUUIDを指定します。" name="textFSMoneyChangeDown">
リンデンドル残高減少:
</text>
<button name="Prev_UISndMoneyChangeDown" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndMoneyChangeDown" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndMoneyChangeDown"/>
<text tool_tip="リンデンドル残高が増加した時に再生するサウンドのUUIDす。" name="textFSMoneyChangeUp">
<text tool_tip="リンデンドル残高が増加した時に再生するサウンドのUUIDを指定します。" name="textFSMoneyChangeUp">
リンデンドル残高増加:
</text>
<button name="Prev_UISndMoneyChangeUp" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndMoneyChangeUp" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndMoneyChangeUp"/>
<text tool_tip="IMを受信した時に再生するサウンドのUUIDす。この設定は「チャット」>「通知」にある「IMを受信した時」と共通になっています。" name="textFSNewIncomingIMSession">
<text tool_tip="IMを受信した時に再生するサウンドのUUIDを指定します。この設定は「チャット」>「通知」にある「IMを受信した時」と共通になっています。" name="textFSNewIncomingIMSession">
IMを受信した時:
</text>
<button name="Prev_UISndNewIncomingIMSession" tool_tip="このサウンドをプレビューします。"/>
@@ -222,7 +222,7 @@
<combo_box.item label="フォーカスが当たってなければ音を鳴らす" name="3"/>
<combo_box.item label="通知音は鳴らさない" name="0"/>
</combo_box>
<text tool_tip="グループのIMを受信した時に再生するサウンドのUUIDす。この設定は「チャット」>「通知」にある「グループのIMを受信した時:」と共通になっています。" name="textFSNewGroupIncomingIMSession">
<text tool_tip="グループのIMを受信した時に再生するサウンドのUUIDを指定します。この設定は「チャット」>「通知」にある「グループのIMを受信した時:」と共通になっています。" name="textFSNewGroupIncomingIMSession">
グループIM受信した時:
</text>
<button name="Prev_UISndNewIncomingGroupIMSession" tool_tip="このサウンドをプレビューします。"/>
@@ -233,7 +233,7 @@
<combo_box.item label="フォーカスが当たってなければ音を鳴らす" name="3"/>
<combo_box.item label="通知音は鳴らさない" name="0"/>
</combo_box>
<text tool_tip="会話IMを受信した時に再生するサウンドのUUIDす。この設定は「チャット」>「通知」にある「会話IMを受信した時:」と共通になっています。" name="textFSNewConferenceIncomingIMSession">
<text tool_tip="会話IMを受信した時に再生するサウンドのUUIDを指定します。この設定は「チャット」>「通知」にある「会話IMを受信した時:」と共通になっています。" name="textFSNewConferenceIncomingIMSession">
会話IMを受信した時:
</text>
<button name="Prev_UISndNewIncomingConfIMSession" tool_tip="このサウンドをプレビューします。"/>
@@ -244,43 +244,43 @@
<combo_box.item label="フォーカスが当たってなければ音を鳴らす" name="3"/>
<combo_box.item label="通知音は鳴らさない" name="0"/>
</combo_box>
<text tool_tip="新しいIMセッションを開始した時に再生するサウンドのUUIDす。" name="textFSStartIM">
<text tool_tip="新しいIMセッションを開始した時に再生するサウンドのUUIDを指定します。" name="textFSStartIM">
IM新規開始:
</text>
<button name="Prev_UISndStartIM" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndStartIM" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndStartIM"/>
<text tool_tip="チャットでメンションされた時に再生するサウンドのUUIDす。" name="textChatMention">
<text tool_tip="チャットでメンションされた時に再生するサウンドのUUIDを指定します。" name="textChatMention">
チャットのメンション先:
</text>
<button name="Prev_UISndChatMention" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndChatMention" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndChatMention"/>
<text tool_tip="新しくオブジェクトを作成した時に再生するサウンドのUUIDす。" name="textFSObjectCreate">
<text tool_tip="新しくオブジェクトを作成した時に再生するサウンドのUUIDを指定します。" name="textFSObjectCreate">
オブジェクト作成:
</text>
<button name="Prev_UISndObjectCreate" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndObjectCreate" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndObjectCreate"/>
<text tool_tip="オブジェクトを削除した時に再生するサウンドのUUIDす。" name="textFSObjectDelete">
<text tool_tip="オブジェクトを削除した時に再生するサウンドのUUIDを指定します。" name="textFSObjectDelete">
オブジェクト削除:
</text>
<button name="Prev_UISndObjectDelete" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndObjectDelete" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndObjectDelete"/>
<text tool_tip="オブジェクトをRezした時に再生するサウンドのUUIDす。" name="textFSObjectRezIn">
<text tool_tip="オブジェクトをRezした時に再生するサウンドのUUIDを指定します。" name="textFSObjectRezIn">
オブジェクトRez
</text>
<button name="Prev_UISndObjectRezIn" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndObjectRezIn" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndObjectRezIn"/>
<text tool_tip="オブジェクトをDeRezした時に再生するサウンドのUUIDす。" name="textFSObjectRezOut">
<text tool_tip="オブジェクトをDeRezした時に再生するサウンドのUUIDを指定します。" name="textFSObjectRezOut">
オブジェクトのDeRez
</text>
<button name="Prev_UISndObjectRezOut" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndObjectRezOut" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndObjectRezOut"/>
<text tool_tip="スナップショットを撮った時に再生するサウンドのUUIDす。この設定は「アドバンス」メニューの「シャッター音とアニメーションなしでスナップショットをディスクに保存する」と共通になっています。" name="textFSSnapshot">
<text tool_tip="スナップショットを撮った時に再生するサウンドのUUIDを指定します。この設定は「高度な操作」メニューの「シャッター音を出さずにスナップショットをディスクに保存」と共通になっています。" name="textFSSnapshot">
スナップショットを撮る:
</text>
<button name="Prev_UISndSnapshot" tool_tip="このサウンドをプレビューします。"/>
@@ -299,109 +299,115 @@
ここから(サウンドのUUIDを指定することで)デフォルトのインターフェイスサウンドを変更したり、
有効、無効にすることができます。初期設定値を確認するにはマウスをUUIDフィールドの上に乗せて下さい。
</text>
<text tool_tip="テレポートした時に再生するサウンドのUUIDす。この設定は「移動と表示」>「テレポート」の「テレポートサウンドを鳴らす」と共通になっています。" name="textFSTeleportOut">
<text tool_tip="テレポートした時に再生するサウンドのUUIDを指定します。この設定は「移動と表示」>「テレポート」の「テレポートサウンドを鳴らす」と共通になっています。" name="textFSTeleportOut">
テレポート:
</text>
<button name="Prev_UISndTeleportOut" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndTeleportOut" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndTeleportOut"/>
<text tool_tip="パイメニューを表示した時に再生するサウンドのUUIDす。" name="textFSPieMenuAppear">
<text tool_tip="パイメニューを表示した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuAppear">
パイメニューを表示したとき:
</text>
<button name="Prev_UISndPieMenuAppear" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuAppear" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuAppear"/>
<text tool_tip="パイメニューが消える時に再生するサウンドのUUIDす。" name="textFSPieMenuHide">
<text tool_tip="パイメニューが消える時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuHide">
パイメニューを消した時:
</text>
<button name="Prev_UISndPieMenuHide" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuHide" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuHide"/>
<text tool_tip="パイメニューの1番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight0">
<text tool_tip="パイメニューの1番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight0">
パイメニュー選択1:
</text>
<button name="Prev_UISndPieMenuSliceHighlight0" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight0" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight0"/>
<text tool_tip="パイメニューの2番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight1">
<text tool_tip="パイメニューの2番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight1">
パイメニュー選択2:
</text>
<button name="Prev_UISndPieMenuSliceHighlight1" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight1" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight1"/>
<text tool_tip="パイメニューの3番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight2">
<text tool_tip="パイメニューの3番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight2">
パイメニュー選択3:
</text>
<button name="Prev_UISndPieMenuSliceHighlight2" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight2" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight2"/>
<text tool_tip="パイメニューの4番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight3">
<text tool_tip="パイメニューの4番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight3">
パイメニュー選択4:
</text>
<button name="Prev_UISndPieMenuSliceHighlight3" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight3" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight3"/>
<text tool_tip="パイメニューの5番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight4">
<text tool_tip="パイメニューの5番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight4">
パイメニュー選択5:
</text>
<button name="Prev_UISndPieMenuSliceHighlight4" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight4" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight4"/>
<text tool_tip="パイメニューの6番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight5">
<text tool_tip="パイメニューの6番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight5">
パイメニュー選択6:
</text>
<button name="Prev_UISndPieMenuSliceHighlight5" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight5" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight5"/>
<text tool_tip="パイメニューの7番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight6">
<text tool_tip="パイメニューの7番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight6">
パイメニュー選択7:
</text>
<button name="Prev_UISndPieMenuSliceHighlight6" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight6" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight6"/>
<text tool_tip="パイメニューの8番目のアイテムを選択した時に再生するサウンドのUUIDす。" name="textFSPieMenuSliceHighlight7">
<text tool_tip="パイメニューの8番目のアイテムを選択した時に再生するサウンドのUUIDを指定します。" name="textFSPieMenuSliceHighlight7">
パイメニュー選択8:
</text>
<button name="Prev_UISndPieMenuSliceHighlight7" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndPieMenuSliceHighlight7" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight7"/>
<text tool_tip="チャットの入力を開始した時に再生するサウンドのUUIDす。この設定は「チャット」>「タイピング」の「人が会話している時にタイピング音が聞こえるようにする」と共通になっています。" name="textFSTyping">
<text tool_tip="チャットの入力を開始した時に再生するサウンドのUUIDを指定します。この設定は「チャット」>「タイピング」の「人が会話している時にタイピング音が聞こえるようにする」と共通になっています。" name="textFSTyping">
チャット入力:
</text>
<button name="Prev_UISndTyping" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndTyping" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="FSPlayTypingSoundCheckBox"/>
<text tool_tip="ウィンドウを閉じる時に再生するサウンドのUUIDす。" name="textFSWindowClose">
<text tool_tip="ウィンドウを閉じる時に再生するサウンドのUUIDを指定します。" name="textFSWindowClose">
ウィンドウを閉じる:
</text>
<button name="Prev_UISndWindowClose" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndWindowClose" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndWindowClose"/>
<text tool_tip="ウィンドウを開く時に再生するサウンドのUUIDす。" name="textFSWindowOpen">
ウィンドウを開
<text tool_tip="ウィンドウを開く時に再生するサウンドのUUIDを指定します。" name="textFSWindowOpen">
ウィンドウを開いたとき
</text>
<button name="Prev_UISndWindowOpen" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndWindowOpen" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndWindowOpen"/>
<text tool_tip="スクリプトダイアログ開く時に再生するサウンドのUUIDす。" name="textFSScriptFloaterOpen">
スクリプトダイアログ:
<text tool_tip="スクリプトダイアログ開く時に再生するサウンドのUUIDを指定します。" name="textFSScriptFloaterOpen">
スクリプトダイアログが開いたとき
</text>
<button name="Prev_UISndScriptFloaterOpen" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndScriptFloaterOpen" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndScriptFloaterOpen"/>
<text tool_tip="フレンドがオンラインになった時に再生るサウンドのUUIDす。" name="textFSFriendOnline">
<text tool_tip="スクリプトがダイアログウィンドウを閉じるときに再生されるサウンドのUUIDを指定します。" name="textFSScriptFloaterClose">
スクリプトダイアログを閉じたとき:
</text>
<button name="Prev_UISndScriptFloaterClose" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndScriptFloaterClose" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndScriptFloaterClose" />
<text tool_tip="フレンドがオンラインになった時に再生するサウンドのUUIDを指定します。" name="textFSFriendOnline">
フレンドがオンラインになった:
</text>
<button name="Prev_UISndFriendOnline" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndFriendOnline" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndFriendOnline"/>
<text tool_tip="フレンドがオフラインになった時に再生するサウンドのUUIDす。" name="textFSFriendOffline">
<text tool_tip="フレンドがオフラインになった時に再生するサウンドのUUIDを指定します。" name="textFSFriendOffline">
フレンドがオフラインになった:
</text>
<button name="Prev_UISndFriendOffline" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndFriendOffline" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndFriendOffline"/>
<text tool_tip="フレンドの申請があった時に再生するサウンドのUUIDす。" name="textFSFriendshipOffer">
<text tool_tip="フレンドの申請があった時に再生するサウンドのUUIDを指定します。" name="textFSFriendshipOffer">
フレンド申請:
</text>
<button name="Prev_UISndFriendshipOffer" tool_tip="このサウンドをプレビューします。"/>
@@ -414,73 +420,73 @@
ここから(サウンドのUUIDを指定することで)デフォルトのインターフェイスサウンドを変更したり、
有効、無効にすることができます。初期設定値を確認するにはマウスをUUIDフィールドの上に乗せて下さい。
</text>
<text tool_tip="テレポートで呼ばれた時に再生するサウンドのUUIDす。" name="textFSTeleportOffer">
<text tool_tip="テレポートで呼ばれた時に再生するサウンドのUUIDを指定します。" name="textFSTeleportOffer">
テレポートのオファーを受けた:
</text>
<button name="Prev_UISndTeleportOffer" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndTeleportOffer" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndTeleportOffer"/>
<text tool_tip="インベントリに物が送られて来た時に再生するサウンドのUUIDす。" name="textFSInventoryOffer">
<text tool_tip="インベントリに物が送られて来た時に再生するサウンドのUUIDを指定します。" name="textFSInventoryOffer">
インベントリに受け取った:
</text>
<button name="Prev_UISndInventoryOffer" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndInventoryOffer" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndInventoryOffer"/>
<text tool_tip="ボイスコールを受信した時に再生するサウンドのUUIDす。" name="textFSIncomingVoiceCall">
<text tool_tip="ボイスコールを受信した時に再生するサウンドのUUIDを指定します。" name="textFSIncomingVoiceCall">
ボイスコールを受けた:
</text>
<button name="Prev_UISndIncomingVoiceCall" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndIncomingVoiceCall" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndIncomingVoiceCall"/>
<text tool_tip="グループ招待があった時に再生するサウンドのUUIDす。" name="textFSGroupInvitation">
<text tool_tip="グループ招待があった時に再生するサウンドのUUIDを指定します。" name="textFSGroupInvitation">
グループに招待された:
</text>
<button name="Prev_UISndGroupInvitation" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndGroupInvitation" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndGroupInvitation"/>
<text tool_tip="グループ通知を受信した時に再生するサウンドのUUIDす。" name="textFSGroupNotice">
<text tool_tip="グループ通知を受信した時に再生するサウンドのUUIDを指定します。" name="textFSGroupNotice">
グループ通知を受け取った:
</text>
<button name="Prev_UISndGroupNotice" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndGroupNotice" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndGroupNotice"/>
<text tool_tip="新しい体験の通知を受信した時に再生するサウンドのUUIDす。" name="textFSQuestionExperience">
<text tool_tip="新しい体験の通知を受信した時に再生するサウンドのUUIDを指定します。" name="textFSQuestionExperience">
新しい体験:
</text>
<button name="Prev_UISndQuestionExperience" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndQuestionExperience" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndQuestionExperience"/>
<text tool_tip="無効な操作を行った時に再生するサウンドのUUIDす。" name="textFSInvalidOp">
<text tool_tip="無効な操作を行った時に再生するサウンドのUUIDを指定します。" name="textFSInvalidOp">
無効な操作:
</text>
<button name="Prev_UISndInvalidOp" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndInvalidOp" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndInvalidOp"/>
<text tool_tip="移動ロックを有効にした時に再生するサウンドのUUIDす。" name="textFSMovelockToggle">
<text tool_tip="移動ロックを有効にした時に再生するサウンドのUUIDを指定します。" name="textFSMovelockToggle">
移動ロック:
</text>
<button name="Prev_UISndMovelockToggle" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndMovelockToggle" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndMovelockToggle"/>
<text tool_tip="追跡ビーコンが有効になっている時に再生されるサウンドのUUIDす。アバターが目的地に近付くほど再生周期が短くなります。" name="textFSTrackerBeacon">
<text tool_tip="追跡ビーコンが有効になっている時に再生されるサウンドのUUIDを指定します。アバターが目的地に近付くほど再生周期が短くなります。" name="textFSTrackerBeacon">
追跡ビーコン:
</text>
<button name="Prev_UISndTrackerBeacon" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndTrackerBeacon" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndTrackerBeacon"/>
<text tool_tip="マイクがオンまたはオフに切り替わったときに再生されるサウンドのUUIDす。" name="textFSMicToggle">
<text tool_tip="マイクがオンまたはオフに切り替わったときに再生されるサウンドのUUIDを指定します。" name="textFSMicToggle">
マイクロフォン切り替え:
</text>
<button name="Prev_UISndMicToggle" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndMicToggle" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndMicToggle"/>
<text tool_tip="SIM再起動の警告が表示される時に再生するサウンドのUUIDす。" name="textFSRestart">
<text tool_tip="SIM再起動の警告が表示される時に再生するサウンドのUUIDを指定します。" name="textFSRestart">
SIMの再起動
</text>
<button name="Prev_UISndRestart" tool_tip="このサウンドをプレビューします。"/>
<button name="Def_UISndRestart" tool_tip="デフォルトのUUIDにリセットします。"/>
<check_box label="このサウンドを再生" name="PlayModeUISndRestart"/>
<text tool_tip="SIM再起動の警告が表示される時に再生するサウンドのUUIDす。(OpenSimの場合)" name="textFSRestartOpenSim">
<text tool_tip="SIM再起動の警告が表示される時に再生するサウンドのUUIDを指定します。(OpenSimの場合)" name="textFSRestartOpenSim">
SIM再起動(OpenSim):
</text>
<button name="Prev_UISndRestartOpenSim" tool_tip="このサウンドをプレビューします。"/>
@@ -6600,4 +6600,7 @@ Rez時間:[OBJECT_REZ_TIME]
<string name="Very High">高品位</string>
<string name="Ultra">ウルトラ</string>
<string name="Maximum">最大</string>
<string name="OmnifilterReplacement">包括フィルタ置き換え:[REPLACEMENT]</string>
</strings>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="Model Preview" title="Przesyłanie modelu">
<string name="no_havok">przesyłanie meszy z fizyką</string>
<string name="status_parse_error">Błąd: Problem z parsowaniem modelu, zobacz log.</string>
<string name="status_bind_shape_orientation">Uwaga: Macierz powiązań kształtu nie jest w standardowej orientacji X-forward.</string>
<string name="status_material_mismatch">Błąd: Materiał nie jest podzbiorem modelu referencyjnego.</string>
@@ -24,7 +23,6 @@
<string name="phys_status_vertex_limit_exceeded">Pewne fizyczne powłoki przekroczyły limit wierzchołków (256); Spróbuj 'analizy'.</string>
<string name="phys_status_hull_limit_exceeded">Pewne modele przekroczyły limit powłok (256); Spróbuj 'upraszczania'.</string>
<string name="phys_status_degenerate_triangles">Mesz fizyki zbyt gęsty lub ma zdegenerowane trójkąty. Użyj Analizuj/Uprość.</string>
<string name="phys_status_no_havok">Ta wersja nie zawiera wsparcia Havoka i nie jest zalecana dla przesyłania fizyki do Second Life. Wyniki mogą być nieprzewidywalne.</string>
<string name="phys_status_too_thin">Jeden z wymiarów ma mniej niż 0.5 m, tylko kształty fizyki oparte na kadłubie (po analizie) zadziałają poprawnie.</string>
<string name="phys_status_unknown_error">Wykryto nierozpoznany błąd.</string>
<string name="layer_all">Wszystko</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="floater_pathfinding_console" title="Podgląd odnajdywania ścieżek">
<floater.string name="no_havok">
Podgląd odnajdywania ścieżek
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Nie można znaleźć implementacji biblioteki szukania ścieżek.
</floater.string>
@@ -5611,4 +5611,8 @@ Komunikat błędu:
Komunikat błędu:
[ERROR_MESSAGE] ([ERROR_CODE])
</notification>
<notification name="ChatHistoryIsMissing">
Brak pliku z zapisem rozmowy. Albo nie istnieją żadne logi dla tej rozmowy, albo zapisywanie nie jest włączone.
Zapisywanie rozmów możesz włączyć w Preferencje &gt; Prywatność &gt; Logi rozmów.
</notification>
</notifications>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Visualização/teste do pathfinding">
<floater.string name="no_havok">
Visualização/teste do pathfinding
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Impossível encontrar a implementação de biblioteca de pathing.
</floater.string>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="Загрузка модели">
<string name="no_havok">загрузка меша с физикой</string>
<string name="status_parse_error">Ошибка: Проблема при анализе файла DAE – см. подробности в журнале.</string>
<string name="status_bind_shape_orientation">Предупреждение: форма матрицы стандартно не ориентирована по координате X.</string>
<string name="status_material_mismatch">Ошибка: Материал модели не входит в эталонную модель.</string>
@@ -24,7 +23,6 @@
<string name="phys_status_vertex_limit_exceeded">Для некоторых физических оболочек превышен лимит вершин(256); попробуйте другой 'Метод Анализа'.</string>
<string name="phys_status_hull_limit_exceeded">Некоторые модели превышают предел оболочек (256); попробуйте 'Упрощение'.</string>
<string name="phys_status_degenerate_triangles">Физика меша слишком плотная или содержит вырожденные треугольники. Используйте Анализ/Упрощение для решения.</string>
<string name="phys_status_no_havok">Эта версия не поддерживает Havok и не рекомендуется для загрузки физики в Second Life. Результаты могут быть непредсказуемыми.</string>
<string name="phys_status_too_thin">Один или несколько размеров меньше 0,5м, корректно будут работать только физические формы, основанные на корпусе (проанализированные).</string>
<string name="phys_status_unknown_error">Обнаружена нераспознанная ошибка.</string>
<string name="layer_all">Все</string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Просмотр/тестирование поиска пути">
<floater.string name="no_havok">
Просмотр/тестирование поиска пути
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Не удалось найти реализацию библиотеки поиска пути
</floater.string>
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="Yol bulma görüntüleme / test">
<floater.string name="no_havok">
Yol bulma görüntüleme / test
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
Yol bulma kütüphanesi uygulaması bulunamıyor.
</floater.string>
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Model Preview" title="上傳模型">
<string name="no_havok">
物理網格模型上傳
</string>
<string name="status_parse_error">
錯誤:剖析模型時出錯,詳見記錄檔案。
</string>
@@ -72,9 +69,6 @@
<string name="phys_status_degenerate_triangles">
物理網格包含退化三角形。嘗試「分析/簡化」。
</string>
<string name="phys_status_no_havok">
此版本不包含Havok支援,不推薦用於上傳Second Life的物理內容。可能會出現不可預測的結果!
</string>
<string name="phys_status_too_thin">
一個或多個次元小於0.5公尺 - 只有基於凸包的(分析過的)物理形狀才會正確工作。
</string>
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_pathfinding_console" title="尋路檢視 / 測試">
<floater.string name="no_havok">
路徑尋路導航網格生成失敗
</floater.string>
<floater.string name="no_havok">
尋路檢視 / 測試
</floater.string>
<floater.string name="navmesh_viewer_status_library_not_implemented">
找不到尋路函式庫的實作。
</floater.string>
@@ -35,7 +35,7 @@
手勢
</text>
<text name="label_12" tool_tip="設定建立服裝或身體部位時的預設權限">
可穿裝扮
服装
</text>
<text name="label_13" tool_tip="設定建立環境設定時的預設權限">
環境設定
@@ -279,15 +279,15 @@
</panel>
<panel label="物件" name="Object">
<panel.string name="paste_position">
貼位置
位置
[VALUE]
</panel.string>
<panel.string name="paste_size">
黏貼大小
貼上尺寸
[VALUE]
</panel.string>
<panel.string name="paste_rotation">
貼旋轉
旋轉
[VALUE]
</panel.string>
<check_box label="鎖定" name="checkbox locked" tool_tip="避免物件被移動或刪除。 這在建造過程中非常有用,可避免意外的編輯更動。" />
@@ -1281,11 +1281,11 @@
錯誤:未定義的樹種:[SPECIES]
</notification>
<notification name="CannotSaveWearableOutOfSpace">
無法將「[NAME]」儲存為可穿裝扮檔案。 你需要空出一些電腦空間,再試著儲存可穿裝扮
無法將「[NAME]」儲存為服装檔案。你需要空出一些電腦空間,再試著儲存服装
</notification>
<notification name="CannotSaveToAssetStore">
無法將「[NAME]」儲存到中央資源儲庫。
這異常狀況通常只是暫時的。 請稍待幾分鐘後,再自訂並儲存可穿裝扮
這異常狀況通常只是暫時的。請稍待幾分鐘後,再自訂並儲存服装
</notification>
<notification name="OutOfDiskSpace">
系統磁碟空間不足。您需要釋放電腦上的一些空間或清理快取。
@@ -1369,8 +1369,8 @@
<button name="Cancel" text="取消"/>
</form>
</notification>
<notification label="儲存可穿裝扮" name="SaveWearableAs">
儲存物件到我的庫存
<notification label="儲存服装" name="SaveWearableAs">
將項目儲存到我的庫存
<form name="form">
<input name="message">
[DESC](NEW)
@@ -3633,7 +3633,7 @@ URL[AUDIOURL]
</form>
</notification>
<notification name="ScriptQuestionCaution">
警告:物件&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;要求全權存取你的林登幣帳戶。 你如果允許存取帳戶,它將可在任何時候從你帳戶取走資金,或完全加以清空,或定期取走部分資金,且不會發出警告。
警告:物件&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;要求全權存取你的林登幣帳戶。 你如果允許存取帳戶,它將可在任何時候從你帳戶取走資金,或完全加以清空,或定期取走部分資金,且不會發出警告。
如果你不完全瞭解它為何要求存取你的帳戶,請勿允許。
<form name="form">
@@ -5877,4 +5877,9 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
錯誤詳情:
[ERROR_MESSAGE] ([ERROR_CODE])
</notification>
</notifications>
<notification name="ChatHistoryIsMissing">
聊天記錄檔案缺失。目前會話可能尚未產生記錄,或未啟用儲存功能。
請前往偏好設定 &gt; 隱私 &gt; 記錄與聊天內容中啟用聊天內容儲存功能
<usetemplate name="okbutton" yestext="確定"/>
</notification>
</notifications>
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="wearable_item">
<button name="btn_delete" tool_tip="從裝扮刪除" />
<button name="btn_delete" tool_tip="從裝扮刪除" />
<panel name="btn_lock" tool_tip="你沒有編輯權" />
<panel name="btn_edit_panel">
<button name="btn_edit" tool_tip="編輯這可穿裝扮" />
<button name="btn_edit" tool_tip="編輯這件服装" />
</panel>
</panel>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="穿裝扮" name="panel_edit_wearable">
<panel label="穿裝扮" name="panel_edit_wearable">
<string name="edit_shape_title">
身形編輯中
</string>
@@ -4,7 +4,7 @@
未穿戴任何附件。
</panel.string>
<accordion name="wearables_accordion">
<accordion_tab name="tab_wearables" title="穿裝扮" />
<accordion_tab name="tab_wearables" title="穿裝扮" />
<accordion_tab name="tab_temp_attachments" title="臨時附件" />
</accordion>
<panel name="bottom_panel">
@@ -25,9 +25,9 @@
<check_box label="在庫存中的物件轉讓給其他化身時建立粒子效果" name="FSCreateGiveInventoryParticleEffect" />
<button label="管理已封鎖/靜音的內容" name="block_list" />
</panel>
<panel label="記錄與記錄" name="tab-logging">
<panel label="記錄與聊天內容" name="tab-logging">
<text name="logging_label">儲存:</text>
<combo_box tool_tip="記錄(聊天歷史記錄):您和另一個人之間的所有聊天列表。聊天內容:當前螢幕上顯示的文字。" name="conversation_log_combo">
<combo_box tool_tip="記錄(聊天歷史記錄):您和另一個人之間的所有聊天歷史。聊天內容:當前螢幕上顯示的文字。" name="conversation_log_combo">
<item name="log_and_transcripts" label="記錄和聊天內容" />
<item name="log_only" label="僅記錄" />
<item name="no_log_or_transcript" label="無記錄或聊天內容" />
@@ -50,7 +50,7 @@
<button label="設定" width="55" label_selected="設定" name="set_sound_cache" />
<button label="重設" width="75" label_selected="重設" name="reset_sound_cache" />
<check_box label="退出時不刪除解壓的 DSF(音訊)快取" tool_tip="如果啟用,檢視器將在退出時不刪除解壓的快取聲音,從而實作更快的播放。 請注意:啟用此選項將快速填滿您的快取,並且不會受到定義的配額限制。這可能導致磁碟使用過量。預設情況下未啟用。" name="keep_unpacked_cache" />
<text name="log_path_desc">聊天記錄和記錄路徑:</text>
<text name="log_path_desc">聊天記錄和內容的路徑:</text>
<button label="打開" label_selected="打開" name="open_log_path_button-panelsetup" />
<button label="設定" label_selected="設定" name="log_path_button-panelsetup" />
<button label="重設" label_selected="重設" name="reset_logpath" />
@@ -5329,7 +5329,7 @@ support@secondlife.com.
新身體物理
</string>
<string name="Invalid Wearable">
無效的可穿裝扮
無效的服装
</string>
<string name="New Gesture">
新手勢
+1 -1
View File
@@ -42,7 +42,7 @@ public:
protected:
void initSingleton() override;
void checkMetadata(const LLSD& metadata);
void sendStreamTitleToChat(std::string_view Title);
void sendStreamTitleToChat(std::string_view title);
boost::signals2::connection mMetadataUpdateConnection{};
};
+6 -10
View File
@@ -37,21 +37,17 @@
UtilityBar::UtilityBar() :
LLSingleton<UtilityBar>(),
LLEventTimer(0.5f),
mAOInterfaceButton(NULL),
mVolumeControlsInterfaceButton(NULL),
mParcelMediaPlayButton(NULL),
mParcelStreamPlayButton(NULL),
mTalkButton(NULL),
mPTTButton(NULL)
mAOInterfaceButton(nullptr),
mVolumeControlsInterfaceButton(nullptr),
mParcelMediaPlayButton(nullptr),
mParcelStreamPlayButton(nullptr),
mTalkButton(nullptr),
mPTTButton(nullptr)
{
// Tried to do this cleanly with callbacks and controls, but ran into dead ends on every approach.
// This helper class works, but I am not at all satisfied with it. -Zi
}
UtilityBar::~UtilityBar()
{
}
void UtilityBar::init()
{
LLView* rootView = LLUI::getInstance()->getRootView();
+16 -18
View File
@@ -30,29 +30,27 @@
class LLButton;
class UtilityBar
: public LLSingleton<UtilityBar>,
public LLEventTimer
class UtilityBar : public LLSingleton<UtilityBar>, public LLEventTimer
{
LLSINGLETON(UtilityBar);
~UtilityBar();
~UtilityBar() = default;
public:
void init();
virtual bool tick() override;
void setAOInterfaceButtonExpanded(bool expanded);
void setVolumeControlsButtonExpanded(bool expanded);
public:
void init();
bool tick() override;
void setAOInterfaceButtonExpanded(bool expanded);
void setVolumeControlsButtonExpanded(bool expanded);
protected:
void onParcelStreamClicked();
void onParcelMediaClicked();
protected:
void onParcelStreamClicked();
void onParcelMediaClicked();
LLButton* mParcelStreamPlayButton;
LLButton* mParcelMediaPlayButton;
LLButton* mTalkButton;
LLButton* mAOInterfaceButton;
LLButton* mVolumeControlsInterfaceButton;
LLButton* mPTTButton;
LLButton* mParcelStreamPlayButton;
LLButton* mParcelMediaPlayButton;
LLButton* mTalkButton;
LLButton* mAOInterfaceButton;
LLButton* mVolumeControlsInterfaceButton;
LLButton* mPTTButton;
};
#endif // UTILITYBAR_H