Beispiel #1
0
    // Gets the collective gravity of all planets and updates the GlobalGravityControl
    private void UpdateGravity()
    {
        Vector3 newGravDir = Vector3.zero;

        Vector3 strongest = Vector3.zero;

        foreach (PlanetaryGravitySource source in gravitySources)
        {
            Vector3 sourceGravity = source.GetGravityVector();

            if (sourceGravity.magnitude > strongest.magnitude)
            {
                strongest = sourceGravity;
            }

            newGravDir += sourceGravity;
        }

        // Aligns gravity direction to cumulative direction - overall center of mass
        //float newGravStrength = newGravDir.magnitude;
        //newGravDir.Normalize();
        //GlobalGravityControl.ChangeGravity(newGravDir, newGravStrength, true);

        // Always aligns gravity direction to strongest source
        float newGravStrength = Vector3.Dot(newGravDir.normalized, strongest.normalized) * strongest.magnitude; // takes component along strongest source

        strongest.Normalize();
        GlobalGravityControl.ChangeGravity(strongest, newGravStrength, false);
    }
 /*
  * Player must be last child
  */
 void Update()
 {
     if (linkGrav || target.IsChildOf(transform))
     {
         currentGrav = GlobalGravityControl.GetGravityTarget();
         Vector3 newGrav = (transform.position - target.position).normalized;
         if (currentGrav != newGrav)
         {
             if (invertGravDirection)
             {
                 GlobalGravityControl.ChangeGravity(-newGrav, true);
             }
             else
             {
                 GlobalGravityControl.ChangeGravity(newGrav, true);
             }
         }
     }
 }
Beispiel #3
0
    // applies a constant gravity value to the closest grav source
    void UpdateGravity()
    {
        FixedPlanetGravSource closestSource = null;
        float closestDist = float.MaxValue;

        foreach (FixedPlanetGravSource source in gravitySources)
        {
            float distToTarget = source.GetDistToSurface();
            if (distToTarget < closestDist)
            {
                closestDist   = distToTarget;
                closestSource = source;
            }
        }

        if (closestSource == null)
        {
            return;
        }

        GlobalGravityControl.ChangeGravity(closestSource.GetGravityVector(), closestSource.GetGravityStrength(), false);
    }