In FreezeTime mode, keep avatars that TP away.
If an avatar TP's away (or quits), he will not disappear anymore from a frozen scene. Unfreezing makes him disappear of course (and clean up). Known bug: if during Freeze Time mode someone TPs away and then back, then he becomes a cloud after Freeze Time is ended, which can only be reset by another teleport (or relog) from either the cloud or the one seeing him as cloud. I decided not to fix this, cause there are things with a higher priority and this - if it happens at all - is rare and easy to recognize and work around.
This commit is contained in:
@@ -50,7 +50,7 @@ BOOL LLCharacter::sAllowInstancesChange = TRUE ;
|
|||||||
// LLCharacter()
|
// LLCharacter()
|
||||||
// Class Constructor
|
// Class Constructor
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
LLCharacter::LLCharacter(bool freeze_time)
|
LLCharacter::LLCharacter()
|
||||||
:
|
:
|
||||||
mPreferredPelvisHeight( 0.f ),
|
mPreferredPelvisHeight( 0.f ),
|
||||||
mSex( SEX_FEMALE ),
|
mSex( SEX_FEMALE ),
|
||||||
@@ -62,7 +62,6 @@ LLCharacter::LLCharacter(bool freeze_time)
|
|||||||
|
|
||||||
mMotionController.setCharacter( this );
|
mMotionController.setCharacter( this );
|
||||||
mPauseRequest = new LLPauseRequestHandle();
|
mPauseRequest = new LLPauseRequestHandle();
|
||||||
mFreezeTimeHidden = freeze_time;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class LLCharacter
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
LLCharacter(bool freeze_time);
|
LLCharacter();
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
virtual ~LLCharacter();
|
virtual ~LLCharacter();
|
||||||
@@ -277,8 +277,6 @@ public:
|
|||||||
static std::vector< LLCharacter* > sInstances;
|
static std::vector< LLCharacter* > sInstances;
|
||||||
static BOOL sAllowInstancesChange ; //debug use
|
static BOOL sAllowInstancesChange ; //debug use
|
||||||
|
|
||||||
void resetFreezeTimeHidden() { mFreezeTimeHidden = false; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LLMotionController mMotionController;
|
LLMotionController mMotionController;
|
||||||
|
|
||||||
@@ -290,7 +288,6 @@ protected:
|
|||||||
U32 mAppearanceSerialNum;
|
U32 mAppearanceSerialNum;
|
||||||
U32 mSkeletonSerialNum;
|
U32 mSkeletonSerialNum;
|
||||||
LLAnimPauseRequest mPauseRequest;
|
LLAnimPauseRequest mPauseRequest;
|
||||||
bool mFreezeTimeHidden; // True when this object was created during snapshot FreezeTime mode, and that mode is STILL active.
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// visual parameter stuff
|
// visual parameter stuff
|
||||||
|
|||||||
@@ -71,6 +71,7 @@
|
|||||||
#include "lltoolmgr.h"
|
#include "lltoolmgr.h"
|
||||||
#include "llworld.h"
|
#include "llworld.h"
|
||||||
#include "llagentui.h"
|
#include "llagentui.h"
|
||||||
|
#include "llvoavatar.h"
|
||||||
|
|
||||||
#include "llgl.h"
|
#include "llgl.h"
|
||||||
#include "llglheaders.h"
|
#include "llglheaders.h"
|
||||||
@@ -1523,16 +1524,14 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
|
|||||||
previewp->setEnabled(TRUE);
|
previewp->setEnabled(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//RN: freeze all avatars
|
// Freeze all avatars.
|
||||||
LLCharacter* avatarp;
|
|
||||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||||
iter != LLCharacter::sInstances.end(); ++iter)
|
iter != LLCharacter::sInstances.end(); ++iter)
|
||||||
{
|
{
|
||||||
avatarp = *iter;
|
sInstance->impl.mAvatarPauseHandles.push_back((*iter)->requestPause());
|
||||||
sInstance->impl.mAvatarPauseHandles.push_back(avatarp->requestPause());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// freeze everything else
|
// Freeze everything else.
|
||||||
gSavedSettings.setBOOL("FreezeTime", TRUE);
|
gSavedSettings.setBOOL("FreezeTime", TRUE);
|
||||||
|
|
||||||
if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset)
|
if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset)
|
||||||
@@ -1551,15 +1550,17 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
|
|||||||
previewp->setEnabled(FALSE);
|
previewp->setEnabled(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//RN: thaw all avatars
|
// Thaw everything except avatars.
|
||||||
sInstance->impl.mAvatarPauseHandles.clear();
|
gSavedSettings.setBOOL("FreezeTime", FALSE);
|
||||||
|
|
||||||
|
// Thaw all avatars.
|
||||||
|
LLVOAvatar* avatarp;
|
||||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); iter != LLCharacter::sInstances.end(); ++iter)
|
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); iter != LLCharacter::sInstances.end(); ++iter)
|
||||||
{
|
{
|
||||||
(*iter)->resetFreezeTimeHidden();
|
avatarp = static_cast<LLVOAvatar*>(*iter);
|
||||||
|
avatarp->resetFreezeTime();
|
||||||
}
|
}
|
||||||
|
sInstance->impl.mAvatarPauseHandles.clear();
|
||||||
// thaw everything else
|
|
||||||
gSavedSettings.setBOOL("FreezeTime", FALSE);
|
|
||||||
|
|
||||||
// restore last tool (e.g. pie menu, etc)
|
// restore last tool (e.g. pie menu, etc)
|
||||||
if (sInstance->impl.mLastToolset)
|
if (sInstance->impl.mLastToolset)
|
||||||
|
|||||||
@@ -1006,12 +1006,13 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||||||
const LLPCode pcode,
|
const LLPCode pcode,
|
||||||
LLViewerRegion* regionp) :
|
LLViewerRegion* regionp) :
|
||||||
LLViewerObject(id, pcode, regionp),
|
LLViewerObject(id, pcode, regionp),
|
||||||
LLCharacter(freeze_time),
|
|
||||||
mIsDummy(FALSE),
|
mIsDummy(FALSE),
|
||||||
mSpecialRenderMode(0),
|
mSpecialRenderMode(0),
|
||||||
mAttachmentGeometryBytes(0),
|
mAttachmentGeometryBytes(0),
|
||||||
mAttachmentSurfaceArea(0.f),
|
mAttachmentSurfaceArea(0.f),
|
||||||
mTurning(FALSE),
|
mTurning(FALSE),
|
||||||
|
mFreezeTimeHidden(freeze_time),
|
||||||
|
mFreezeTimeDead(false),
|
||||||
mPelvisToFoot(0.f),
|
mPelvisToFoot(0.f),
|
||||||
mLastSkeletonSerialNum( 0 ),
|
mLastSkeletonSerialNum( 0 ),
|
||||||
mHeadOffset(),
|
mHeadOffset(),
|
||||||
@@ -1236,6 +1237,13 @@ LLVOAvatar::~LLVOAvatar()
|
|||||||
|
|
||||||
void LLVOAvatar::markDead()
|
void LLVOAvatar::markDead()
|
||||||
{
|
{
|
||||||
|
static const LLCachedControl<bool> freeze_time("FreezeTime", false);
|
||||||
|
if (freeze_time && !mFreezeTimeHidden)
|
||||||
|
{
|
||||||
|
// Delay the call to this function until FreezeTime is reset, otherwise avatars disappear from the frozen scene.
|
||||||
|
mFreezeTimeDead = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mNameText)
|
if (mNameText)
|
||||||
{
|
{
|
||||||
mNameText->markDead();
|
mNameText->markDead();
|
||||||
@@ -4099,6 +4107,16 @@ bool LLVOAvatar::isVisuallyMuted() const
|
|||||||
(mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f);
|
(mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLVOAvatar::resetFreezeTime()
|
||||||
|
{
|
||||||
|
bool dead = mFreezeTimeDead;
|
||||||
|
mFreezeTimeHidden = mFreezeTimeDead = false;
|
||||||
|
if (dead)
|
||||||
|
{
|
||||||
|
markDead();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// updateCharacter()
|
// updateCharacter()
|
||||||
// called on both your avatar and other avatars
|
// called on both your avatar and other avatars
|
||||||
@@ -7572,7 +7590,7 @@ void LLVOAvatar::updateRuthTimer(bool loading)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPreviousFullyLoaded)
|
if (mPreviousFullyLoaded || mFreezeTimeHidden)
|
||||||
{
|
{
|
||||||
mRuthTimer.reset();
|
mRuthTimer.reset();
|
||||||
debugAvatarRezTime("AvatarRezCloudNotification","became cloud");
|
debugAvatarRezTime("AvatarRezCloudNotification","became cloud");
|
||||||
|
|||||||
@@ -358,6 +358,8 @@ private:
|
|||||||
S32 mVisualComplexity;
|
S32 mVisualComplexity;
|
||||||
LLFrameTimer mFullyLoadedTimer;
|
LLFrameTimer mFullyLoadedTimer;
|
||||||
LLFrameTimer mRuthTimer;
|
LLFrameTimer mRuthTimer;
|
||||||
|
bool mFreezeTimeHidden; // True when this object was created during snapshot FreezeTime mode, and that mode is STILL active.
|
||||||
|
bool mFreezeTimeDead; // True when the avatar was marked dead (ie, TP-ed away) while in FreezeTime mode.
|
||||||
protected:
|
protected:
|
||||||
LLFrameTimer mInvisibleTimer;
|
LLFrameTimer mInvisibleTimer;
|
||||||
|
|
||||||
@@ -453,6 +455,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
|
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
|
||||||
bool isVisuallyMuted() const;
|
bool isVisuallyMuted() const;
|
||||||
|
void resetFreezeTime();
|
||||||
|
|
||||||
U32 renderRigid();
|
U32 renderRigid();
|
||||||
U32 renderSkinned(EAvatarRenderPass pass);
|
U32 renderSkinned(EAvatarRenderPass pass);
|
||||||
|
|||||||
Reference in New Issue
Block a user