Esempio n. 1
0
        // 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;
            }
        }
Esempio n. 2
0
        /// <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;
            }
        }