// 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); } } } }
// 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); }