aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llhudeffectpointat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/newview/llhudeffectpointat.cpp')
-rw-r--r--linden/indra/newview/llhudeffectpointat.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp
index c47705b..97e3bd7 100644
--- a/linden/indra/newview/llhudeffectpointat.cpp
+++ b/linden/indra/newview/llhudeffectpointat.cpp
@@ -232,7 +232,11 @@ BOOL LLHUDEffectPointAt::setPointAt(EPointAtType target_type, LLViewerObject *ob
232 return FALSE; 232 return FALSE;
233 } 233 }
234 234
235 llassert(target_type < POINTAT_NUM_TARGETS); 235 if (target_type >= POINTAT_NUM_TARGETS)
236 {
237 llwarns << "Bad target_type " << (int)target_type << " - ignoring." << llendl;
238 return FALSE;
239 }
236 240
237 // must be same or higher priority than existing effect 241 // must be same or higher priority than existing effect
238 if (POINTAT_PRIORITIES[target_type] < POINTAT_PRIORITIES[mTargetType]) 242 if (POINTAT_PRIORITIES[target_type] < POINTAT_PRIORITIES[mTargetType])
@@ -379,17 +383,19 @@ void LLHUDEffectPointAt::update()
379 } 383 }
380 else 384 else
381 { 385 {
382 calcTargetPosition(); 386 if (calcTargetPosition())
383 387 {
384 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_EDITING); 388 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_EDITING);
389 }
385 } 390 }
386 } 391 }
387} 392}
388 393
389//----------------------------------------------------------------------------- 394//-----------------------------------------------------------------------------
390// calcTargetPosition() 395// calcTargetPosition()
396// returns whether we successfully calculated a finite target position.
391//----------------------------------------------------------------------------- 397//-----------------------------------------------------------------------------
392void LLHUDEffectPointAt::calcTargetPosition() 398bool LLHUDEffectPointAt::calcTargetPosition()
393{ 399{
394 LLViewerObject *targetObject = (LLViewerObject *)mTargetObject; 400 LLViewerObject *targetObject = (LLViewerObject *)mTargetObject;
395 LLVector3 local_offset; 401 LLVector3 local_offset;
@@ -435,10 +441,15 @@ void LLHUDEffectPointAt::calcTargetPosition()
435 441
436 mTargetPos -= mSourceObject->getRenderPosition(); 442 mTargetPos -= mSourceObject->getRenderPosition();
437 443
444 if (!mTargetPos.isFinite())
445 return false;
446
438 if (mSourceObject->isAvatar()) 447 if (mSourceObject->isAvatar())
439 { 448 {
440 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->setAnimationData("PointAtPoint", (void *)&mTargetPos); 449 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->setAnimationData("PointAtPoint", (void *)&mTargetPos);
441 } 450 }
451
452 return true;
442} 453}
443 454
444const LLVector3d LLHUDEffectPointAt::getPointAtPosGlobal() 455const LLVector3d LLHUDEffectPointAt::getPointAtPosGlobal()