/// <summary> /// Find and return referneces to three bodies: self, target and mutual attractor. /// Additional attractors chain arrays are used when mutual attractor is not direct parent of target body. /// If mutual attractor not existent, or target not assigned, then return empty data. /// </summary> /// <returns>All references data, or empty data if not found.</returns> public BodiesReferencesData GetBodiesReferences() { if (_orbitMover == null) { _orbitMover = GetComponent <KeplerOrbitMover>(); } if (_orbitMover == null || Target == null || _orbitMover == Target) { return(default(BodiesReferencesData)); } List <KeplerOrbitMover> attractorsA = new List <KeplerOrbitMover>(); List <KeplerOrbitMover> attractorsB = new List <KeplerOrbitMover>(); double mass = 0; double g = 0; Transform mutualAttractor = KeplerOrbitUtils.FindMutualAttractor( a: _orbitMover, b: Target, isGetFullChain: false, attractorsAChain: ref attractorsA, attractorsBChain: ref attractorsB, mass: ref mass, gConst: ref g); if (mutualAttractor != null) { return(new BodiesReferencesData() { Origin = _orbitMover, Target = Target, Attractor = mutualAttractor, OriginAttractorsChain = attractorsA.ToArray(), TargetAttractorsChain = attractorsB.ToArray(), AttractorMass = mass, GConst = g, }); } return(default(BodiesReferencesData)); }