示例#1
0
		/// <summary>
		/// When first time called this method makes orbit clockwise, next time - oposite
		/// Orbit plane will be unchanged.
		/// </summary>
		public void MakeOrbitCircle() {
			if (attractor) {
#if UNITY_EDITOR
				if (!Application.isPlaying) {
					FindReferences();
					attractor.FindReferences();
					Undo.RecordObject(this, "Round orbit");
				}
#endif
				var v = CelestialBodyUtils.CalcCircleOrbitVelocity(
					attractor._position,
					_position,
					attractor.mass,
					mass,
					orbitData.orbitNormal,
					simControlRef.gravitationalConstant
				);
				if (relativeVelocity == v) {
					relativeVelocity = -v;
				} else {
					relativeVelocity = v;
				}
				orbitData.isDirty = true;
			}
#if UNITY_EDITOR
 else {
				Debug.Log("SpaceGravity2D: Can't round orbit. " + name + " has no attractor");
			}
#endif
		}
示例#2
0
		/// <summary>
		/// Orbit plane will be unchanged.
		/// </summary>
		public void MakeOrbitCircle(bool clockwise) {
			if (attractor) {
#if UNITY_EDITOR
				if (!Application.isPlaying) {
					FindReferences();
					attractor.FindReferences();
					Undo.RecordObject(this, "Round orbit");
				}
#endif
				var dotProduct = CelestialBodyUtils.DotProduct(orbitData.orbitNormal, simControlRef.eclipticNormal); //sign of this value determines orbit orientation
				if (Mathd.Abs(orbitData.orbitNormal.sqrMagnitude - 1d) > 0.5d) {
					orbitData.orbitNormal = simControlRef.eclipticNormal;
				}
				var v = CelestialBodyUtils.CalcCircleOrbitVelocity(
					attractor._position,
					_position,
					attractor.mass,
					mass,
					orbitData.orbitNormal * ( clockwise && dotProduct >= 0 || !clockwise && dotProduct < 0 ? 1 : -1 ),
					simControlRef.gravitationalConstant
				);
				if (relativeVelocity != v) {
					relativeVelocity = v;
					orbitData.isDirty = true;
				}
			}
		}
示例#3
0
 public void SetAutoCircleOrbit()
 {
     if (AttractorObjectRef != null)
     {
         OrbitData.Velocity = CelestialBodyUtils.CalcCircleOrbitVelocity(Vector3d.zero, OrbitData.Position, OrbitData.AttractorMass, 1f, OrbitData.OrbitNormal, OrbitData.GravitationalConstant);
         OrbitData.CalculateNewOrbitData();
         if (VelocityHandleRef != null)
         {
             VelocityHandleRef.position = transform.position + (Vector3)OrbitData.Velocity;
         }
     }
 }