Esempio n. 1
0
        // transfer data from a drive to a vessel
        public static bool Transfer(Drive drive, Vessel dst, bool samples)
        {
            double dataAmount  = drive.FilesSize();
            int    sampleSlots = drive.SamplesSize();

            if (dataAmount < double.Epsilon && (sampleSlots == 0 || !samples))
            {
                return(true);
            }

            // get drives
            var allDst = GetDrives(dst);

            bool allMoved = true;

            foreach (var b in allDst)
            {
                if (drive.Move(b, samples))
                {
                    allMoved = true;
                    break;
                }
            }

            return(allMoved);
        }
Esempio n. 2
0
        /// <summary>
        /// If short_strings parameter is true then the strings used for display of the data will be shorter when inflight.
        /// </summary>
        public static void Fileman(this Panel p, Vessel v, bool short_strings = false)
        {
            // avoid corner-case when this is called in a lambda after scene changes
            v = FlightGlobals.FindVessel(v.id);

            // if vessel doesn't exist anymore, leave the panel empty
            if (v == null)
            {
                return;
            }

            // get info from the cache
            VesselData vd = v.KerbalismData();

            // if not a valid vessel, leave the panel empty
            if (!vd.IsSimulated)
            {
                return;
            }

            // set metadata
            p.Title(Lib.BuildString(Lib.Ellipsis(v.vesselName, Styles.ScaleStringLength(40)), " ", Lib.Color(Local.FILEMANAGER_title, Lib.Kolor.LightGrey)));            //"FILE MANAGER"
            p.Width(Styles.ScaleWidthFloat(465.0f));
            p.paneltype = Panel.PanelType.data;

            // time-out simulation
            if (!Lib.IsControlUnit(v) && p.Timeout(vd))
            {
                return;
            }

            List <ObjectPair <uint, Drive> > drives = new List <ObjectPair <uint, Drive> >();

            int    filesCount        = 0;
            double usedDataCapacity  = 0;
            double totalDataCapacity = 0;

            int    samplesCount     = 0;
            int    usedSlots        = 0;
            int    totalSlots       = 0;
            double totalMass        = 0;
            bool   unlimitedData    = false;
            bool   unlimitedSamples = false;

            foreach (PartData partData in vd.PartDatas)
            {
                Drive drive = partData.Drive;
                if (drive == null)
                {
                    continue;
                }

                drives.Add(new ObjectPair <uint, Drive>(partData.FlightId, drive));

                if (!drive.is_private)
                {
                    usedDataCapacity  += drive.FilesSize();
                    totalDataCapacity += drive.dataCapacity;

                    unlimitedData    |= drive.dataCapacity < 0;
                    unlimitedSamples |= drive.sampleCapacity < 0;

                    usedSlots  += drive.SamplesSize();
                    totalSlots += drive.sampleCapacity;
                }

                filesCount   += drive.files.Count;
                samplesCount += drive.samples.Count;
                foreach (var sample in drive.samples.Values)
                {
                    totalMass += sample.mass;
                }
            }

            if (filesCount > 0 || totalDataCapacity > 0)
            {
                var title = Local.FILEMANAGER_DataCapacity + " " + Lib.HumanReadableDataSize(usedDataCapacity);                //"DATA "
                if (!unlimitedData)
                {
                    title += Local.FILEMANAGER_DataAvailable.Format(Lib.HumanReadablePerc((totalDataCapacity - usedDataCapacity) / totalDataCapacity));                                //Lib.BuildString(" (", Lib.HumanReadablePerc((totalDataCapacity - usedDataCapacity) / totalDataCapacity), " available)");
                }
                p.AddSection(title);

                foreach (var drive in drives)
                {
                    foreach (File file in drive.Value.files.Values)
                    {
                        Render_file(p, drive.Key, file, drive.Value, short_strings && Lib.IsFlight(), v);
                    }
                }

                if (filesCount == 0)
                {
                    p.AddContent("<i>" + Local.FILEMANAGER_nofiles + "</i>", string.Empty);                             //no files
                }
            }

            if (samplesCount > 0 || totalSlots > 0)
            {
                var title = Local.FILEMANAGER_SAMPLESMass.Format(Lib.HumanReadableMass(totalMass)) + " " + Lib.HumanReadableSampleSize(usedSlots);                //"SAMPLES " +
                if (totalSlots > 0 && !unlimitedSamples)
                {
                    title += ", " + Lib.HumanReadableSampleSize(totalSlots) + " " + Local.FILEMANAGER_SAMPLESAvailable;                                                    //available
                }
                p.AddSection(title);

                foreach (var drive in drives)
                {
                    foreach (Sample sample in drive.Value.samples.Values)
                    {
                        Render_sample(p, drive.Key, sample, drive.Value, short_strings && Lib.IsFlight());
                    }
                }

                if (samplesCount == 0)
                {
                    p.AddContent("<i>" + Local.FILEMANAGER_nosamples + "</i>", string.Empty);                               //no samples
                }
            }
        }