// Token: 0x06002682 RID: 9858 RVA: 0x000B1794 File Offset: 0x000AF994 public virtual void HandleSimulatedRigidbodyInteraction(ref Vector3 processedVelocity, RigidbodyProjectionHit hit, float deltaTime) { float num = 0.2f; if (num > 0f && !hit.StableOnHit && !hit.Rigidbody.isKinematic) { float d = num / hit.Rigidbody.mass; Vector3 velocityFromRigidbodyMovement = this.Motor.GetVelocityFromRigidbodyMovement(hit.Rigidbody, hit.HitPoint, deltaTime); Vector3 a = Vector3.Project(hit.HitVelocity, hit.EffectiveHitNormal) - velocityFromRigidbodyMovement; hit.Rigidbody.AddForceAtPosition(d * a, hit.HitPoint, ForceMode.VelocityChange); } if (!hit.StableOnHit) { Vector3 a2 = Vector3.Project(this.Motor.GetVelocityFromRigidbodyMovement(hit.Rigidbody, hit.HitPoint, deltaTime), hit.EffectiveHitNormal); Vector3 b = Vector3.Project(processedVelocity, hit.EffectiveHitNormal); processedVelocity += a2 - b; } }
/// <summary> /// Allows you to override the way hit rigidbodies are pushed / interacted with. /// ProcessedVelocity is what must be modified if this interaction affects the character's velocity. /// </summary> public virtual void HandleSimulatedRigidbodyInteraction(ref Vector3 processedVelocity, RigidbodyProjectionHit hit, float deltaTime) { float simulatedCharacterMass = 0.2f; // Handle pushing rigidbodies in SimulatedDynamic mode if (simulatedCharacterMass > 0f && !hit.StableOnHit && !hit.Rigidbody.isKinematic) { float massRatio = simulatedCharacterMass / hit.Rigidbody.mass; Vector3 effectiveHitRigidbodyVelocity = Motor.GetVelocityFromRigidbodyMovement(hit.Rigidbody, hit.HitPoint, deltaTime); Vector3 relativeVelocity = Vector3.Project(hit.HitVelocity, hit.EffectiveHitNormal) - effectiveHitRigidbodyVelocity; hit.Rigidbody.AddForceAtPosition(massRatio * relativeVelocity, hit.HitPoint, ForceMode.VelocityChange); } // Compensate character's own velocity against the moving rigidbodies if (!hit.StableOnHit) { Vector3 effectiveRigidbodyVelocity = Motor.GetVelocityFromRigidbodyMovement(hit.Rigidbody, hit.HitPoint, deltaTime); Vector3 projRigidbodyVelocity = Vector3.Project(effectiveRigidbodyVelocity, hit.EffectiveHitNormal); Vector3 projCharacterVelocity = Vector3.Project(processedVelocity, hit.EffectiveHitNormal); processedVelocity += projRigidbodyVelocity - projCharacterVelocity; } }