Universe.Physics.OpenDynamicsEngine.ODEPhysicsScene.CalculateGravity C# (CSharp) Method

CalculateGravity() public method

public CalculateGravity ( float mass, System.Vector3 position, bool allowNormalGravity, float gravityModifier, System.Vector3 &forceVector ) : void
mass float
position System.Vector3
allowNormalGravity bool
gravityModifier float
forceVector System.Vector3
return void
        public void CalculateGravity(float mass, Vector3 position, bool allowNormalGravity, float gravityModifier,
                                     ref Vector3 forceVector)
        {
            if (NormalGravityEnabled && allowNormalGravity)
            {
                //normal gravity, one axis, no center
                forceVector.X += gravityx*mass*gravityModifier;
                forceVector.Y += gravityy*mass*gravityModifier;
                forceVector.Z += gravityz*mass*gravityModifier;
            }
            if (PointGravityInUse)
            {
                //Find the nearby centers of gravity
                foreach (PointGravity pg in m_pointGravityPositions.Values)
                {
                    float distance = Vector3.DistanceSquared(pg.Position, position);
                    if (distance < pg.Radius*pg.Radius)
                    {
                        float d = (distance/(pg.Radius*pg.Radius));
                        float radiusScaling = 1 - d;
                        radiusScaling *= radiusScaling;
                        if (pg.PointForce)
                        {
                            //Applies forces to the actor when in range
                            forceVector.X += pg.ForceX*radiusScaling*mass*gravityModifier;
                            forceVector.Y += pg.ForceY*radiusScaling*mass*gravityModifier;
                            forceVector.Z += pg.ForceZ*radiusScaling*mass*gravityModifier;
                        }
                        else
                        {
                            //Pulls the actor toward the point
                            forceVector.X += (pg.Position.X - position.X)*pg.GravForce*radiusScaling*mass*
                                             gravityModifier;
                            forceVector.Y += (pg.Position.Y - position.Y)*pg.GravForce*radiusScaling*mass*
                                             gravityModifier;
                            forceVector.Z += (pg.Position.Z - position.Z)*pg.GravForce*radiusScaling*mass*
                                             gravityModifier;
                            /*if (forceVector.Z < 50 && forceVector.Z > 0)
                                forceVector.Z = 0;
                            else if (forceVector.Z > -50 && forceVector.Z < 0)
                                forceVector.Z = 0;*/
                        }
                    }
                }
            }
        }