MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / _doCollisionImpact

Method _doCollisionImpact

Engine/source/T3D/player.cpp:5053–5110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5051}
5052
5053F32 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}

Callers

nothing calls this directly

Calls 8

mFloorFunction · 0.85
setFrequencyMethod · 0.80
setAmplitudeMethod · 0.80
setFalloffMethod · 0.80
addFXMethod · 0.80
mDotFunction · 0.50
setDurationMethod · 0.45
initMethod · 0.45

Tested by

no test coverage detected