示例#1
0
        internal static void FirstRun(Entity entity)
        {
            CargoTransferDB datablob = entity.GetDataBlob <CargoTransferDB>();

            double?dv;

            if (entity.HasDataBlob <OrbitDB>() && datablob.CargoToEntity.HasDataBlob <OrbitDB>())
            {
                dv = CalcDVDifferenceKmPerSecond(entity.GetDataBlob <OrbitDB>(), datablob.CargoToEntity.GetDataBlob <OrbitDB>());
            }
            else
            {
                OrbitDB orbitDB;
                if (entity.HasDataBlob <ColonyInfoDB>())
                {
                    orbitDB = entity.GetDataBlob <ColonyInfoDB>().PlanetEntity.GetDataBlob <OrbitDB>();
                }
                else//if (datablob.CargoToEntity.HasDataBlob<ColonyInfoDB>())
                {
                    orbitDB = datablob.CargoToEntity.GetDataBlob <ColonyInfoDB>().PlanetEntity.GetDataBlob <OrbitDB>();
                }
                dv = Distance.AuToKm(OrbitMath.MeanOrbitalVelocityInAU(orbitDB));
            }
            if (dv != null)
            {
                datablob.TransferRateInKG = CalcTransferRate((double)dv, datablob.CargoFromDB, datablob.CargoToDB);
            }
        }
示例#2
0
        /// <summary>
        /// Calculates the DVD ifference.
        /// </summary>
        /// <returns>The delaV Difference in Km/s, null if not in imediate orbit</returns>
        public static double?CalcDVDifferenceKmPerSecond(OrbitDB orbitDBFrom, OrbitDB orbitDBTo)
        {
            Entity toEntity = orbitDBTo.OwningEntity;
            double?dv       = null;

            if (orbitDBFrom.Parent == toEntity) //Cargo going up the gravity well
            {
                dv = OrbitMath.MeanOrbitalVelocityInAU(orbitDBFrom);
            }
            else if (orbitDBFrom.Children.Contains(toEntity)) //Cargo going down the gravity well
            {
                dv = OrbitMath.MeanOrbitalVelocityInAU(orbitDBTo);
            }
            else if (orbitDBFrom.Parent == toEntity.GetDataBlob <OrbitDB>().Parent) //cargo going between objects orbiting the same body
            {
                dv = Math.Abs(OrbitMath.MeanOrbitalVelocityInAU(orbitDBFrom) - OrbitMath.MeanOrbitalVelocityInAU(orbitDBTo));
            }

            if (dv == null)
            {
                return(dv);
            }
            else
            {
                return(Distance.AuToKm((double)dv));
            }
        }