Merge Firestorm LGPL
commit
39ec459b5f
|
|
@ -407,7 +407,7 @@ void allowDirectMarkedTextInput(bool allow, GLViewRef glView)
|
|||
|
||||
NSWindowRef getMainAppWindow()
|
||||
{
|
||||
LLNSWindow *winRef = [(LLAppDelegate*)[[LLNSApplication sharedApplication] delegate] window];
|
||||
LLNSWindow *winRef = [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] window];
|
||||
|
||||
[winRef setAcceptsMouseMovedEvents:TRUE];
|
||||
return winRef;
|
||||
|
|
@ -420,7 +420,7 @@ void makeFirstResponder(NSWindowRef window, GLViewRef view)
|
|||
|
||||
void requestUserAttention()
|
||||
{
|
||||
[[LLNSApplication sharedApplication] requestUserAttention:NSInformationalRequest];
|
||||
[[NSApplication sharedApplication] requestUserAttention:NSInformationalRequest];
|
||||
}
|
||||
|
||||
long showAlert(std::string text, std::string title, int type)
|
||||
|
|
@ -470,7 +470,7 @@ long showAlert(std::string text, std::string title, int type)
|
|||
/*
|
||||
GLViewRef getGLView()
|
||||
{
|
||||
return [(LLAppDelegate*)[[LLNSApplication sharedApplication] delegate] glview];
|
||||
return [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] glview];
|
||||
}
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ void FloaterAO::updateSetParameters()
|
|||
mOverrideSitsCheckBoxSmall->setValue(mSelectedSet->getSitOverride());
|
||||
mSmartCheckBox->setValue(mSelectedSet->getSmart());
|
||||
mDisableMouselookCheckBox->setValue(mSelectedSet->getMouselookDisable());
|
||||
BOOL isDefault = (mSelectedSet == AOEngine::instance().getDefaultSet()) ? TRUE : FALSE;
|
||||
BOOL isDefault = (mSelectedSet == AOEngine::instance().getDefaultSet());
|
||||
mDefaultCheckBox->setValue(isDefault);
|
||||
mDefaultCheckBox->setEnabled(!isDefault);
|
||||
updateSmart();
|
||||
|
|
@ -221,6 +221,7 @@ BOOL FloaterAO::postBuild()
|
|||
mOverrideSitsCheckBoxSmall = mSmallInterfacePanel->getChild<LLCheckBoxCtrl>("ao_sit_override_small");
|
||||
|
||||
mSetSelector->setCommitCallback(boost::bind(&FloaterAO::onSelectSet, this));
|
||||
mSetSelector->setFocusLostCallback(boost::bind(&FloaterAO::onSelectSet, this));
|
||||
mActivateSetButton->setCommitCallback(boost::bind(&FloaterAO::onClickActivate, this));
|
||||
mAddButton->setCommitCallback(boost::bind(&FloaterAO::onClickAdd, this));
|
||||
mRemoveButton->setCommitCallback(boost::bind(&FloaterAO::onClickRemove, this));
|
||||
|
|
@ -281,7 +282,7 @@ void FloaterAO::enableSetControls(BOOL yes)
|
|||
mSetSelectorSmall->setEnabled(yes);
|
||||
mActivateSetButton->setEnabled(yes);
|
||||
mRemoveButton->setEnabled(yes);
|
||||
mDefaultCheckBox->setEnabled(yes);
|
||||
mDefaultCheckBox->setEnabled(yes && (mSelectedSet != AOEngine::instance().getDefaultSet()));
|
||||
mOverrideSitsCheckBox->setEnabled(yes);
|
||||
mOverrideSitsCheckBoxSmall->setEnabled(yes);
|
||||
mDisableMouselookCheckBox->setEnabled(yes);
|
||||
|
|
|
|||
|
|
@ -189,34 +189,50 @@ void AOEngine::setLastOverriddenMotion(const LLUUID& motion)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL AOEngine::foreignAnimations(const LLUUID& seat)
|
||||
BOOL AOEngine::foreignAnimations()
|
||||
{
|
||||
// checking foreign animations only makes sense when smart sit is enabled
|
||||
if (!mCurrentSet->getSmart())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// get the seat the avatar is sitting on
|
||||
const LLViewerObject* agentRoot = dynamic_cast<LLViewerObject*>(gAgentAvatarp->getRoot());
|
||||
if (!agentRoot)
|
||||
{
|
||||
// this should not happen, ever
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LLUUID seat = agentRoot->getID();
|
||||
if (seat == gAgentID)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Not checking for foreign animation when not sitting." << LL_ENDL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LL_DEBUGS("AOEngine") << "Checking for foreign animation on seat " << seat << LL_ENDL;
|
||||
|
||||
for (LLVOAvatar::AnimSourceIterator sourceIterator = gAgentAvatarp->mAnimationSources.begin();
|
||||
sourceIterator != gAgentAvatarp->mAnimationSources.end(); ++sourceIterator)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Source " << sourceIterator->first << " runs animation " << sourceIterator->second << LL_ENDL;
|
||||
|
||||
// skip animations run by the avatar itself
|
||||
if (sourceIterator->first != gAgentID)
|
||||
{
|
||||
// special case when the AO gets disabled while sitting
|
||||
if (seat.isNull())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// find the source object where the animation came from
|
||||
LLViewerObject* source=gObjectList.findObject(sourceIterator->first);
|
||||
|
||||
// proceed if it's not an attachment
|
||||
if(!source->isAttachment())
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Source " << sourceIterator->first << " is running animation " << sourceIterator->second << LL_ENDL;
|
||||
|
||||
// get the source's root prim
|
||||
LLViewerObject* sourceRoot=dynamic_cast<LLViewerObject*>(source->getRoot());
|
||||
|
||||
// if the root prim is the same as the animation source, report back as TRUE
|
||||
if (sourceRoot && source->getID() == seat)
|
||||
if (sourceRoot && sourceRoot->getID() == seat)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "foreign animation " << sourceIterator->second << " found on seat." << LL_ENDL;
|
||||
return TRUE;
|
||||
|
|
@ -227,7 +243,8 @@ BOOL AOEngine::foreignAnimations(const LLUUID& seat)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
const LLUUID& AOEngine::mapSwimming(const LLUUID& motion) const
|
||||
// map motion to underwater state, return nullptr if not applicable
|
||||
AOSet::AOState* AOEngine::mapSwimming(const LLUUID& motion) const
|
||||
{
|
||||
S32 stateNum;
|
||||
|
||||
|
|
@ -249,29 +266,91 @@ const LLUUID& AOEngine::mapSwimming(const LLUUID& motion) const
|
|||
}
|
||||
else
|
||||
{
|
||||
return LLUUID::null;
|
||||
// motion not applicable for underwater mapping
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AOSet::AOState* state = mCurrentSet->getState(stateNum);
|
||||
return mCurrentSet->getAnimationForState(state);
|
||||
return mCurrentSet->getState(stateNum);
|
||||
}
|
||||
|
||||
// switch between swimming and flying on transition in and out of Linden region water
|
||||
void AOEngine::checkBelowWater(BOOL yes)
|
||||
{
|
||||
// there was no transition, do nothing
|
||||
if (mUnderWater == yes)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// only restart underwater/above water motion if the overridden motion is the one currently playing
|
||||
if (mLastMotion != mLastOverriddenMotion)
|
||||
// only applies to motions that actually change underwater and have animations inside
|
||||
AOSet::AOState* mapped = mapSwimming(mLastMotion);
|
||||
if (!mapped || mapped->mAnimations.empty())
|
||||
{
|
||||
// set underwater status but do nothing else
|
||||
mUnderWater = yes;
|
||||
return;
|
||||
}
|
||||
|
||||
gAgent.sendAnimationRequest(override(mLastOverriddenMotion, FALSE), ANIM_REQUEST_STOP);
|
||||
// find animation id to stop when transitioning
|
||||
LLUUID id = override(mLastMotion, FALSE);
|
||||
if (id.isNull())
|
||||
{
|
||||
// no animation in overrider for this state, use Linden Lab motion
|
||||
id = mLastMotion;
|
||||
}
|
||||
|
||||
// stop currently running animation
|
||||
gAgent.sendAnimationRequest(id, ANIM_REQUEST_STOP);
|
||||
|
||||
if (!mUnderWater)
|
||||
{
|
||||
// remember which animation we stopped while going under water, to catch the stop
|
||||
// request later in the overrider - this prevents the overrider from triggering itself
|
||||
// after the region comes back with the stop request for Linden Lab motion ids
|
||||
mTransitionId = id;
|
||||
}
|
||||
|
||||
// set requested underwater status for overrider
|
||||
mUnderWater = yes;
|
||||
gAgent.sendAnimationRequest(override(mLastOverriddenMotion, TRUE), ANIM_REQUEST_START);
|
||||
|
||||
// find animation id to start when transitioning
|
||||
id = override(mLastMotion, TRUE);
|
||||
if (id.isNull())
|
||||
{
|
||||
// no animation in overrider for this state, use Linden Lab motion
|
||||
id = mLastMotion;
|
||||
}
|
||||
|
||||
// start new animation
|
||||
gAgent.sendAnimationRequest(id, ANIM_REQUEST_START);
|
||||
}
|
||||
|
||||
// find the correct animation state for the requested motion, mapping flying to
|
||||
// swimming where necessary
|
||||
AOSet::AOState* AOEngine::getStateForMotion(const LLUUID& motion) const
|
||||
{
|
||||
// get default state for this motion
|
||||
AOSet::AOState* defaultState = mCurrentSet->getStateByRemapID(motion);
|
||||
if (!mUnderWater)
|
||||
{
|
||||
return defaultState;
|
||||
}
|
||||
|
||||
// get state for underwater motion
|
||||
AOSet::AOState* mapped = mapSwimming(motion);
|
||||
if (!mapped)
|
||||
{
|
||||
// not applicable for underwater motion, so use default state
|
||||
return defaultState;
|
||||
}
|
||||
|
||||
// check if the underwater state has any animations to play
|
||||
if (mapped->mAnimations.empty())
|
||||
{
|
||||
// no animations in underwater state, return default
|
||||
return defaultState;
|
||||
}
|
||||
return mapped;
|
||||
}
|
||||
|
||||
void AOEngine::enable_stands(BOOL yes)
|
||||
|
|
@ -300,8 +379,8 @@ void AOEngine::enable(BOOL yes)
|
|||
{
|
||||
LL_DEBUGS("AOEngine") << "Enabling animation state " << state->mName << LL_ENDL;
|
||||
|
||||
// do not stop underlying ground sit when re-enabling the AO
|
||||
if (mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND_CONSTRAINED)
|
||||
// do not stop underlying sit animations when re-enabling the AO
|
||||
if (mLastOverriddenMotion != ANIM_AGENT_SIT_GROUND_CONSTRAINED && mLastOverriddenMotion != ANIM_AGENT_SIT)
|
||||
{
|
||||
gAgent.sendAnimationRequest(mLastOverriddenMotion, ANIM_REQUEST_STOP);
|
||||
}
|
||||
|
|
@ -357,7 +436,12 @@ void AOEngine::enable(BOOL yes)
|
|||
{
|
||||
mAnimationChangedSignal(LLUUID::null);
|
||||
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
|
||||
if (mLastOverriddenMotion == ANIM_AGENT_SIT)
|
||||
{
|
||||
// remove sit cycle cover up
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
|
||||
}
|
||||
|
||||
// stop all overriders, catch leftovers
|
||||
for (S32 index = 0; index < AOSet::AOSTATES_MAX; ++index)
|
||||
{
|
||||
|
|
@ -379,7 +463,8 @@ void AOEngine::enable(BOOL yes)
|
|||
}
|
||||
}
|
||||
|
||||
if (!foreignAnimations(LLUUID::null))
|
||||
// restore Linden animation if applicable
|
||||
if (mLastOverriddenMotion != ANIM_AGENT_SIT || !foreignAnimations())
|
||||
{
|
||||
gAgent.sendAnimationRequest(mLastMotion, ANIM_REQUEST_START);
|
||||
}
|
||||
|
|
@ -443,7 +528,9 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
|
|||
motion = ANIM_AGENT_SIT_GROUND_CONSTRAINED;
|
||||
}
|
||||
|
||||
AOSet::AOState* state = mCurrentSet->getStateByRemapID(motion);
|
||||
// map the requested motion to an animation state, taking underwater
|
||||
// swimming into account where applicable
|
||||
AOSet::AOState* state = getStateForMotion(motion);
|
||||
if (!state)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "No current AO state for motion " << motion << " (" << gAnimLibrary.animationName(motion) << ")." << LL_ENDL;
|
||||
|
|
@ -470,6 +557,63 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
|
|||
|
||||
mAnimationChangedSignal(LLUUID::null);
|
||||
|
||||
// clean up stray animations as an additional safety measure
|
||||
// unless current motion is ANIM_AGENT_TYPE, which is a special
|
||||
// case, as it plays at the same time as other motions
|
||||
if (motion != ANIM_AGENT_TYPE)
|
||||
{
|
||||
const S32 cleanupStates[]=
|
||||
{
|
||||
AOSet::Standing,
|
||||
AOSet::Walking,
|
||||
AOSet::Running,
|
||||
AOSet::Sitting,
|
||||
AOSet::SittingOnGround,
|
||||
AOSet::Crouching,
|
||||
AOSet::CrouchWalking,
|
||||
AOSet::Falling,
|
||||
AOSet::FlyingDown,
|
||||
AOSet::FlyingUp,
|
||||
AOSet::Flying,
|
||||
AOSet::FlyingSlow,
|
||||
AOSet::Hovering,
|
||||
AOSet::Jumping,
|
||||
AOSet::TurningRight,
|
||||
AOSet::TurningLeft,
|
||||
AOSet::Floating,
|
||||
AOSet::SwimmingForward,
|
||||
AOSet::SwimmingUp,
|
||||
AOSet::SwimmingDown,
|
||||
AOSet::AOSTATES_MAX // end marker, guaranteed to be different from any other entry
|
||||
};
|
||||
|
||||
S32 index = 0;
|
||||
S32 stateNum;
|
||||
|
||||
// loop through the list of states
|
||||
while ((stateNum = cleanupStates[index]) != AOSet::AOSTATES_MAX)
|
||||
{
|
||||
// check if the next state is the one we are currently animating and skip that
|
||||
AOSet::AOState* stateToCheck = mCurrentSet->getState(stateNum);
|
||||
if (stateToCheck != state)
|
||||
{
|
||||
// check if there is an animation left over for that state
|
||||
if (!stateToCheck->mCurrentAnimationID.isNull())
|
||||
{
|
||||
LL_WARNS() << "cleaning up animation in state " << stateToCheck->mName << LL_ENDL;
|
||||
|
||||
// stop the leftover animation locally and in the region for everyone
|
||||
gAgent.sendAnimationRequest(stateToCheck->mCurrentAnimationID, ANIM_REQUEST_STOP);
|
||||
gAgentAvatarp->LLCharacter::stopMotion(stateToCheck->mCurrentAnimationID);
|
||||
|
||||
// mark the state as clean
|
||||
stateToCheck->mCurrentAnimationID.setNull();
|
||||
}
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
mCurrentSet->stopTimer();
|
||||
if (start)
|
||||
{
|
||||
|
|
@ -523,12 +667,6 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
|
|||
mCurrentSet->setMotion(motion);
|
||||
}
|
||||
|
||||
mUnderWater = gAgentAvatarp->mBelowWater;
|
||||
if (mUnderWater)
|
||||
{
|
||||
animation = mapSwimming(motion);
|
||||
}
|
||||
|
||||
if (animation.isNull())
|
||||
{
|
||||
animation = mCurrentSet->getAnimationForState(state);
|
||||
|
|
@ -580,6 +718,20 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
|
|||
}
|
||||
else
|
||||
{
|
||||
// check for previously remembered transition motion from/to underwater movement and don't
|
||||
// allow the overrider to stop it, or it will cancel the transition to underwater motion
|
||||
// immediately after starting it
|
||||
if (motion == mTransitionId)
|
||||
{
|
||||
// clear transition motion id and return a null UUID to allow the stock Linden animation
|
||||
// system to take over
|
||||
mTransitionId.setNull();
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// clear transition motion id here as well, to make sure there is no stray id left behind
|
||||
mTransitionId.setNull();
|
||||
|
||||
animation = state->mCurrentAnimationID;
|
||||
state->mCurrentAnimationID.setNull();
|
||||
|
||||
|
|
@ -629,15 +781,7 @@ const LLUUID AOEngine::override(const LLUUID& pMotion, BOOL start)
|
|||
|
||||
void AOEngine::checkSitCancel()
|
||||
{
|
||||
LLUUID seat;
|
||||
|
||||
const LLViewerObject* agentRoot = dynamic_cast<LLViewerObject*>(gAgentAvatarp->getRoot());
|
||||
if (agentRoot)
|
||||
{
|
||||
seat = agentRoot->getID();
|
||||
}
|
||||
|
||||
if (foreignAnimations(seat))
|
||||
if (foreignAnimations())
|
||||
{
|
||||
AOSet::AOState* aoState = mCurrentSet->getStateByRemapID(ANIM_AGENT_SIT);
|
||||
if (aoState)
|
||||
|
|
@ -676,40 +820,29 @@ void AOEngine::cycleTimeout(const AOSet* set)
|
|||
|
||||
void AOEngine::cycle(eCycleMode cycleMode)
|
||||
{
|
||||
if (!mEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mCurrentSet)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "cycle without set." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLUUID motion = mCurrentSet->getMotion();
|
||||
|
||||
// assume stand if no motion is registered, happens after login when the avatar hasn't moved at all yet
|
||||
// or if the agent has said something in local chat while sitting
|
||||
if (motion.isNull())
|
||||
{
|
||||
if (gAgentAvatarp->isSitting())
|
||||
{
|
||||
motion = ANIM_AGENT_SIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
motion = ANIM_AGENT_STAND;
|
||||
}
|
||||
}
|
||||
|
||||
// do not cycle if we're sitting and sit-override is off
|
||||
else if (motion == ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
|
||||
if (mLastMotion == ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// do not cycle if we're standing and mouselook stand override is disabled while being in mouselook
|
||||
else if (motion == ANIM_AGENT_STAND && mCurrentSet->getMouselookDisable() && mInMouselook)
|
||||
else if (mLastMotion == ANIM_AGENT_STAND && mCurrentSet->getMouselookDisable() && mInMouselook)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AOSet::AOState* state = mCurrentSet->getStateByRemapID(motion);
|
||||
AOSet::AOState* state = mCurrentSet->getStateByRemapID(mLastMotion);
|
||||
if (!state)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "cycle without state." << LL_ENDL;
|
||||
|
|
@ -771,13 +904,13 @@ void AOEngine::cycle(eCycleMode cycleMode)
|
|||
state->mCurrentAnimationID = animation;
|
||||
if (animation.notNull())
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "requesting animation start for motion " << gAnimLibrary.animationName(motion) << ": " << animation << LL_ENDL;
|
||||
LL_DEBUGS("AOEngine") << "requesting animation start for motion " << gAnimLibrary.animationName(mLastMotion) << ": " << animation << LL_ENDL;
|
||||
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_START);
|
||||
mAnimationChangedSignal(state->mAnimations[state->mCurrentAnimation].mInventoryUUID);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "overrider came back with NULL animation for motion " << gAnimLibrary.animationName(motion) << "." << LL_ENDL;
|
||||
LL_DEBUGS("AOEngine") << "overrider came back with NULL animation for motion " << gAnimLibrary.animationName(mLastMotion) << "." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (oldAnimation.notNull())
|
||||
|
|
@ -1617,28 +1750,36 @@ void AOEngine::setOverrideSits(AOSet* set, BOOL yes)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!mEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (yes)
|
||||
{
|
||||
stopAllSitVariants();
|
||||
gAgent.sendAnimationRequest(override(ANIM_AGENT_SIT, TRUE), ANIM_REQUEST_START);
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_START);
|
||||
}
|
||||
else
|
||||
{
|
||||
// remove sit cycle cover up
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT_GENERIC, ANIM_REQUEST_STOP);
|
||||
|
||||
AOSet::AOState* state = mCurrentSet->getState(AOSet::Sitting);
|
||||
if (!state)
|
||||
if (state)
|
||||
{
|
||||
return;
|
||||
LLUUID animation = state->mCurrentAnimationID;
|
||||
if (animation.notNull())
|
||||
{
|
||||
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_STOP);
|
||||
state->mCurrentAnimationID.setNull();
|
||||
}
|
||||
}
|
||||
|
||||
LLUUID animation = state->mCurrentAnimationID;
|
||||
if (animation.notNull())
|
||||
if (!foreignAnimations())
|
||||
{
|
||||
gAgent.sendAnimationRequest(animation, ANIM_REQUEST_STOP);
|
||||
gAgentAvatarp->LLCharacter::stopMotion(animation);
|
||||
state->mCurrentAnimationID.setNull();
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT, ANIM_REQUEST_START);
|
||||
}
|
||||
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SIT, ANIM_REQUEST_START);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1647,6 +1788,11 @@ void AOEngine::setSmart(AOSet* set, BOOL yes)
|
|||
set->setSmart(yes);
|
||||
set->setDirty(TRUE);
|
||||
|
||||
if (!mEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (yes)
|
||||
{
|
||||
// make sure to restart the sit cancel timer to fix sit overrides when the object we are
|
||||
|
|
@ -1669,6 +1815,11 @@ void AOEngine::setDisableStands(AOSet* set, BOOL yes)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!mEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// make sure an update happens if needed
|
||||
mInMouselook = !gAgentCamera.cameraMouselook();
|
||||
inMouselook(!mInMouselook);
|
||||
|
|
@ -2060,7 +2211,7 @@ void AOEngine::onRegionChange()
|
|||
}
|
||||
|
||||
// sitting needs special attention
|
||||
if (mCurrentSet->getMotion() == ANIM_AGENT_SIT)
|
||||
if (mLastMotion == ANIM_AGENT_SIT)
|
||||
{
|
||||
// do nothing if sit overrides was disabled
|
||||
if (!mCurrentSet->getSitOverride())
|
||||
|
|
@ -2076,9 +2227,15 @@ void AOEngine::onRegionChange()
|
|||
return;
|
||||
}
|
||||
|
||||
// do nothing if smart sit is enabled because we have no
|
||||
// animation running from the AO
|
||||
if (mCurrentSet->getSmart())
|
||||
AOSet::AOState* state = mCurrentSet->getState(AOSet::Sitting);
|
||||
if (!state)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// do nothing if no AO animation is playing (e.g. smart sit cancel)
|
||||
LLUUID animation = state->mCurrentAnimationID;
|
||||
if (animation.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -171,8 +171,9 @@ class AOEngine
|
|||
void stopAllStandVariants();
|
||||
void stopAllSitVariants();
|
||||
|
||||
BOOL foreignAnimations(const LLUUID& seat);
|
||||
const LLUUID& mapSwimming(const LLUUID& motion) const;
|
||||
BOOL foreignAnimations();
|
||||
AOSet::AOState* mapSwimming(const LLUUID& motion) const;
|
||||
AOSet::AOState* getStateForMotion(const LLUUID& motion) const;
|
||||
|
||||
void updateSortOrder(AOSet::AOState* state);
|
||||
void saveSet(const AOSet* set);
|
||||
|
|
@ -204,6 +205,7 @@ class AOEngine
|
|||
LLUUID mAOFolder;
|
||||
LLUUID mLastMotion;
|
||||
LLUUID mLastOverriddenMotion;
|
||||
LLUUID mTransitionId;
|
||||
|
||||
std::vector<AOSet*> mSets;
|
||||
std::vector<AOSet*> mOldSets;
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@
|
|||
// Once pumpMainLoop() reports that we're done, cancel frameTimer:
|
||||
// stop the repetitive calls.
|
||||
[frameTimer release];
|
||||
[[LLNSApplication sharedApplication] terminate:self];
|
||||
[[LLApplication sharedApplication] terminate:self];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -806,6 +806,11 @@ BOOL LLFloaterPreference::postBuild()
|
|||
onPieColorsOverrideChanged();
|
||||
// </FS:Zi> Pie menu
|
||||
|
||||
// <FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
|
||||
gSavedSettings.getControl("ShowGroupNoticesTopRight")->getSignal()->connect(boost::bind(&LLFloaterPreference::onShowGroupNoticesTopRightChanged, this));
|
||||
onShowGroupNoticesTopRightChanged();
|
||||
// </FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
|
||||
|
||||
// <FS:Ansariel> Show email address in preferences (FIRE-1071)
|
||||
getChild<LLCheckBoxCtrl>("send_im_to_email")->setLabelArg("[EMAIL]", getString("LoginToChange"));
|
||||
|
||||
|
|
@ -869,6 +874,13 @@ void LLFloaterPreference::onPieColorsOverrideChanged()
|
|||
}
|
||||
// </FS:Zi> Pie menu
|
||||
|
||||
// <FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
|
||||
void LLFloaterPreference::onShowGroupNoticesTopRightChanged()
|
||||
{
|
||||
getChild<LLRadioGroup>("ShowGroupNoticesTopRight")->setValue(gSavedSettings.getBOOL("ShowGroupNoticesTopRight"));
|
||||
}
|
||||
// </FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
|
||||
|
||||
void LLFloaterPreference::updateDeleteTranscriptsButton()
|
||||
{
|
||||
// <FS:ND> LLLogChat::getListOfTranscriptFiles will go through the whole chatlog dir, reach a bit of each file,
|
||||
|
|
|
|||
|
|
@ -164,6 +164,9 @@ protected:
|
|||
// <FS:Ansariel> Correct enabled state of Animated Script Dialogs option
|
||||
void updateAnimatedScriptDialogs();
|
||||
|
||||
// <FS:Zi> Group Notices and chiclets location setting conversion BOOL => S32
|
||||
void onShowGroupNoticesTopRightChanged();
|
||||
|
||||
public:
|
||||
// This function squirrels away the current values of the controls so that
|
||||
// cancel() can restore them.
|
||||
|
|
|
|||
|
|
@ -3698,14 +3698,25 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
|
|||
{
|
||||
std::string complexity_string;
|
||||
LLLocale locale("");
|
||||
LLResMgr::getInstance()->getIntegerString(complexity_string, complexity);
|
||||
|
||||
// always show complexity, even if the reason for a jelly baby is the texture area
|
||||
// this is technically not 100% correct but the decision logic with all of the
|
||||
// exceptions would be way too complex to justify the result - Zi
|
||||
LLResMgr::getInstance()->getIntegerString(complexity_string, complexity);
|
||||
LLStringUtil::format_map_t label_args;
|
||||
label_args["COMPLEXITY"] = complexity_string;
|
||||
|
||||
addNameTagLine(format_string(complexity_label, label_args), complexity_color, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
|
||||
|
||||
// only show texture area if this is the reason for jelly baby rendering
|
||||
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 1000.0f);
|
||||
bool surface_limit_exceeded = max_attachment_area > 0.f && mAttachmentSurfaceArea > max_attachment_area;
|
||||
addNameTagLine(format_string(complexity_label, label_args) + (surface_limit_exceeded ? " \xE2\x96\xA0" : ""), complexity_color, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
|
||||
if (max_attachment_area > 0.f && mAttachmentSurfaceArea > max_attachment_area)
|
||||
{
|
||||
LLResMgr::getInstance()->getIntegerString(complexity_string, mAttachmentSurfaceArea);
|
||||
label_args["TEXTURE_AREA"] = complexity_string;
|
||||
|
||||
addNameTagLine(format_string(complexity_label, label_args), LLColor4::red, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,13 @@
|
|||
<check_box label="Pie-Menü aktivieren" name="UsePieMenu" tool_tip="Aktiviert das klassische V1-Kontextmenü in Kuchenform anstelle des standardmäßigen Kontextmenüs."/>
|
||||
<check_box label="Text-Animation aktivieren" name="PieMenuPopupFontEffect" tool_tip="Aktiviert die Animation der Texte innerhalb des klassischen V1-Kontextmenü in Kuchenform, wenn sich dieses öffnet."/>
|
||||
<check_box label="Außenring-Schatten aktivieren" name="PieMenuOuterRingShade" tool_tip="Aktiviert einen zusätzlichen Schatten um den äußeren Ring des klassischen V1-Kontextmenü in Kuchenform, der bei der Visualisierung von Untermenüs unterstützt."/>
|
||||
<check_box label="Gruppenmitteilungen und Chiclets oben rechts" name="ShowGroupNoticesTopRight" tool_tip="Aktivieren, um Gruppenmitteilungen in der oberen rechten Ecke des Bildschirms anzuzeigen (Klassisches V1.x-Verhalten)."/>
|
||||
<text name="ShowGroupNoticesTopRightLabel">
|
||||
Position Gruppenmitt. und Chiclets:
|
||||
</text>
|
||||
<radio_group name="ShowGroupNoticesTopRight" tool_tip="Legt fest, wo Gruppenmitteilungen und Chiclet-Icons auf dem Bildschirm angezeigt werden.">
|
||||
<radio_item label="Rechts unten" name="radio" />
|
||||
<radio_item label="Rechts oben" name="radio1" />
|
||||
</radio_group>
|
||||
<text name="GroupTopRightRequiresRestart" left_delta="280">
|
||||
(Erfordert Neustart)
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -143,10 +143,15 @@
|
|||
</panel>
|
||||
</panel>
|
||||
<panel label="Mini-Karte" name="tab-minimap">
|
||||
<slider name="FSMiniMapOpacity" label="Hintergrund-Deckkraft:" label_width="130" width="430"/>
|
||||
<text name="netmap_pickradius_textbox" width="130">
|
||||
Auswahl-Radius:
|
||||
<slider name="FSMiniMapOpacity" label="Hintergrund-Deckkraft:" label_width="135" width="435"/>
|
||||
<text name="netmap_pickradius_color_textbox" width="135">
|
||||
Selektionsradius-Farbe:
|
||||
</text>
|
||||
<color_swatch name="MapPickRadiusColor" tool_tip="Erlaubt die Auswahl der Farbe des Selektionsradius auf der Minikarte. Die Größe des Selektionsradius kann über die Selektionsradius-Größe-Einstellung konfiguriert werden." />
|
||||
<text name="netmap_pickradius_opacity_textbox" width="60">
|
||||
Deckkraft:
|
||||
</text>
|
||||
<slider name="MapPickRadiusTransparency" width="163" tool_tip="Erlaubt die Auswahl der Deckkraft des Selektionsradius auf der Minikarte. Die Größe des Selektionsradius kann über die Selektionsradius-Größe-Einstellung konfiguriert werden." />
|
||||
<text name="netmap_dots_textbox">
|
||||
Punkte auf Minikarte:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@
|
|||
<combo_box.item label="Weltkarte öffnen" name="1"/>
|
||||
<combo_box.item label="Zur Position teleportieren" name="2"/>
|
||||
</combo_box>
|
||||
<slider label="Auswahlradius-Skalierung:" tool_tip="Steuert den Radius für den Auswahlbereich auf der Minikarte" name="FSMinimapPickScale"/>
|
||||
<slider label="Selektionsradius-Größe:" tool_tip="Steuert den Radius für den Selektionsbereich auf der Minikarte. Die Farbe und Deckkraft können über die Selektionsradius-Farbe- und Deckkraft-Einstellungen konfiguriert werden." name="FSMinimapPickScale"/>
|
||||
<text name="world_map_options_label">
|
||||
Weltkarte-Optionen:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -6966,6 +6966,9 @@ Ihre aktuelle Position: [AVATAR_POS]
|
|||
<string name="Nametag_Complexity_Label">
|
||||
Komplexität: [COMPLEXITY]
|
||||
</string>
|
||||
<string name="Nametag_Texture_Area_Label">
|
||||
Textur-Oberfläche: [TEXTURE_AREA] m²
|
||||
</string>
|
||||
<string name="font_unknown">
|
||||
Unbekannte Schriftart
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -73,7 +73,9 @@
|
|||
name="scroll_vert"
|
||||
orientation="vertical"
|
||||
step_size="16"
|
||||
doc_pos="0"
|
||||
doc_size="3000"
|
||||
page_size="0"
|
||||
/>
|
||||
</layout_panel>
|
||||
<layout_panel name="timers_panel"
|
||||
|
|
|
|||
|
|
@ -431,29 +431,60 @@
|
|||
tool_tip="Enables an additional outer ring shade that helps visualizing sub menus."
|
||||
top_pad="3"
|
||||
width="256" />
|
||||
<check_box
|
||||
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="ShowGroupNoticesTopRightLabel"
|
||||
top_pad="8"
|
||||
type="string"
|
||||
width="210">
|
||||
Group Notices and chiclets location:
|
||||
</text>
|
||||
|
||||
<radio_group
|
||||
control_name="ShowGroupNoticesTopRight"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Group Notices and chiclets in Top Right"
|
||||
initial_value="1"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
left_pad="5"
|
||||
top_delta="-1"
|
||||
name="ShowGroupNoticesTopRight"
|
||||
tool_tip="Set this to move group notifications and chiclet icons to the top right corner of the screen (Classic V1.x behavior)."
|
||||
top_pad="3"
|
||||
width="256" />
|
||||
<text
|
||||
type="string"
|
||||
left_delta="240"
|
||||
top_pad="-15"
|
||||
width="128"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
tool_tip="Choose where group notifications and chiclet icons will appear on the screen."
|
||||
width="200">
|
||||
<radio_item
|
||||
height="16"
|
||||
label="Bottom Right"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="radio"
|
||||
top_pad="2"
|
||||
value="0"
|
||||
width="100" />
|
||||
<radio_item
|
||||
height="16"
|
||||
label="Top Right"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="radio1"
|
||||
value="1"
|
||||
width="100" />
|
||||
</radio_group>
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="2"
|
||||
name="GroupTopRightRequiresRestart"
|
||||
text_color="White_50"
|
||||
name="GroupTopRightRequiresRestart">
|
||||
(requires restart)
|
||||
top_pad="-14"
|
||||
type="string"
|
||||
width="128">
|
||||
(requires restart)
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
control_name="FSDisableIMChiclets"
|
||||
height="16"
|
||||
|
|
|
|||
|
|
@ -1237,9 +1237,9 @@
|
|||
left="30"
|
||||
top_pad="16"
|
||||
height="15"
|
||||
name="netmap_pickradius_textbox"
|
||||
name="netmap_pickradius_color_textbox"
|
||||
width="115">
|
||||
Pick radius:
|
||||
Pick radius color:
|
||||
</text>
|
||||
<color_swatch
|
||||
color="MapPickRadiusColor"
|
||||
|
|
@ -1250,6 +1250,7 @@
|
|||
layout="topleft"
|
||||
left_pad="13"
|
||||
name="MapPickRadiusColor"
|
||||
tool_tip="Controls the color of the pick range on the minimap. The size of the pick range can be adjusted with the Pick radius setting."
|
||||
top_delta="-5"
|
||||
width="44" >
|
||||
<color_swatch.init_callback
|
||||
|
|
@ -1259,6 +1260,18 @@
|
|||
function="Pref.applyUIColor"
|
||||
parameter="MapPickRadiusColor" />
|
||||
</color_swatch>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
height="15"
|
||||
name="netmap_pickradius_opacity_textbox"
|
||||
top_delta="5"
|
||||
width="50">
|
||||
Opacity:
|
||||
</text>
|
||||
<slider
|
||||
can_edit_text="false"
|
||||
decimal_digits="2"
|
||||
|
|
@ -1271,8 +1284,8 @@
|
|||
min_val="0.00"
|
||||
name="MapPickRadiusTransparency"
|
||||
show_text="true"
|
||||
top_delta="5"
|
||||
width="233" />
|
||||
tool_tip="Controls the opacity of the pick range on the minimap. The size of the pick range can be adjusted with the Pick radius setting."
|
||||
width="173" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
|
|||
|
|
@ -874,14 +874,14 @@
|
|||
increment="0.5"
|
||||
initial_value="1"
|
||||
layout="topleft"
|
||||
label="Pick scale:"
|
||||
label="Pick radius:"
|
||||
left="35"
|
||||
label_width="150"
|
||||
max_val="10"
|
||||
min_val="0.5"
|
||||
name="FSMinimapPickScale"
|
||||
show_text="true"
|
||||
tool_tip="Controls the radius of the pick range on the minimap"
|
||||
tool_tip="Controls the radius of the pick range on the minimap. The opacity and color of the pick range can be adjusted with the Pick radius color and Opacity settings."
|
||||
width="360"
|
||||
top_pad="5"/>
|
||||
|
||||
|
|
|
|||
|
|
@ -3124,6 +3124,7 @@ Your current position: [AVATAR_POS]
|
|||
<string name="Pie_av_render_fully">Fully</string>
|
||||
|
||||
<string name="Nametag_Complexity_Label">Complexity: [COMPLEXITY]</string>
|
||||
<string name="Nametag_Texture_Area_Label">Texture Area: [TEXTURE_AREA] m²</string>
|
||||
|
||||
<string name="font_unknown">Unknown Font</string>
|
||||
<string name="font_fonts.xml">Deja Vu</string>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,9 @@ Inicjalizacja Marketplace nieudana z powodu błędu sieci lub systemu. Spróbuj
|
|||
|
||||
'[ERROR_CODE]'
|
||||
</notification>
|
||||
<notification name="MyOutfitsPasteFailed">
|
||||
Jeden lub więcej przedmiotów nie może być użyty w "Strojach"
|
||||
</notification>
|
||||
<notification name="MerchantPasteFailed">
|
||||
Kopiowanie lub przenoszenie przedmiotów na Marketplace nie powiodło się:
|
||||
|
||||
|
|
@ -608,9 +611,6 @@ Obiekt może znajdować się zbyt daleko albo został usunięty.
|
|||
Odwiedzić [_URL], aby uzyskać więcej informacji?
|
||||
<usetemplate ignoretext="Sprzęt w moim komputerze nie jest wspierany" name="okcancelignore" notext="Nie" yestext="Tak"/>
|
||||
</notification>
|
||||
<notification name="RunLauncher">
|
||||
Proszę nie uruchamiać przeglądarki bezpośrednio. Zamiast tego zaktualizuj wszystkie skróty, aby wskazywały na program rozruchowy.
|
||||
</notification>
|
||||
<notification name="OldGPUDriver">
|
||||
Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność.
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,13 @@
|
|||
<check_box label="Użyj menu kołowego (pie menu)" name="UsePieMenu" tool_tip="Używaj klasycznego, okrągłego menu znanego z 1.x po kliknięciu na awatary, obiekty, teren lub dodatki - zamiast prostokątnych menu kontekstowych." />
|
||||
<check_box label="Animuj również tekst" name="PieMenuPopupFontEffect" tool_tip="Sprawia, że tekst w menu kołowym staje się częścią animacji, gdy jest ono otwierane." />
|
||||
<check_box label="Włącz zewnętrzny pierścień menu kołowego" name="PieMenuOuterRingShade" tool_tip="Włącza dodatkowy zewnętrzny pierścień dla menu kołowego, jaki pomaga lokalizować gdzie znajdują się submenu." />
|
||||
<check_box label="Ikony i ogł. grup w prawym górnym rogu" name="ShowGroupNoticesTopRight" tool_tip="Zaznacz, aby przenieść ogłoszenia grup oraz inne ikonki w prawy górny narożnik ekranu (klasyczne zachowanie 1.x)" />
|
||||
<text name="ShowGroupNoticesTopRightLabel">
|
||||
Pozycja ogłoszeń grup oraz ikonek:
|
||||
</text>
|
||||
<radio_group name="ShowGroupNoticesTopRight" tool_tip="Wybierz gdzie ogłoszenia grup oraz inne ikonki mają się pojawiać na ekranie.">
|
||||
<radio_item label="Prawo, dół" name="radio" />
|
||||
<radio_item label="Prawo, góra" name="radio1" />
|
||||
</radio_group>
|
||||
<text name="GroupTopRightRequiresRestart">
|
||||
(wymaga restartu)
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -141,9 +141,14 @@
|
|||
</panel>
|
||||
<panel label="Minimapa" name="tab-minimap">
|
||||
<slider label="Przezroczystość tła:" name="FSMiniMapOpacity"/>
|
||||
<text name="netmap_pickradius_textbox">
|
||||
Okrąg zazn.:
|
||||
<text name="netmap_pickradius_color_textbox">
|
||||
Okrąg zaznaczenia:
|
||||
</text>
|
||||
<color_swatch name="MapPickRadiusColor" tool_tip="Kontroluje kolor promienia okręgu zaznaczenia na minimapie. Rozmiar pierścienia może być dostosowany przez odpowiadające mu ustawienia w sekcji z promieniem okręgu zaznaczenia." />
|
||||
<text name="netmap_pickradius_opacity_textbox">
|
||||
Przezr.:
|
||||
</text>
|
||||
<slider name="MapPickRadiusTransparency" tool_tip="Kontroluje stopień przezroczystości promienia okręgu zaznaczenia na minimapie. Rozmiar pierścienia może być dostosowany przez odpowiadające mu ustawienia w sekcji z promieniem okręgu zaznaczenia." />
|
||||
<text name="netmap_dots_textbox">
|
||||
Kropki minimapy:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
<combo_box.item label="Otwórz mapę świata" name="1"/>
|
||||
<combo_box.item label="Teleportuj do klikniętego punktu" name="2"/>
|
||||
</combo_box>
|
||||
<slider label="Rozm. okręgu zaznaczenia:" name="FSMinimapPickScale" tool_tip="Kontroluje rozmiar okręgu zaznaczenia pod kursorem na minimapie"/>
|
||||
<slider label="Promień okręgu zaznacz.:" name="FSMinimapPickScale" tool_tip="Kontroluje promień okręgu zaznaczenia pod kursorem na minimapie. Przezroczystość i kolor pierścienia mogą być dostosowane przez odpowiadające mu ustawienia w sekcji z kolorami."/>
|
||||
<text name="world_map_options_label">
|
||||
Opcje mapy świata:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -601,6 +601,12 @@ Spróbuj zalogować się ponownie za minutę.
|
|||
<string name="TooltipOutboxMixedStock">
|
||||
Wszystkie rzeczy w folderze Magazynowym muszą mieć ten sam typ i zezwolenia
|
||||
</string>
|
||||
<string name="TooltipOutfitNotInInventory">
|
||||
W "Strojach" możesz umieszczać tylko przedmioty lub stroje z własnej Szafy
|
||||
</string>
|
||||
<string name="TooltipCantCreateOutfit">
|
||||
Jeden lub więcej przedmiotów nie może być użyty w "Strojach"
|
||||
</string>
|
||||
<string name="TooltipDragOntoOwnChild">
|
||||
Nie możesz przenieść folderu do jego obiektu podrzędnego
|
||||
</string>
|
||||
|
|
@ -6281,6 +6287,9 @@ Twoja aktualna pozycja: [AVATAR_POS]
|
|||
<string name="Nametag_Complexity_Label">
|
||||
Złożoność: [COMPLEXITY]
|
||||
</string>
|
||||
<string name="Nametag_Texture_Area_Label">
|
||||
Tekstury: [TEXTURE_AREA] m²
|
||||
</string>
|
||||
<string name="font_unknown">
|
||||
Nieznana czcionka
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -1782,7 +1782,8 @@ class DarwinManifest(ViewerManifest):
|
|||
print "Converting temp disk image to final disk image"
|
||||
self.run_command(['hdiutil', 'convert', sparsename, '-format', 'UDZO',
|
||||
'-imagekey', 'zlib-level=9', '-o', finalname])
|
||||
self.run_command(['hdiutil', 'internet-enable', '-yes', finalname])
|
||||
#<FS:TS> This command no longer exists as of OS X Catalina
|
||||
#self.run_command(['hdiutil', 'internet-enable', '-yes', finalname])
|
||||
# get rid of the temp file
|
||||
self.package_file = finalname
|
||||
self.remove(sparsename)
|
||||
|
|
|
|||
Loading…
Reference in New Issue