/// <summary> /// Initializes a new instance of the <see cref="ShipOrbitSlot" /> class. /// </summary> /// <param name="lowOrbitRadius">The radius at this slot's lowest orbit.</param> /// <param name="highOrbitRadius">The radius at this slot's highest orbit.</param> /// <param name="orbitedObject">The object being orbited.</param> /// <param name="orbitPeriod">The orbit period.</param> public ShipOrbitSlot(float lowOrbitRadius, float highOrbitRadius, IShipCloseOrbitable orbitedObject, GameTimeDuration orbitPeriod) : base(lowOrbitRadius, highOrbitRadius, orbitedObject.IsMobile, orbitPeriod, toOrbit: true) { OrbitedObject = orbitedObject; //_orbitingShips = new List<IShipItem>(); }
//public IShipOrbitSimulator OrbitSimulator { get; private set; } //private IList<IShipItem> _orbitingShips; /// <summary> /// Initializes a new instance of the <see cref="ShipOrbitSlot"/> class. /// The OrbitPeriod defaults to OneYear. /// </summary> /// <param name="lowOrbitRadius">The radius at this slot's lowest orbit.</param> /// <param name="highOrbitRadius">The radius at this slot's highest orbit.</param> /// <param name="orbitedObject">The orbited object.</param> public ShipOrbitSlot(float lowOrbitRadius, float highOrbitRadius, IShipCloseOrbitable orbitedObject) : this(lowOrbitRadius, highOrbitRadius, orbitedObject, GameTimeDuration.OneYear) { }
void Disbanding_UponOrbitedObjectDeath(IShipCloseOrbitable deadOrbitedObject) { BreakOrbit(); }
/// <summary> /// Tries to assume close orbit around the provided, already confirmed /// closeOrbitTarget. Returns <c>true</c> once the ship is no longer /// actively underway and close orbit has been assumed, <c>false</c> otherwise. /// </summary> /// <param name="closeOrbitTgt">The close orbit target.</param> /// <returns></returns> private bool AttemptCloseOrbitAround(IShipCloseOrbitable closeOrbitTgt) { D.Assert(!IsInOrbit); D.AssertNull(_orbitingJoint); if (!_helm.IsActivelyUnderway) { Profiler.BeginSample("Proper AddComponent allocation", gameObject); _orbitingJoint = gameObject.AddComponent<FixedJoint>(); Profiler.EndSample(); closeOrbitTgt.AssumeCloseOrbit(this, _orbitingJoint); IMortalItem mortalCloseOrbitTgt = closeOrbitTgt as IMortalItem; if (mortalCloseOrbitTgt != null) { mortalCloseOrbitTgt.deathOneShot += OrbitedObjectDeathEventHandler; } _itemBeingOrbited = closeOrbitTgt; D.LogBold(ShowDebugLog, "{0} has assumed close orbit around {1}.", DebugName, closeOrbitTgt.DebugName); return true; } return false; }
void Refitting_UponOrbitedObjectDeath(IShipCloseOrbitable deadOrbitedObject) { BreakOrbit(); }