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); } } }
/// <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())); }
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)); } }
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); }
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; } } }
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; } } } } }