Beispiel #1
0
        private void LateUpdate()
        {
            if (!astronautComplexSpawned || updateDone)
            {
                return;
            }
            // ReSharper disable once Unity.PerformanceCriticalCodeInvocation
            // ReSharper disable once Unity.PerformanceCriticalCodeInvocation;
            List <CrewListItem> crewToOverwrite = GetCrewToOverwrite(FindObjectsOfType <CrewListItem>().ToList());

            if (HighLogic.CurrentGame.CrewRoster.GetAvailableCrewCount() == 0)
            {
                updateDone = true;
            }
            // ReSharper disable once Unity.PerformanceCriticalCodeInvocation
            Debug.Log("[EarnYourStripes]: Attempting to override AstronautComplex UI");
            for (int i = 0; i < crewToOverwrite.Count; i++)
            {
                CrewListItem    crewContainer = crewToOverwrite.ElementAt(i);
                ProtoCrewMember p             = crewContainer.GetCrewRef();
                string          kerbalName    = p.name;
                double          flightTime    = FlightTrackerApi.Instance.GetRecordedMissionTimeSeconds(kerbalName);
                kerbalName = p.name + " (" + ConvertUtToString(flightTime) + " hrs)";
                if (crewContainer.GetName() == kerbalName)
                {
                    updateDone = true;
                }
                if (p.rosterStatus == ProtoCrewMember.RosterStatus.Available)
                {
                    crewContainer.SetName(kerbalName);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Return value positive means left > right, return value negative means left < right
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        static int UIList_Cmp(UIListItem left, UIListItem right)
        {
            CrewListItem ldata = null;
            CrewListItem rdata = null;

            try { ldata = left.GetComponent <CrewListItem>(); } catch { return(1); }
            try { rdata = right.GetComponent <CrewListItem>(); } catch { return(-1); }

#if DEBUG
            if (ldata == null)
            {
                return(1);
            }
            if (rdata == null)
            {
                return(-1);
            }
#endif

            bool ltourist = ldata.GetCrewRef().type == ProtoCrewMember.KerbalType.Tourist;
            bool rtourist = rdata.GetCrewRef().type == ProtoCrewMember.KerbalType.Tourist;

            if (ltourist && !rtourist)
            {
                return(1);
            }                                        // tourists are also sorted to the end
            if (!ltourist && rtourist)
            {
                return(-1);
            }                                         // tourists are also sorted to the end

            return(ldata.GetName().CompareTo(rdata.GetName()));
        }
Beispiel #3
0
        private void LateUpdate()
        {
            if (!astronautComplexSpawned || updateCount <= 0)
            {
                return;
            }
            // ReSharper disable once Unity.PerformanceCriticalCodeInvocation
            List <CrewListItem> crewItems = FindObjectsOfType <CrewListItem>().ToList();

            updateCount--;
            for (int i = 0; i < crewItems.Count; i++)
            {
                CrewListItem c = crewItems.ElementAt(i);
                if (c.GetCrewRef().type != ProtoCrewMember.KerbalType.Crew)
                {
                    continue;
                }
                // ReSharper disable once Unity.PerformanceCriticalCodeInvocation
                c.SetLabel(GenerateAstronautString(c.GetCrewRef().name));
            }
        }
Beispiel #4
0
        private static List <CrewListItem> GetCrewToOverwrite(IReadOnlyCollection <CrewListItem> crewItemContainers)
        {
            List <CrewListItem> crewToOverwrite = new List <CrewListItem>();

            for (int i = 0; i < crewItemContainers.Count; i++)
            {
                CrewListItem    crewContainer = crewItemContainers.ElementAt(i);
                ProtoCrewMember p             = crewContainer.GetCrewRef();
                if (p.type == ProtoCrewMember.KerbalType.Applicant || p.type == ProtoCrewMember.KerbalType.Tourist)
                {
                    continue;
                }
                crewToOverwrite.Add(crewContainer);
            }
            return(crewToOverwrite);
        }
Beispiel #5
0
        private void FixTooltip(CrewListItem cli)
        {
            ProtoCrewMember pcm = cli.GetCrewRef();

            if (RetirementEnabled && KerbalRetireTimes.TryGetValue(pcm.name, out double retTime))
            {
                cli.SetTooltip(pcm);
                var ttc = _cliTooltip.GetValue(cli) as TooltipController_CrewAC;
                ttc.descriptionString += $"\n\nRetires no earlier than {KSPUtil.PrintDate(retTime, false)}";

                // Training
                string trainingStr = GetTrainingString(pcm);
                if (!string.IsNullOrEmpty(trainingStr))
                {
                    ttc.descriptionString += trainingStr;
                }
            }
        }
Beispiel #6
0
        private void FixAstronauComplexUI()
        {
            if (_astronautComplex == null)
            {
                AstronautComplex[] mbs = FindObjectsOfType <AstronautComplex>();
                int maxCount           = -1;
                foreach (AstronautComplex c in mbs)
                {
                    int count = c.ScrollListApplicants.Count + c.ScrollListAssigned.Count + c.ScrollListAvailable.Count + c.ScrollListKia.Count;
                    if (count > maxCount)
                    {
                        maxCount          = count;
                        _astronautComplex = c;
                    }
                }

                if (_astronautComplex == null)
                {
                    return;
                }
            }
            int newAv   = _astronautComplex.ScrollListAvailable.Count;
            int newAsgn = _astronautComplex.ScrollListAssigned.Count;
            int newKIA  = _astronautComplex.ScrollListKia.Count;

            if (newAv != _countAvailable || newKIA != _countKIA || newAsgn != _countAssigned)
            {
                _countAvailable = newAv;
                _countAssigned  = newAsgn;
                _countKIA       = newKIA;

                foreach (UIListData <UIListItem> u in _astronautComplex.ScrollListAvailable)
                {
                    CrewListItem cli = u.listItem.GetComponent <CrewListItem>();
                    if (cli == null)
                    {
                        continue;
                    }

                    FixTooltip(cli);
                    if (cli.GetCrewRef().inactive)
                    {
                        cli.MouseoverEnabled = false;
                        bool notTraining = true;
                        for (int i = ActiveCourses.Count; i-- > 0 && notTraining;)
                        {
                            foreach (ProtoCrewMember pcm in ActiveCourses[i].Students)
                            {
                                if (pcm == cli.GetCrewRef())
                                {
                                    notTraining = false;
                                    cli.SetLabel("Training, done " + KSPUtil.PrintDate(ActiveCourses[i].startTime + ActiveCourses[i].GetTime(ActiveCourses[i].Students), false));
                                    break;
                                }
                            }
                        }
                        if (notTraining)
                        {
                            cli.SetLabel("Recovering");
                        }
                    }
                }

                foreach (UIListData <UIListItem> u in _astronautComplex.ScrollListAssigned)
                {
                    CrewListItem cli = u.listItem.GetComponent <CrewListItem>();
                    if (cli != null)
                    {
                        FixTooltip(cli);
                    }
                }

                foreach (UIListData <UIListItem> u in _astronautComplex.ScrollListKia)
                {
                    CrewListItem cli = u.listItem.GetComponent <CrewListItem>();
                    if (cli != null)
                    {
                        if (_retirees.Contains(cli.GetName()))
                        {
                            cli.SetLabel("Retired");
                            cli.MouseoverEnabled = false;
                        }
                    }
                }
            }
        }