| 5051 | } |
| 5052 | |
| 5053 | F32 Player::_doCollisionImpact( const Collision *collision, bool fallingCollision) |
| 5054 | { |
| 5055 | F32 bd = -mDot( mVelocity, collision->normal); |
| 5056 | |
| 5057 | // shake camera on ground impact |
| 5058 | if( bd > mDataBlock->groundImpactMinSpeed && isControlObject() ) |
| 5059 | { |
| 5060 | F32 ampScale = (bd - mDataBlock->groundImpactMinSpeed) / mDataBlock->minImpactSpeed; |
| 5061 | |
| 5062 | CameraShake *groundImpactShake = new CameraShake; |
| 5063 | groundImpactShake->setDuration( mDataBlock->groundImpactShakeDuration ); |
| 5064 | groundImpactShake->setFrequency( mDataBlock->groundImpactShakeFreq ); |
| 5065 | |
| 5066 | VectorF shakeAmp = mDataBlock->groundImpactShakeAmp * ampScale; |
| 5067 | groundImpactShake->setAmplitude( shakeAmp ); |
| 5068 | groundImpactShake->setFalloff( mDataBlock->groundImpactShakeFalloff ); |
| 5069 | groundImpactShake->init(); |
| 5070 | gCamFXMgr.addFX( groundImpactShake ); |
| 5071 | } |
| 5072 | |
| 5073 | if ( ((bd > mDataBlock->minImpactSpeed && fallingCollision) || bd > mDataBlock->minLateralImpactSpeed) |
| 5074 | && !mMountPending ) |
| 5075 | { |
| 5076 | if ( !isGhost() ) |
| 5077 | onImpact( collision->object, collision->normal * bd ); |
| 5078 | |
| 5079 | if (mDamageState == Enabled && mState != RecoverState) |
| 5080 | { |
| 5081 | // Scale how long we're down for |
| 5082 | if (mDataBlock->landSequenceTime > 0.0f) |
| 5083 | { |
| 5084 | // Recover time is based on the land sequence |
| 5085 | setState(RecoverState); |
| 5086 | } |
| 5087 | else |
| 5088 | { |
| 5089 | // Legacy recover system |
| 5090 | F32 value = (bd - mDataBlock->minImpactSpeed); |
| 5091 | F32 range = (mDataBlock->minImpactSpeed * 0.9f); |
| 5092 | U32 recover = mDataBlock->recoverDelay; |
| 5093 | if (value < range) |
| 5094 | recover = 1 + S32(mFloor( F32(recover) * value / range) ); |
| 5095 | //Con::printf("Used %d recover ticks", recover); |
| 5096 | //Con::printf(" minImpact = %g, this one = %g", mDataBlock->minImpactSpeed, bd); |
| 5097 | setState(RecoverState, recover); |
| 5098 | } |
| 5099 | } |
| 5100 | } |
| 5101 | |
| 5102 | if ( isServerObject() && |
| 5103 | (bd > (mDataBlock->minImpactSpeed / 3.0f) || bd > (mDataBlock->minLateralImpactSpeed / 3.0f )) ) |
| 5104 | { |
| 5105 | mImpactSound = PlayerData::ImpactNormal; |
| 5106 | setMaskBits(ImpactMask); |
| 5107 | } |
| 5108 | |
| 5109 | return bd; |
| 5110 | } |
nothing calls this directly
no test coverage detected