private void LateUpdate() { if (!FlightGlobals.ready) { return; } if (FlightGlobals.ActiveVessel == null) { return; } if (FlightGlobals.ActiveVessel.isEVA) { return; } if (reload) { reload = false; var crew = KerbalPortraitGallery.Instance.Portraits; for (int i = 0; i < crew.Count; i++) { KerbalPortrait p = crew[i]; if (p == null) { continue; } Kerbal k = p.crewMember; if (k == null) { return; } if (currentCrew.Contains(p.crewMemberName)) { continue; } if (k.state == Kerbal.States.DEAD) { continue; } KerbalTrait K = new KerbalTrait(k, p); if (K == null) { continue; } currentCrew.Add(p.crewMemberName, K); } } }
private void Update() { if (!transferButton && !hoverHighlight) { return; } var enumerator = currentCrew.GetDictEnumerator(); while (enumerator.MoveNext()) { KerbalTrait k = enumerator.Current.Value; if (k == null) { continue; } if (k.Portrait.hoverArea.Hover) { if (extendedTooltips) { k.Portrait.tooltip.descriptionString = k.CachedTooltip + extraTooltip(k); } if (transferButton) { Vessel v = k.Crew.InPart.vessel; if (v.GetCrewCapacity() > v.GetCrewCount()) { if (!k.TransferButton.gameObject.activeSelf) { k.TransferButton.gameObject.SetActive(true); } } else if (k.TransferButton.gameObject.activeSelf) { k.TransferButton.gameObject.SetActive(false); } } k.setHighlight(hoverHighlight); } else { k.setHighlight(false); } } }
private string extraTooltip(KerbalTrait k) { StringBuilder sb = StringBuilderCache.Acquire(); if (k.ProtoCrew.experienceTrait.Config.Name == "Tourist") { sb.AppendLine(); sb.AppendLine(); sb.AppendFormat("<b>{0}</b>", Localizer.Format("#PORTRAIT_STATS_UI_ITINERARY", k.ProtoCrew.name)); if (k.TouristParams.Count > 0) { for (int i = 0; i < k.TouristParams.Count; i++) { sb.AppendLine(); sb.Append(k.TouristParams[i]); } } else { sb.AppendLine(); sb.Append(go_home); } sb.AppendLine(); sb.AppendLine(); sb.Append(k.Crew.InPart.partInfo.title); } else { sb.AppendLine(); sb.AppendLine(); sb.AppendFormat("<b>{0}</b> {1:P0} <b>{2}</b> {3:P0}", courage, k.ProtoCrew.courage, stupidity, k.ProtoCrew.stupidity); bool vet = k.ProtoCrew.veteran; bool bad = k.ProtoCrew.isBadass; if (vet || bad) { sb.AppendLine(); if (vet) { sb.Append(veteran); } if (bad) { if (vet) { sb.AppendFormat(" - {0}", badass); } else { sb.Append(badass); } } } sb.AppendLine(); sb.AppendLine(); sb.Append(k.Crew.InPart.partInfo.title); sb.AppendLine(); sb.AppendLine(); if (PortraitStats.Instance.careerMode) { sb.AppendFormat("<b>{0}</b> {1:F2}/{2}", experience, k.ProtoCrew.experience, KerbalRoster.GetExperienceLevelRequirement(k.ProtoCrew.experienceLevel)); } string log = KerbalRoster.GenerateExperienceLog(k.ProtoCrew.flightLog); if (!string.IsNullOrEmpty(log)) { sb.AppendLine(); sb.AppendLine(); sb.AppendFormat("<b>{0}</b>", current_flight); sb.AppendLine(); sb.Append(log); } } return(sb.ToStringAndRelease()); }