Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
a84dfcb176
|
|
@ -30,7 +30,6 @@
|
|||
|
||||
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 1024;
|
||||
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 1024;
|
||||
const S32 LLAvatarAppearanceDefines::IMPOSTOR_PERIOD = 2;
|
||||
|
||||
using namespace LLAvatarAppearanceDefines;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ namespace LLAvatarAppearanceDefines
|
|||
|
||||
extern const S32 SCRATCH_TEX_WIDTH;
|
||||
extern const S32 SCRATCH_TEX_HEIGHT;
|
||||
extern const S32 IMPOSTOR_PERIOD;
|
||||
|
||||
static const U32 AVATAR_HOVER = 11001;
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
6.4.13
|
||||
6.4.14
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ void main()
|
|||
break;
|
||||
case 2: // Blur (variable)
|
||||
fragColor = texture2DRect(diffuseRect, fragTC).rgb;
|
||||
fragColor = mix(fragColor, blurVariable(diffuseRect, fragTC, SPHERE_PARAMS.x, BLUR_DIRECTION, effectStrength), effectStrength > 0);
|
||||
fragColor = mix(fragColor, blurVariable(diffuseRect, fragTC, SPHERE_PARAMS.x, BLUR_DIRECTION, effectStrength), int(effectStrength > 0));
|
||||
break;
|
||||
case 3: // ChromaticAberration
|
||||
fragColor = chromaticAberration(diffuseRect, fragTC, SPHERE_PARAMS.xy, SPHERE_PARAMS.zw, effectStrength);
|
||||
|
|
|
|||
|
|
@ -141,6 +141,7 @@ public:
|
|||
mUserNameFont(NULL),
|
||||
mUserNameTextBox(NULL),
|
||||
mTimeBoxTextBox(NULL),
|
||||
mHeaderLayoutStack(NULL),
|
||||
mAvatarNameCacheConnection()
|
||||
{}
|
||||
|
||||
|
|
@ -577,6 +578,7 @@ public:
|
|||
|
||||
mUserNameTextBox = getChild<LLTextBox>("user_name");
|
||||
mTimeBoxTextBox = getChild<LLTextBox>("time_box");
|
||||
mHeaderLayoutStack = getChild<LLLayoutStack>("header_ls");
|
||||
|
||||
mInfoCtrl = LLUICtrlFactory::getInstance()->createFromFile<LLUICtrl>("inspector_info_ctrl.xml", this, LLPanel::child_registry_t::instance());
|
||||
llassert(mInfoCtrl != NULL);
|
||||
|
|
@ -1063,8 +1065,10 @@ private:
|
|||
mTimeBoxTextBox->translate(delta_pos_x, delta_pos_y);
|
||||
|
||||
//... & change width of the name control
|
||||
const LLRect& user_rect = mUserNameTextBox->getRect();
|
||||
mUserNameTextBox->reshape(user_rect.getWidth() + delta_pos_x, user_rect.getHeight());
|
||||
//const LLRect& user_rect = mUserNameTextBox->getRect();
|
||||
//mUserNameTextBox->reshape(user_rect.getWidth() + delta_pos_x, user_rect.getHeight());
|
||||
const LLRect& layoutstack_rect = mHeaderLayoutStack->getRect();
|
||||
mHeaderLayoutStack->reshape(layoutstack_rect.getWidth() + delta_pos_x, layoutstack_rect.getHeight());
|
||||
}
|
||||
|
||||
void fetchAvatarName()
|
||||
|
|
@ -1127,6 +1131,7 @@ protected:
|
|||
const LLFontGL* mUserNameFont;
|
||||
LLTextBox* mUserNameTextBox;
|
||||
LLTextBox* mTimeBoxTextBox;
|
||||
LLLayoutStack* mHeaderLayoutStack;
|
||||
|
||||
LLStyle::Params mNameStyleParams;
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,24 @@ void LLControlAvatar::initInstance()
|
|||
mInitFlags |= 1<<4;
|
||||
}
|
||||
|
||||
const LLVOAvatar *LLControlAvatar::getAttachedAvatar() const
|
||||
{
|
||||
if (mRootVolp && mRootVolp->isAttachment())
|
||||
{
|
||||
return mRootVolp->getAvatarAncestor();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LLVOAvatar *LLControlAvatar::getAttachedAvatar()
|
||||
{
|
||||
if (mRootVolp && mRootVolp->isAttachment())
|
||||
{
|
||||
return mRootVolp->getAvatarAncestor();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void LLControlAvatar::getNewConstraintFixups(LLVector3& new_pos_fixup, F32& new_scale_fixup) const
|
||||
{
|
||||
|
||||
|
|
@ -165,7 +183,7 @@ void LLControlAvatar::matchVolumeTransform()
|
|||
|
||||
if (mRootVolp->isAttachment())
|
||||
{
|
||||
LLVOAvatar *attached_av = mRootVolp->getAvatarAncestor();
|
||||
LLVOAvatar *attached_av = getAttachedAvatar();
|
||||
if (attached_av)
|
||||
{
|
||||
LLViewerJointAttachment *attach = attached_av->getTargetAttachmentPoint(mRootVolp);
|
||||
|
|
@ -361,7 +379,34 @@ void LLControlAvatar::idleUpdate(LLAgent &agent, const F64 &time)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL LLControlAvatar::updateCharacter(LLAgent &agent)
|
||||
bool LLControlAvatar::computeNeedsUpdate()
|
||||
{
|
||||
computeUpdatePeriod();
|
||||
|
||||
// Animesh attachments are a special case. Should have the same update cadence as their attached parent avatar.
|
||||
LLVOAvatar *attached_av = getAttachedAvatar();
|
||||
if (attached_av)
|
||||
{
|
||||
// Have to run computeNeedsUpdate() for attached av in
|
||||
// case it hasn't run updateCharacter() already this
|
||||
// frame. Note this means that the attached av will
|
||||
// run computeNeedsUpdate() multiple times per frame
|
||||
// if it has animesh attachments. Results will be
|
||||
// consistent except for the corner case of exceeding
|
||||
// MAX_IMPOSTOR_INTERVAL in one call but not another,
|
||||
// which should be rare.
|
||||
attached_av->computeNeedsUpdate();
|
||||
mNeedsImpostorUpdate = attached_av->mNeedsImpostorUpdate;
|
||||
if (mNeedsImpostorUpdate)
|
||||
{
|
||||
mLastImpostorUpdateReason = 12;
|
||||
}
|
||||
return mNeedsImpostorUpdate;
|
||||
}
|
||||
return LLVOAvatar::computeNeedsUpdate();
|
||||
}
|
||||
|
||||
bool LLControlAvatar::updateCharacter(LLAgent &agent)
|
||||
{
|
||||
return LLVOAvatar::updateCharacter(agent);
|
||||
}
|
||||
|
|
@ -635,29 +680,23 @@ std::string LLControlAvatar::getFullname() const
|
|||
// virtual
|
||||
bool LLControlAvatar::shouldRenderRigged() const
|
||||
{
|
||||
if (mRootVolp && mRootVolp->isAttachment())
|
||||
{
|
||||
LLVOAvatar *attached_av = mRootVolp->getAvatarAncestor();
|
||||
if (attached_av)
|
||||
{
|
||||
return attached_av->shouldRenderRigged();
|
||||
}
|
||||
}
|
||||
const LLVOAvatar *attached_av = getAttachedAvatar();
|
||||
if (attached_av)
|
||||
{
|
||||
return attached_av->shouldRenderRigged();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLControlAvatar::isImpostor()
|
||||
{
|
||||
if (mRootVolp && mRootVolp->isAttachment())
|
||||
{
|
||||
// Attached animated objects should match state of their attached av.
|
||||
LLVOAvatar *attached_av = mRootVolp->getAvatarAncestor();
|
||||
if (attached_av)
|
||||
{
|
||||
return attached_av->isImpostor();
|
||||
}
|
||||
}
|
||||
// Attached animated objects should match state of their attached av.
|
||||
LLVOAvatar *attached_av = getAttachedAvatar();
|
||||
if (attached_av)
|
||||
{
|
||||
return attached_av->isImpostor();
|
||||
}
|
||||
return LLVOAvatar::isImpostor();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ public:
|
|||
virtual void initInstance(); // Called after construction to initialize the class.
|
||||
virtual ~LLControlAvatar();
|
||||
|
||||
// If this is an attachment, return the avatar it is attached to. Otherwise NULL.
|
||||
virtual const LLVOAvatar *getAttachedAvatar() const;
|
||||
virtual LLVOAvatar *getAttachedAvatar();
|
||||
|
||||
void getNewConstraintFixups(LLVector3& new_pos_constraint, F32& new_scale_constraint) const;
|
||||
void matchVolumeTransform();
|
||||
void updateVolumeGeom();
|
||||
|
|
@ -53,7 +57,8 @@ public:
|
|||
void markForDeath();
|
||||
|
||||
virtual void idleUpdate(LLAgent &agent, const F64 &time);
|
||||
virtual BOOL updateCharacter(LLAgent &agent);
|
||||
virtual bool computeNeedsUpdate();
|
||||
virtual bool updateCharacter(LLAgent &agent);
|
||||
|
||||
void getAnimatedVolumes(std::vector<LLVOVolume*>& volumes);
|
||||
void updateAnimations();
|
||||
|
|
|
|||
|
|
@ -167,6 +167,7 @@ void LLDrawable::unload()
|
|||
}
|
||||
facep->clearState(LLFace::RIGGED);
|
||||
}
|
||||
|
||||
pVVol->markForUpdate(TRUE);
|
||||
}
|
||||
|
||||
|
|
@ -955,9 +956,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)
|
|||
pos = LLVector3(getPositionGroup().getF32ptr());
|
||||
}
|
||||
|
||||
|
||||
pos -= camera.getOrigin();
|
||||
|
||||
pos -= camera.getOrigin();
|
||||
mDistanceWRTCamera = ll_round(pos.magVec(), 0.01f);
|
||||
mVObjp->updateLOD();
|
||||
}
|
||||
|
|
@ -1508,10 +1507,7 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>*
|
|||
LLVOAvatar* avatarp = (LLVOAvatar*) objparent;
|
||||
if (avatarp->isVisible())
|
||||
{
|
||||
// <FS:Ansariel> Fix LL impostor hacking
|
||||
//impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor();
|
||||
impostor = objparent->isAvatar() && avatarp->isImpostor() && !avatarp->needsImpostorUpdate();
|
||||
// </FS:Ansariel>
|
||||
impostor = objparent->isAvatar() && !LLPipeline::sImpostorRender && ((LLVOAvatar*) objparent)->isImpostor();
|
||||
loaded = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isFullyLoaded();
|
||||
}
|
||||
else
|
||||
|
|
@ -1595,16 +1591,14 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)
|
|||
|
||||
if (mDrawable->getVObj())
|
||||
{
|
||||
if (mDrawable->getVObj()->isAttachment())
|
||||
// Don't update if we are part of impostor, unles it's an impostor pass
|
||||
if (!LLPipeline::sImpostorRender && mDrawable->getVObj()->isAttachment())
|
||||
{
|
||||
LLDrawable* parent = mDrawable->getParent();
|
||||
if (parent && parent->getVObj())
|
||||
{
|
||||
LLVOAvatar* av = parent->getVObj()->asAvatar();
|
||||
// <FS:Ansariel> Fix LL impostor hacking
|
||||
//if (av && av->isImpostor())
|
||||
if (av && av->isImpostor() && !av->needsImpostorUpdate())
|
||||
// </FS:Ansariel>
|
||||
if (av && av->isImpostor())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ void LLDrawPoolAvatar::beginShadowPass(S32 pass)
|
|||
{
|
||||
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
|
||||
}
|
||||
|
||||
|
||||
if ((sShaderLevel > 0)) // for hardware blending
|
||||
{
|
||||
sRenderingSkinned = TRUE;
|
||||
|
|
@ -479,7 +479,7 @@ void LLDrawPoolAvatar::beginShadowPass(S32 pass)
|
|||
{
|
||||
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
|
||||
}
|
||||
|
||||
|
||||
if ((sShaderLevel > 0)) // for hardware blending
|
||||
{
|
||||
sRenderingSkinned = TRUE;
|
||||
|
|
@ -579,15 +579,12 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL impostor = avatarp->isImpostor();
|
||||
if (impostor
|
||||
// <FS:Ansariel> Fix LL impostor hacking; No shadow for impostors
|
||||
//&& LLVOAvatar::AV_DO_NOT_RENDER != avatarp->getVisualMuteSettings()
|
||||
//&& LLVOAvatar::AV_ALWAYS_RENDER != avatarp->getVisualMuteSettings())
|
||||
)
|
||||
// </FS:Ansariel>
|
||||
LLVOAvatar::AvatarOverallAppearance oa = avatarp->getOverallAppearance();
|
||||
BOOL impostor = !LLPipeline::sImpostorRender && avatarp->isImpostor();
|
||||
if (oa == LLVOAvatar::AOA_INVISIBLE ||
|
||||
(impostor && oa == LLVOAvatar::AOA_JELLYDOLL))
|
||||
{
|
||||
// No shadows for jellydolled or invisible avs.
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1477,7 +1474,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
return;
|
||||
}
|
||||
|
||||
LLVOAvatar *avatarp;
|
||||
LLVOAvatar *avatarp = NULL;
|
||||
|
||||
if (single_avatar)
|
||||
{
|
||||
|
|
@ -1607,14 +1604,12 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
return;
|
||||
}
|
||||
|
||||
BOOL impostor = avatarp->isImpostor() && !single_avatar;
|
||||
BOOL impostor = !LLPipeline::sImpostorRender && avatarp->isImpostor() && !single_avatar;
|
||||
|
||||
// <FS:Ansariel> Fix LL impostor hacking; Don't render impostored avatars unless it needs an update
|
||||
//if (( avatarp->isInMuteList()
|
||||
// || impostor
|
||||
// || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0)
|
||||
if (impostor && !avatarp->needsImpostorUpdate() && pass != 0)
|
||||
// </FS:Ansariel>
|
||||
if (( /*avatarp->isInMuteList() // <FS:Ansariel> Partially undo MAINT-5700: Draw imposter for muted avatars
|
||||
||*/ impostor
|
||||
|| (LLVOAvatar::AOA_NORMAL != avatarp->getOverallAppearance() && !avatarp->needsImpostorUpdate()) ) && pass != 0)
|
||||
// || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0)
|
||||
{ //don't draw anything but the impostor for impostored avatars
|
||||
return;
|
||||
}
|
||||
|
|
@ -1624,6 +1619,13 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
return;
|
||||
}
|
||||
|
||||
LLVOAvatar *attached_av = avatarp->getAttachedAvatar();
|
||||
if (attached_av && LLVOAvatar::AOA_NORMAL != attached_av->getOverallAppearance())
|
||||
{
|
||||
// Animesh attachment of a jellydolled or invisible parent - don't show
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass == 0)
|
||||
{
|
||||
if (!LLPipeline::sReflectionRender)
|
||||
|
|
@ -1631,10 +1633,8 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
LLVOAvatar::sNumVisibleAvatars++;
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Fix LL impostor hacking
|
||||
//if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()))
|
||||
if (impostor && !avatarp->needsImpostorUpdate())
|
||||
// </FS:Ansariel>
|
||||
// if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()))
|
||||
if (impostor || (LLVOAvatar::AOA_NORMAL != avatarp->getOverallAppearance() && !avatarp->needsImpostorUpdate()))
|
||||
{
|
||||
if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())
|
||||
{
|
||||
|
|
@ -1855,8 +1855,8 @@ bool LLDrawPoolAvatar::getRiggedGeometry(
|
|||
}
|
||||
// </FS:ND>
|
||||
|
||||
face->setGeomIndex(0);
|
||||
face->setIndicesIndex(0);
|
||||
face->setGeomIndex(0);
|
||||
face->setIndicesIndex(0);
|
||||
|
||||
if (face->getTextureIndex() != FACE_DO_NOT_BATCH_TEXTURES)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2487,7 +2487,7 @@ void LLAvatarComplexityControls::setIndirectMaxNonImpostors()
|
|||
{
|
||||
U32 max_non_impostors = gSavedSettings.getU32("RenderAvatarMaxNonImpostors");
|
||||
// for this one, we just need to make zero, which means off, the max value of the slider
|
||||
U32 indirect_max_non_impostors = (0 == max_non_impostors) ? LLVOAvatar::IMPOSTORS_OFF : max_non_impostors;
|
||||
U32 indirect_max_non_impostors = (0 == max_non_impostors) ? LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER : max_non_impostors;
|
||||
gSavedSettings.setU32("IndirectMaxNonImpostors", indirect_max_non_impostors);
|
||||
}
|
||||
|
||||
|
|
@ -3178,7 +3178,7 @@ void LLFloaterPreference::updateMaxNonImpostors()
|
|||
LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxNonImpostors",true);
|
||||
U32 value = ctrl->getValue().asInteger();
|
||||
|
||||
if (0 == value || LLVOAvatar::IMPOSTORS_OFF <= value)
|
||||
if (0 == value || LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER <= value)
|
||||
{
|
||||
value=0;
|
||||
}
|
||||
|
|
@ -3203,7 +3203,7 @@ void LLFloaterPreference::updateMaxNonImpostorsLabel(const LLSD& newvalue)
|
|||
{
|
||||
U32 value = newvalue.asInteger();
|
||||
|
||||
if (0 == value || LLVOAvatar::IMPOSTORS_OFF <= value)
|
||||
if (0 == value || LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER <= value)
|
||||
{
|
||||
value=0;
|
||||
}
|
||||
|
|
@ -3254,7 +3254,7 @@ void LLFloaterPreferenceGraphicsAdvanced::updateMaxNonImpostors()
|
|||
LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxNonImpostors",true);
|
||||
U32 value = ctrl->getValue().asInteger();
|
||||
|
||||
if (0 == value || LLVOAvatar::IMPOSTORS_OFF <= value)
|
||||
if (0 == value || LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER <= value)
|
||||
{
|
||||
value=0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3921,6 +3921,7 @@ class LLObjectMute : public view_listener_t
|
|||
// [/RLVa:KB]
|
||||
|
||||
avatar->mNeedsImpostorUpdate = TRUE;
|
||||
avatar->mLastImpostorUpdateReason = 9;
|
||||
|
||||
|
||||
LLNameValue *firstname = avatar->getNVPair("FirstName");
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ void LLViewerPartSourceScript::update(const F32 dt)
|
|||
{
|
||||
mOwnerAvatarp = find_avatar(mOwnerUUID);
|
||||
}
|
||||
if (mOwnerAvatarp.notNull() && LLVOAvatar::AV_DO_NOT_RENDER == mOwnerAvatarp->getVisualMuteSettings())
|
||||
if (mOwnerAvatarp.notNull() && LLVOAvatar::AOA_NORMAL != mOwnerAvatarp->getOverallAppearance())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4162,11 +4162,10 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
gRlvSphereProgram.mName = "RLVa Sphere Post Processing Shader";
|
||||
gRlvSphereProgram.mShaderFiles.clear();
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
#ifndef LL_DARWIN
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
#else
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvFMac.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
#endif
|
||||
if (gGLManager.mGLVersion >= 4.5f)
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
else
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvFLegacy.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gRlvSphereProgram.mShaderLevel = mShaderLevel[SHADER_WINDLIGHT];
|
||||
success = gRlvSphereProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5949,7 +5949,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
|
|||
{
|
||||
// <FS:Ansariel> FIRE-15667: 24bit depth maps
|
||||
//U32 color_fmt = type == LLSnapshotModel::SNAPSHOT_TYPE_DEPTH ? GL_DEPTH_COMPONENT : GL_RGBA;
|
||||
U32 color_fmt = (type == LLSnapshotModel::SNAPSHOT_TYPE_DEPTH || LLSnapshotModel::SNAPSHOT_TYPE_DEPTH24) ? GL_DEPTH_COMPONENT : GL_RGBA;
|
||||
U32 color_fmt = (type == LLSnapshotModel::SNAPSHOT_TYPE_DEPTH || type == LLSnapshotModel::SNAPSHOT_TYPE_DEPTH24) ? GL_DEPTH_COMPONENT : GL_RGBA;
|
||||
// </FS:Ansariel>
|
||||
if (scratch_space.allocate(image_width, image_height, color_fmt, true, true))
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -91,6 +91,7 @@ class LLVOAvatar :
|
|||
|
||||
public:
|
||||
friend class LLVOAvatarSelf;
|
||||
friend class LLAvatarCheckImpostorMode;
|
||||
|
||||
/********************************************************************************
|
||||
** **
|
||||
|
|
@ -132,6 +133,7 @@ protected:
|
|||
public:
|
||||
/*virtual*/ void updateGL();
|
||||
/*virtual*/ LLVOAvatar* asAvatar();
|
||||
|
||||
virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
void **user_data,
|
||||
U32 block_num,
|
||||
|
|
@ -257,6 +259,11 @@ public:
|
|||
virtual bool isControlAvatar() const { return mIsControlAvatar; } // True if this avatar is a control av (no associated user)
|
||||
virtual bool isUIAvatar() const { return mIsUIAvatar; } // True if this avatar is a supplemental av used in some UI views (no associated user)
|
||||
|
||||
// If this is an attachment, return the avatar it is attached to. Otherwise NULL.
|
||||
virtual const LLVOAvatar *getAttachedAvatar() const { return NULL; }
|
||||
virtual LLVOAvatar *getAttachedAvatar() { return NULL; }
|
||||
|
||||
|
||||
private: //aligned members
|
||||
LL_ALIGN_16(LLVector4a mImpostorExtents[2]);
|
||||
|
||||
|
|
@ -267,7 +274,8 @@ public:
|
|||
void updateAppearanceMessageDebugText();
|
||||
void updateAnimationDebugText();
|
||||
virtual void updateDebugText();
|
||||
virtual BOOL updateCharacter(LLAgent &agent);
|
||||
virtual bool computeNeedsUpdate();
|
||||
virtual bool updateCharacter(LLAgent &agent);
|
||||
void updateFootstepSounds();
|
||||
void computeUpdatePeriod();
|
||||
void updateOrientation(LLAgent &agent, F32 speed, F32 delta_time);
|
||||
|
|
@ -329,12 +337,12 @@ public:
|
|||
public:
|
||||
static S32 sRenderName;
|
||||
static BOOL sRenderGroupTitles;
|
||||
static const U32 IMPOSTORS_OFF; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors
|
||||
* slider in panel_preferences_graphics1.xml */
|
||||
static U32 sMaxNonImpostors; //(affected by control "RenderAvatarMaxNonImpostors")
|
||||
static F32 sRenderDistance; //distance at which avatars will render.
|
||||
static const U32 NON_IMPOSTORS_MAX_SLIDER; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors
|
||||
* slider in panel_preferences_graphics1.xml */
|
||||
static U32 sMaxNonImpostors; // affected by control "RenderAvatarMaxNonImpostors"
|
||||
static bool sLimitNonImpostors; // use impostors for far away avatars
|
||||
static F32 sRenderDistance; // distance at which avatars will render.
|
||||
static BOOL sShowAnimationDebug; // show animation debug info
|
||||
static bool sUseImpostors; //use impostors for far away avatars
|
||||
static BOOL sShowFootPlane; // show foot collision plane reported by server
|
||||
static BOOL sShowCollisionVolumes; // show skeletal collision volumes
|
||||
static BOOL sVisibleInFirstPerson;
|
||||
|
|
@ -425,6 +433,7 @@ public:
|
|||
void initAttachmentPoints(bool ignore_hud_joints = false);
|
||||
/*virtual*/ void buildCharacter();
|
||||
void resetVisualParams();
|
||||
void applyDefaultParams();
|
||||
void resetSkeleton(bool reset_animations);
|
||||
|
||||
LLVector3 mCurRootToHeadOffset;
|
||||
|
|
@ -445,12 +454,15 @@ public:
|
|||
public:
|
||||
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
|
||||
bool isVisuallyMuted();
|
||||
bool isInMuteList();
|
||||
bool isInMuteList() const;
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
bool isRlvSilhouette();
|
||||
// [/RLVa:KB]
|
||||
void forceUpdateVisualMuteSettings();
|
||||
|
||||
// Visual Mute Setting is an input. Does not necessarily determine
|
||||
// what the avatar looks like, because it interacts with other
|
||||
// settings like muting, complexity threshold. Should be private or protected.
|
||||
enum VisualMuteSettings
|
||||
{
|
||||
AV_RENDER_NORMALLY = 0,
|
||||
|
|
@ -458,11 +470,38 @@ public:
|
|||
AV_ALWAYS_RENDER = 2
|
||||
};
|
||||
void setVisualMuteSettings(VisualMuteSettings set);
|
||||
protected:
|
||||
// If you think you need to access this outside LLVOAvatar, you probably want getOverallAppearance()
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
VisualMuteSettings getVisualMuteSettings() { return (!isRlvSilhouette()) ? mVisuallyMuteSetting : AV_DO_NOT_RENDER; };
|
||||
// [/RLVa:KB]
|
||||
// VisualMuteSettings getVisualMuteSettings() { return mVisuallyMuteSetting; };
|
||||
|
||||
public:
|
||||
|
||||
// Overall Appearance is an output. Depending on whether the
|
||||
// avatar is blocked/muted, whether it exceeds the complexity
|
||||
// threshold, etc, avatar will want to be displayed in one of
|
||||
// these ways. Rendering code that wants to know how to display an
|
||||
// avatar should be looking at this value, NOT the visual mute
|
||||
// settings
|
||||
enum AvatarOverallAppearance
|
||||
{
|
||||
AOA_NORMAL,
|
||||
AOA_JELLYDOLL,
|
||||
AOA_INVISIBLE
|
||||
};
|
||||
|
||||
AvatarOverallAppearance getOverallAppearance() const;
|
||||
void setOverallAppearanceNormal();
|
||||
void setOverallAppearanceJellyDoll();
|
||||
void setOverallAppearanceInvisible();
|
||||
|
||||
void updateOverallAppearance();
|
||||
void updateOverallAppearanceAnimations();
|
||||
|
||||
std::set<LLUUID> mJellyAnims;
|
||||
|
||||
U32 renderRigid();
|
||||
U32 renderSkinned();
|
||||
F32 getLastSkinTime() { return mLastSkinTime; }
|
||||
|
|
@ -475,7 +514,8 @@ public:
|
|||
static void restoreGL();
|
||||
S32 mSpecialRenderMode; // special lighting
|
||||
|
||||
private:
|
||||
private:
|
||||
AvatarOverallAppearance mOverallAppearance;
|
||||
F32 mAttachmentSurfaceArea; //estimated surface area of attachments
|
||||
U32 mAttachmentVisibleTriangleCount;
|
||||
F32 mAttachmentEstTriangleCount;
|
||||
|
|
@ -492,8 +532,8 @@ public:
|
|||
mutable bool mVisualComplexityStale;
|
||||
U32 mReportedVisualComplexity; // from other viewers through the simulator
|
||||
|
||||
bool mCachedInMuteList;
|
||||
F64 mCachedMuteListUpdateTime;
|
||||
mutable bool mCachedInMuteList;
|
||||
mutable F64 mCachedMuteListUpdateTime;
|
||||
// [RLVa:KB] - Checked: RLVa-2.2 (@setcam_avdist)
|
||||
mutable bool mCachedIsRlvSilhouette = false;
|
||||
mutable F64 mCachedRlvSilhouetteUpdateTime = 0.f;
|
||||
|
|
@ -550,7 +590,7 @@ private:
|
|||
//--------------------------------------------------------------------
|
||||
public:
|
||||
virtual BOOL isImpostor();
|
||||
BOOL shouldImpostor(const U32 rank_factor = 1) const;
|
||||
BOOL shouldImpostor(const F32 rank_factor = 1.0);
|
||||
BOOL needsImpostorUpdate() const;
|
||||
const LLVector3& getImpostorOffset() const;
|
||||
const LLVector2& getImpostorDim() const;
|
||||
|
|
@ -561,6 +601,7 @@ public:
|
|||
static void updateImpostors();
|
||||
LLRenderTarget mImpostor;
|
||||
BOOL mNeedsImpostorUpdate;
|
||||
S32 mLastImpostorUpdateReason;
|
||||
F32SecondsImplicit mLastImpostorUpdateFrameTime;
|
||||
const LLVector3* getLastAnimExtents() const { return mLastAnimExtents; }
|
||||
void setNeedsExtentUpdate(bool val) { mNeedsExtentUpdate = val; }
|
||||
|
|
|
|||
|
|
@ -991,7 +991,7 @@ LLVOAvatarSelf::~LLVOAvatarSelf()
|
|||
*********************************************************************************/
|
||||
|
||||
// virtual
|
||||
BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent)
|
||||
bool LLVOAvatarSelf::updateCharacter(LLAgent &agent)
|
||||
{
|
||||
// update screen joint size
|
||||
if (mScreenp)
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ public:
|
|||
// Updates
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
/*virtual*/ BOOL updateCharacter(LLAgent &agent);
|
||||
/*virtual*/ bool updateCharacter(LLAgent &agent);
|
||||
/*virtual*/ void idleUpdateTractorBeam();
|
||||
bool checkStuckAppearance();
|
||||
|
||||
|
|
|
|||
|
|
@ -3235,12 +3235,10 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
|
|||
if (vobj) // this test may not be needed, see above
|
||||
{
|
||||
LLVOAvatar* av = vobj->asAvatar();
|
||||
// <FS:Ansariel> Fix LL impostor hacking; Don't render impostored avatars unless it needs an update
|
||||
//if (av && (av->isImpostor()
|
||||
// || av->isInMuteList()
|
||||
// || (LLVOAvatar::AV_DO_NOT_RENDER == av->getVisualMuteSettings() && !av->needsImpostorUpdate()) ))
|
||||
if (av && av->isImpostor() && !av->needsImpostorUpdate())
|
||||
// </FS:Ansariel>
|
||||
if (av &&
|
||||
((!sImpostorRender && av->isImpostor()) //ignore impostor flag during impostor pass
|
||||
//|| av->isInMuteList() // <FS:Ansariel> Partially undo MAINT-5700: Draw imposter for muted avatars
|
||||
|| (LLVOAvatar::AOA_JELLYDOLL == av->getOverallAppearance() && !av->needsImpostorUpdate()) ))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -5018,6 +5016,7 @@ void LLPipeline::addTrianglesDrawn(S32 index_count, U32 render_type)
|
|||
}
|
||||
|
||||
record(sStatBatchSize, count);
|
||||
|
||||
add(LLStatViewer::TRIANGLES_DRAWN, LLUnits::Triangles::fromValue(count));
|
||||
|
||||
if (LLPipeline::sRenderFrameTest)
|
||||
|
|
@ -11271,7 +11270,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_MARK_VISIBLE);
|
||||
markVisible(avatar->mDrawable, *viewer_camera);
|
||||
LLVOAvatar::sUseImpostors = false; // @TODO ???
|
||||
|
||||
LLVOAvatar::attachment_map_t::iterator iter;
|
||||
for (iter = avatar->mAttachmentPoints.begin();
|
||||
|
|
@ -11524,7 +11522,6 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
|
||||
avatar->setImpostorDim(tdim);
|
||||
|
||||
LLVOAvatar::sUseImpostors = (0 != LLVOAvatar::sMaxNonImpostors);
|
||||
sUseOcclusion = occlusion;
|
||||
sReflectionRender = false;
|
||||
sImpostorRender = false;
|
||||
|
|
|
|||
|
|
@ -2266,7 +2266,7 @@ void FloaterQuickPrefs::updateMaxNonImpostors(const LLSD& newvalue)
|
|||
// Responsible for fixing the setting RenderAvatarMaxNonImpostors
|
||||
U32 value = newvalue.asInteger();
|
||||
|
||||
if (0 == value || LLVOAvatar::IMPOSTORS_OFF <= value)
|
||||
if (0 == value || LLVOAvatar::NON_IMPOSTORS_MAX_SLIDER <= value)
|
||||
{
|
||||
value=0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3667,6 +3667,9 @@ Ihr Outfit wurde in [TIME] Sekunden gebacken.
|
|||
Nach [TIME] Sekunden wurde eine Aktualisierung Ihres Aussehens gesendet.
|
||||
[STATUS]
|
||||
</notification>
|
||||
<notification name="AvatarRezSelfBakeForceUpdateNotification">
|
||||
Der Viewer hat erkannt, dass Sie möglicherweise als Wolke dargestellt werden und versucht, das Problem automatisch zu korrigieren.
|
||||
</notification>
|
||||
<notification name="AvatarRezCloudNotification">
|
||||
(Seit [EXISTENCE] Sekunden inworld )
|
||||
Avatar '[NAME]' wird als Wolke angezeigt.
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@
|
|||
</text>
|
||||
<button label="[USEDEFAULT]" name="btn_usedefault"/>
|
||||
<button label="Inventar verwenden" name="btn_select_inventory"/>
|
||||
<button label="Anpassen" name="btn_edit"/>
|
||||
<check_box label="Parzelleneig. können Umg. übersteuern" name="chk_allow_override"/>
|
||||
<button label="Tageszyklus anpassen" name="btn_edit"/>
|
||||
<check_box label="Parzellenbesitzer können übersteuern" name="chk_allow_override"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="pnl_environment_length">
|
||||
<text name="day_settings_label">
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
<floater
|
||||
legacy_header_height="0"
|
||||
header_height="0"
|
||||
bg_alpha_image_overlay="LtGray_50"
|
||||
bg_opaque_image="Window_NoTitle_Foreground"
|
||||
bg_alpha_image="Window_NoTitle_Foreground"
|
||||
can_dock="false"
|
||||
can_minimize="false"
|
||||
can_resize="true"
|
||||
|
|
|
|||
|
|
@ -9513,6 +9513,13 @@ You finished baking your outfit after [TIME] seconds.
|
|||
You sent out an update of your appearance after [TIME] seconds.
|
||||
[STATUS]
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezSelfBakeForceUpdateNotification"
|
||||
type="notifytip">
|
||||
The viewer has detected that you may appear as a cloud and is attempting to fix this automatically.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
|
|
|
|||
|
|
@ -772,7 +772,7 @@
|
|||
<combo_box.item
|
||||
label="24 Hour incl. Timezone"
|
||||
name="24_Hour_TZ"
|
||||
value="12 Hour TZ"/>
|
||||
value="24 Hour TZ"/>
|
||||
<combo_box.item
|
||||
label="24 Hour incl. Seconds & Timezone"
|
||||
name="24_Hour_TZ_Seconds"
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@
|
|||
layout="topleft"
|
||||
height="23"
|
||||
label="[USEDEFAULT]"
|
||||
width="120"
|
||||
width="200"
|
||||
name="btn_usedefault"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
|
|
@ -122,7 +122,7 @@
|
|||
layout="topleft"
|
||||
height="23"
|
||||
label="Use Inventory"
|
||||
width="120"
|
||||
width="200"
|
||||
name="btn_select_inventory"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
|
|
@ -130,12 +130,12 @@
|
|||
left_delta="0"
|
||||
layout="topleft"
|
||||
height="23"
|
||||
label="Customize"
|
||||
width="120"
|
||||
label="Customize Day Cycle"
|
||||
width="200"
|
||||
name="btn_edit"/>
|
||||
<check_box
|
||||
height="20"
|
||||
label="Parcel Owners May Override Environment"
|
||||
label="Parcel Owners May Override"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@
|
|||
<menu label="Import wielu plików" name="WL Bulk Import">
|
||||
<menu_item_call label="Dni..." name="WL Bulk Import Days" />
|
||||
<menu_item_call label="Nieba..." name="WL Bulk Import Skies" />
|
||||
<menu_item_call label="Woda..." name="WL Bulk Import Water" />
|
||||
<menu_item_call label="Wody..." name="WL Bulk Import Water" />
|
||||
</menu>
|
||||
</menu>
|
||||
<!-- <menu label="Edytor otoczenia" name="Environment Editor">
|
||||
|
|
|
|||
|
|
@ -3535,6 +3535,9 @@ Skończono wstępne przetwarzanie stroju po [TIME] sekundach.
|
|||
Wysłano aktualizację wyglądu po [TIME] sekundach.
|
||||
[STATUS]
|
||||
</notification>
|
||||
<notification name="AvatarRezSelfBakeForceUpdateNotification">
|
||||
Przeglądarka wykryła, że możesz wyglądać jak chmurka i próbuje to automatycznie naprawić.
|
||||
</notification>
|
||||
<notification name="AvatarRezCloudNotification">
|
||||
( [EXISTENCE] sekund w Second Life )
|
||||
Awatar '[NAME]' stał się chmurą.
|
||||
|
|
|
|||
|
|
@ -98,6 +98,20 @@
|
|||
<check_box label="Pokaż wyszukiwarkę pozycji w menu" name="show_search_menu_check" />
|
||||
<check_box label="Pokaż stan konta" name="FSShowCurrencyBalanceInStatusbar" />
|
||||
<check_box label="Włącz autorozwijanie menusów przy wskazywaniu ikon na pasku" name="FSStatusBarMenuButtonPopupOnRollover" />
|
||||
<text name="statusbar_timeformat_textbox">
|
||||
Format czasu:
|
||||
</text>
|
||||
<combo_box name="FSStatusBarTimeFormat" tool_tip="Wybierz format czasu używany na pasku głównego menu.">
|
||||
<combo_box.item label="Domyślny języka" name="Language" />
|
||||
<combo_box.item label="12-godzinny" name="12_Hour" />
|
||||
<combo_box.item label="12-godzinny z sekundami" name="12_Hour_Seconds" />
|
||||
<combo_box.item label="12-godzinny ze strefą czasową" name="12_Hour_TZ" />
|
||||
<combo_box.item label="12-godzinny ze strefą czasową i sekundami" name="12_Hour_TZ_Seconds" />
|
||||
<combo_box.item label="24-godzinny" name="24_Hour" />
|
||||
<combo_box.item label="24-godzinny z sekundami" name="24_Hour_Seconds" />
|
||||
<combo_box.item label="24-godzinny ze strefą czasową" name="24_Hour_TZ" />
|
||||
<combo_box.item label="24-godzinny ze strefą czasową i sekundami" name="24_Hour_TZ_Seconds" />
|
||||
</combo_box>
|
||||
<text name="navfav_textbox">
|
||||
Paski nawigacji i ulubionych:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
Wybierz otoczenie
|
||||
</text>
|
||||
<button label="Z Szafy" name="btn_select_inventory" />
|
||||
<button label="Dostosuj" name="btn_edit" />
|
||||
<button label="Dostosuj cykl dnia" name="btn_edit" />
|
||||
<check_box label="Właściciele działek mogą zastąpić" name="chk_allow_override" />
|
||||
</layout_panel>
|
||||
<layout_panel name="pnl_environment_length">
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
<columns name="permanent" label="Постоянно"/>
|
||||
</fs_scroll_list>
|
||||
<button name="remove_btn" label="Удалить из черного списка" width="190"/>
|
||||
<button name="remove_temp_btn" label="Удалить не постоянные" width="190" />
|
||||
<button name="remove_temp_btn" label="Удалить не постоянные" width="170" />
|
||||
<button name="play_btn" label="Проиграть звук" tool_tip="Воспроизвести выбранный звук; для воспроизведения можно выбрать только одну звуковую запись." width="120"/>
|
||||
<button name="stop_btn" label="Остановить звук" tool_tip="Остановить воспроизведение текущего звука." width="120"/>
|
||||
<button name="close_btn" label="Закрыть"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -102,6 +102,20 @@
|
|||
<check_box label="Показать поиск в меню" name="show_search_menu_check"/>
|
||||
<check_box label="Показать текущий баланс L$" name="FSShowCurrencyBalanceInStatusbar"/>
|
||||
<check_box label="Включить выпадающие окна меню мыши на значках верхнего меню" name="FSStatusBarMenuButtonPopupOnRollover" width="270" />
|
||||
<text name="statusbar_timeformat_textbox" width="100">
|
||||
Формат времени:
|
||||
</text>
|
||||
<combo_box name="FSStatusBarTimeFormat" tool_tip="Выбирает формат времени, используемый в строке главного меню." width="250">
|
||||
<combo_box.item label="Стандарт выбранного языка" name="Language"/>
|
||||
<combo_box.item label="12 Часов" name="12_Hour"/>
|
||||
<combo_box.item label="12 Часов с Секундами" name="12_Hour_Seconds"/>
|
||||
<combo_box.item label="12 Часов с Часовым поясом" name="12_Hour_TZ"/>
|
||||
<combo_box.item label="12 Часов с Секундами и Часовым поясом" name="12_Hour_TZ_Seconds"/>
|
||||
<combo_box.item label="24 Часа" name="24_Hour"/>
|
||||
<combo_box.item label="24 Часа с Секундами" name="24_Hour_Seconds"/>
|
||||
<combo_box.item label="24 Часа с Часовым поясом" name="24_Hour_TZ"/>
|
||||
<combo_box.item label="24 Часа с Секундами и Часовым поясом" name="24_Hour_TZ_Seconds"/>
|
||||
</combo_box>
|
||||
<text name="navfav_textbox">
|
||||
Панель навигации и закладок:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -136,6 +136,11 @@
|
|||
<key>value</key>
|
||||
<string>'[OBJECT]' было отказано в разрешении телепортировать вас из-за ограничений RLV</string>
|
||||
</map>
|
||||
<key>blocked_scriptdialog</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<string>Невозможно отобразить диалоговое окно или текстовое поле скрипта из-за ограничений RLV</string>
|
||||
</map>
|
||||
<key>blocked_startim</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
|
|
|
|||
|
|
@ -79,15 +79,32 @@ def compare_trees(file_trees):
|
|||
print "Summary:"
|
||||
print summary
|
||||
|
||||
|
||||
def dump_appearance_params(tree):
|
||||
vals = []
|
||||
for e in tree.getroot().iter():
|
||||
if e.tag == "param":
|
||||
g = int(e.get("group"))
|
||||
if g in [0,3]:
|
||||
vals.append("{" + e.get("id") + "," +e.get("u8") + "}")
|
||||
#print e.get("id"), e.get("name"), e.get("group"), e.get("u8")
|
||||
if len(vals)==253:
|
||||
print ", ".join(vals)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
parser = argparse.ArgumentParser(description="compare avatar XML archetype files")
|
||||
parser.add_argument("--verbose", help="verbose flag", action="store_true")
|
||||
parser.add_argument("--compare", help="compare flag", action="store_true")
|
||||
parser.add_argument("--appearance_params", help="compare flag", action="store_true")
|
||||
parser.add_argument("files", nargs="+", help="name of one or more archtype files")
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
print "files",args.files
|
||||
file_trees = [etree.parse(filename) for filename in args.files]
|
||||
compare_trees(file_trees)
|
||||
print args
|
||||
if args.compare:
|
||||
compare_trees(file_trees)
|
||||
if args.appearance_params:
|
||||
dump_appearance_params(file_trees[0])
|
||||
|
|
|
|||
Loading…
Reference in New Issue