All submissions to this site are governed by the Second Life Viewer Contribution Agreement. By submitting patches and other information using this site, you acknowledge that you have read, understood, and agreed to those terms.

Review Board 1.6.11

Welcome to the Second Life Viewer Code Review tool.
See the documentation on our wiki for how to use this site.

STORM-1878: Blocking an avatar does not derender worn lights

Review Request #583 - Created June 10, 2012 and submitted

MartinRJ Fayray Reviewers
3.3.2 viewer
STORM-1878 davep
None viewer-release
An avatar currently gets derendered/invisible when the user blocks it.
The local lights attached to that avatar have to become erased too.
Repository: https://bitbucket.org/MartinRJ/storm-1878
Tested with 1-6 local attached lights on the target avatar.
Blocking/muting the avatar also disabled the attached lights in all tests successfully.
indra/newview/llmutelist.cpp
Revision 29143d1fc6fa New Change
... 36 lines hidden [Expand]
37
 * show in list whether chatter is avatar or object
37
 * show in list whether chatter is avatar or object
38
 *
38
 *
39
 * need fast lookup by id
39
 * need fast lookup by id
40
 * need lookup by name, doesn't have to be fast
40
 * need lookup by name, doesn't have to be fast
41
 */
41
 */
42

   
42

   
43
#include "llviewerprecompiledheaders.h"
43
#include "llviewerprecompiledheaders.h"
44

   
44

   
45
#include "llmutelist.h"
45
#include "llmutelist.h"
46

   
46

   

   
47
#include "pipeline.h"

   
48

   
47
#include <boost/tokenizer.hpp>
49
#include <boost/tokenizer.hpp>
48

   
50

   
49
#include "lldispatcher.h"
51
#include "lldispatcher.h"
50
#include "llxfermanager.h"
52
#include "llxfermanager.h"
51

   
53

   
52
#include "llagent.h"
54
#include "llagent.h"
53
#include "llviewergenericmessage.h"	// for gGenericDispatcher
55
#include "llviewergenericmessage.h"	// for gGenericDispatcher
54
#include "llworld.h" //for particle system banning
56
#include "llworld.h" //for particle system banning
55
#include "llimview.h"
57
#include "llimview.h"
56
#include "llnotifications.h"
58
#include "llnotifications.h"
... 128 lines hidden [Expand]
BOOL LLMuteList::isLinden(const std::string& name) const
185
	tokenizer::iterator token_iter = tokens.begin();
187
	tokenizer::iterator token_iter = tokens.begin();
186
	
188
	
187
	if (token_iter == tokens.end()) return FALSE;
189
	if (token_iter == tokens.end()) return FALSE;
188
	token_iter++;
190
	token_iter++;
189
	if (token_iter == tokens.end()) return FALSE;
191
	if (token_iter == tokens.end()) return FALSE;
190
	
192
	
191
	std::string last_name = *token_iter;
193
	std::string last_name = *token_iter;
192
	return last_name == "Linden";
194
	return last_name == "Linden";
193
}
195
}
194

   
196

   

   
197
static LLVOAvatar* find_avatar(const LLUUID& id)

   
198
{

   
199
	LLViewerObject *obj = gObjectList.findObject(id);

   
200
	while (obj && obj->isAttachment())

   
201
	{

   
202
		obj = (LLViewerObject *)obj->getParent();

   
203
	}

   
204

   

   
205
	if (obj && obj->isAvatar())

   
206
	{

   
207
		return (LLVOAvatar*)obj;

   
208
	}

   
209
	else

   
210
	{

   
211
		return NULL;

   
212
	}

   
213
}
195

   
214

   
196
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
215
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
197
{
216
{
198
	// Can't mute text from Lindens
217
	// Can't mute text from Lindens
199
	if ((mute.mType == LLMute::AGENT)
218
	if ((mute.mType == LLMute::AGENT)
200
		&& isLinden(mute.mName) && (flags & LLMute::flagTextChat || flags == 0))
219
		&& isLinden(mute.mName) && (flags & LLMute::flagTextChat || flags == 0))
201
	{
220
	{
202
		LLNotifications::instance().add("MuteLinden", LLSD(), LLSD());
221
		LLNotifications::instance().add("MuteLinden", LLSD(), LLSD());
203
		return FALSE;
222
		return FALSE;
204
	}
223
	}
... 76 lines hidden [Expand]
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
281
				updateAdd(localmute);
300
				updateAdd(localmute);
282
				notifyObservers();
301
				notifyObservers();
283
				if(!(localmute.mFlags & LLMute::flagParticles))
302
				if(!(localmute.mFlags & LLMute::flagParticles))
284
				{
303
				{
285
					//Kill all particle systems owned by muted task
304
					//Kill all particle systems owned by muted task
286
					if(localmute.mType == LLMute::AGENT || localmute.mType == LLMute::OBJECT)
305
					if(localmute.mType == LLMute::AGENT || localmute.mType == LLMute::OBJECT)
287
					{
306
					{
288
						LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
307
						LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
289
					}
308
					}
290
				}
309
				}

   
310
				//mute local lights that are attached to the avatar

   
311
				LLVOAvatar *avatarp = find_avatar(localmute.mID);

   
312
				if (avatarp)

   
313
				{

   
314
					LLPipeline::removeMutedAVsLights(avatarp);

   
315
				}
291
				return TRUE;
316
				return TRUE;
292
			}
317
			}
293
		}
318
		}
294
	}
319
	}
295
	
320
	
296
	// If we were going to return success, we'd have done it by now.
321
	// If we were going to return success, we'd have done it by now.
297
	return FALSE;
322
	return FALSE;
298
}
323
}
299

   
324

   
300
void LLMuteList::updateAdd(const LLMute& mute)
325
void LLMuteList::updateAdd(const LLMute& mute)
... 439 lines hidden [Expand]
indra/newview/pipeline.h
Revision 29143d1fc6fa New Change
 
indra/newview/pipeline.cpp
Revision 29143d1fc6fa New Change
 
  1. indra/newview/llmutelist.cpp: Loading...
  2. indra/newview/pipeline.h: Loading...
  3. indra/newview/pipeline.cpp: Loading...