/// <summary> /// Tries to assume high orbit around the provided, already confirmed /// highOrbitTarget. Returns <c>true</c> once the ship is no longer /// actively underway and high orbit has been assumed, <c>false</c> otherwise. /// </summary> /// <param name="highOrbitTgt">The high orbit target.</param> /// <returns></returns> private bool AttemptHighOrbitAround(IShipOrbitable highOrbitTgt) { D.Assert(!IsInOrbit); D.AssertNull(_orbitingJoint); if (!_helm.IsActivelyUnderway) { Profiler.BeginSample("Proper AddComponent allocation", gameObject); _orbitingJoint = gameObject.AddComponent<FixedJoint>(); Profiler.EndSample(); highOrbitTgt.AssumeHighOrbit(this, _orbitingJoint); IMortalItem mortalHighOrbitTgt = highOrbitTgt as IMortalItem; if (mortalHighOrbitTgt != null) { mortalHighOrbitTgt.deathOneShot += OrbitedObjectDeathEventHandler; } _itemBeingOrbited = highOrbitTgt; D.Log(ShowDebugLog, "{0} has assumed high orbit around {1}.", DebugName, highOrbitTgt.DebugName); return true; } return false; }