BEPUphysics.Entities.Entity.ApplyImpulse C# (CSharp) Method

ApplyImpulse() public method

Applies an impulse to the entity.
public ApplyImpulse ( Vector3 location, Vector3 impulse ) : void
location Vector3 Location to apply the impulse.
impulse Vector3 Impulse to apply.
return void
        public void ApplyImpulse(Vector3 location, Vector3 impulse)
        {
            ApplyImpulse(ref location, ref impulse);
        }

Usage Example

Example #1
0
        /// <summary>
        /// Maintains the position of the character's body above the ground.
        /// </summary>
        /// <param name="supportLocationVelocity">Velocity of the support point connected to the supportEntity.</param>
        /// <param name="supportNormal">The normal at the surface where the ray hit the entity.</param>
        /// <param name="supportDistance">Distance from the character to the support location.</param>
        private void support(Vector3 supportLocationVelocity, Vector3 supportNormal, float supportDistance, float dt)
        {
            //Put the character at the right distance from the ground.
            float supportVerticalVelocity = Math.Max(supportLocationVelocity.Y, -0.1f);
            float heightDifference        = this.SupportHeight - supportDistance;

            this.Body.Position += (new Vector3(0, MathHelper.Clamp(heightDifference, (supportVerticalVelocity - 10.0f) * dt, (supportVerticalVelocity + 10.0f) * dt), 0));

            //Remove from the character velocity which would push it toward or away from the surface.
            //This is a relative velocity, so the velocity of the body and the velocity of a point on the support entity must be found.
            float   bodyNormalVelocity          = Vector3.Dot(this.Body.LinearVelocity, supportNormal);
            float   supportEntityNormalVelocity = Vector3.Dot(supportLocationVelocity, supportNormal);
            Vector3 diff = (bodyNormalVelocity - supportEntityNormalVelocity) * -supportNormal;

            diff.Y = Math.Max(diff.Y, 0);
            this.Body.LinearVelocity += diff;

            BEPUphysics.Entities.Entity supportEntity = this.SupportEntity;
            if (supportEntity != null && supportEntity.IsAffectedByGravity)
            {
                Vector3 supportLocation = this.SupportLocation;
                Vector3 impulse         = (this.Body.Mass * 1.5f) * ((Space)this.Space).ForceUpdater.Gravity * dt;
                supportEntity.ApplyImpulse(ref supportLocation, ref impulse);
                supportEntity.ActivityInformation.Activate();
            }
        }
All Usage Examples Of BEPUphysics.Entities.Entity::ApplyImpulse