protected void Tumble(ContactPoint contactPoint, SurfaceResponse surfaceResponse) { if (Time.time < _nextTumbleTime) { return; } if (surfaceResponse == null) { return; } // Raycast to contact point RaycastHit raycastHit = RaycastContact(contactPoint); // Determine if there is a response effect SurfaceResponse.ResponseEffect responseEffect = surfaceResponse.GetResponseEffect(raycastHit, _rigidbody.velocity.magnitude); if (responseEffect == null) { return; } // Create effect, apply dynamics CreateEffect(responseEffect.castable, raycastHit); ApplyResponseDynamics(responseEffect, raycastHit); // Define the next time that the tumblable is allowed to tumble SetNextTumbleTime(); }
protected SurfaceResponse.ResponseEffect GetResponseEffect(RaycastHit raycastHit, SurfaceResponse surfaceResponse) { // Determine if there is a surface response if (surfaceResponse == null) { return(null); } // Determine if there is a response effect SurfaceResponse.ResponseEffect responseEffect = surfaceResponse.GetResponseEffect(raycastHit, _relativeImpactVelocity.magnitude); if (responseEffect == null) { return(null); } return(responseEffect); }