示例#1
0
 /// <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>();
 }
示例#2
0
        //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) {
        }
示例#3
0
 void Disbanding_UponOrbitedObjectDeath(IShipCloseOrbitable deadOrbitedObject) {
     BreakOrbit();
 }
示例#4
0
    /// <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;
    }
示例#5
0
 void Refitting_UponOrbitedObjectDeath(IShipCloseOrbitable deadOrbitedObject) {
     BreakOrbit();
 }