--------------------------------------------------------------------------
| 665 | |
| 666 | //-------------------------------------------------------------------------- |
| 667 | void Lightning::processEvent(LightningStrikeEvent* pEvent) |
| 668 | { |
| 669 | AssertFatal(pEvent->mStart.x >= 0.0f && pEvent->mStart.x <= 1.0f, "Out of bounds coord!"); |
| 670 | |
| 671 | Strike* pStrike = new Strike; |
| 672 | |
| 673 | Point3F strikePoint; |
| 674 | strikePoint.zero(); |
| 675 | |
| 676 | if( pEvent->mTarget ) |
| 677 | { |
| 678 | Point3F objectCenter; |
| 679 | pEvent->mTarget->getObjBox().getCenter( &objectCenter ); |
| 680 | objectCenter.convolve( pEvent->mTarget->getScale() ); |
| 681 | pEvent->mTarget->getTransform().mulP( objectCenter ); |
| 682 | |
| 683 | strikePoint = objectCenter; |
| 684 | } |
| 685 | else |
| 686 | { |
| 687 | strikePoint.x = pEvent->mStart.x; |
| 688 | strikePoint.y = pEvent->mStart.y; |
| 689 | strikePoint *= mObjScale; |
| 690 | strikePoint += getPosition(); |
| 691 | strikePoint += Point3F( -mObjScale.x * 0.5f, -mObjScale.y * 0.5f, 0.0f ); |
| 692 | |
| 693 | RayInfo rayInfo; |
| 694 | Point3F start = strikePoint; |
| 695 | start.z = mObjScale.z * 0.5f + getPosition().z; |
| 696 | strikePoint.z += -mObjScale.z * 0.5f; |
| 697 | bool rayHit = gClientContainer.castRay( start, strikePoint, |
| 698 | (STATIC_COLLISION_TYPEMASK | WaterObjectType), |
| 699 | &rayInfo); |
| 700 | if( rayHit ) |
| 701 | { |
| 702 | strikePoint.z = rayInfo.point.z; |
| 703 | } |
| 704 | else |
| 705 | { |
| 706 | strikePoint.z = pStrike->bolt[0].findHeight( strikePoint, getSceneManager() ); |
| 707 | } |
| 708 | } |
| 709 | |
| 710 | pStrike->xVal = strikePoint.x; |
| 711 | pStrike->yVal = strikePoint.y; |
| 712 | |
| 713 | pStrike->deathAge = 1.6f; |
| 714 | pStrike->currentAge = 0.0f; |
| 715 | pStrike->next = mStrikeListHead; |
| 716 | |
| 717 | for( U32 i=0; i<MAX_LIGHTNING; i++ ) |
| 718 | { |
| 719 | F32 randStart = boltStartRadius; |
| 720 | F32 height = mObjScale.z * 0.5f + getPosition().z; |
| 721 | pStrike->bolt[i].startPoint.set( pStrike->xVal + gRandGen.randF( -randStart, randStart ), pStrike->yVal + gRandGen.randF( -randStart, randStart ), height ); |
| 722 | pStrike->bolt[i].endPoint = strikePoint; |
| 723 | pStrike->bolt[i].width = strikeWidth; |
| 724 | pStrike->bolt[i].numMajorNodes = 10; |
no test coverage detected