private static string GetPawnRowTooltip(CachedSocialTabEntry entry, Pawn selPawnForSocialInfo) { StringBuilder stringBuilder = new StringBuilder(); if (entry.otherPawn.RaceProps.Humanlike && selPawnForSocialInfo.RaceProps.Humanlike) { stringBuilder.AppendLine(selPawnForSocialInfo.relations.OpinionExplanation(entry.otherPawn)); stringBuilder.AppendLine(); stringBuilder.Append("SomeonesOpinionOfMe".Translate(entry.otherPawn.LabelShort)); stringBuilder.Append(": "); stringBuilder.Append(entry.opinionOfMe.ToStringWithSign()); } else { stringBuilder.AppendLine(entry.otherPawn.LabelCapNoCount); string pawnSituationLabel = SocialCardUtility.GetPawnSituationLabel(entry.otherPawn, selPawnForSocialInfo); if (!pawnSituationLabel.NullOrEmpty()) { stringBuilder.AppendLine(pawnSituationLabel); } stringBuilder.AppendLine("--------------"); stringBuilder.Append(SocialCardUtility.GetRelationsString(entry, selPawnForSocialInfo)); } if (Prefs.DevMode) { stringBuilder.AppendLine(); stringBuilder.AppendLine("(debug) Compatibility: " + selPawnForSocialInfo.relations.CompatibilityWith(entry.otherPawn).ToString("F2")); stringBuilder.Append("(debug) RomanceChanceFactor: " + selPawnForSocialInfo.relations.SecondaryRomanceChanceFactor(entry.otherPawn).ToString("F2")); } return(stringBuilder.ToString()); }
private static void DrawMyOpinion(CachedSocialTabEntry entry, Rect rect, Pawn selPawnForSocialInfo) { if (entry.otherPawn.RaceProps.Humanlike && selPawnForSocialInfo.RaceProps.Humanlike) { int opinionOfOtherPawn = entry.opinionOfOtherPawn; GUI.color = OpinionLabelColor(opinionOfOtherPawn); Widgets.Label(rect, opinionOfOtherPawn.ToStringWithSign()); } }
private static void DrawPawnRow(float y, float width, CachedSocialTabEntry entry, Pawn selPawnForSocialInfo) { float rowHeight = GetRowHeight(entry, width, selPawnForSocialInfo); Rect rect = new Rect(0f, y, width, rowHeight); Pawn otherPawn = entry.otherPawn; if (Mouse.IsOver(rect)) { GUI.color = HighlightColor; GUI.DrawTexture(rect, TexUI.HighlightTex); } if (Mouse.IsOver(rect)) { TooltipHandler.TipRegion(rect, () => GetPawnRowTooltip(entry, selPawnForSocialInfo), entry.otherPawn.thingIDNumber * 13 + selPawnForSocialInfo.thingIDNumber); } if (Widgets.ButtonInvisible(rect)) { if (Current.ProgramState == ProgramState.Playing) { if (otherPawn.Dead) { Messages.Message("MessageCantSelectDeadPawn".Translate(otherPawn.LabelShort, otherPawn).CapitalizeFirst(), MessageTypeDefOf.RejectInput, historical: false); } else if (otherPawn.SpawnedOrAnyParentSpawned || otherPawn.IsCaravanMember()) { CameraJumper.TryJumpAndSelect(otherPawn); } else { Messages.Message("MessageCantSelectOffMapPawn".Translate(otherPawn.LabelShort, otherPawn).CapitalizeFirst(), MessageTypeDefOf.RejectInput, historical: false); } } else if (Find.GameInitData.startingAndOptionalPawns.Contains(otherPawn)) { Page_ConfigureStartingPawns page_ConfigureStartingPawns = Find.WindowStack.WindowOfType <Page_ConfigureStartingPawns>(); if (page_ConfigureStartingPawns != null) { page_ConfigureStartingPawns.SelectPawn(otherPawn); SoundDefOf.RowTabSelect.PlayOneShotOnCamera(); } } } CalculateColumnsWidths(width, out var relationsWidth, out var pawnLabelWidth, out var myOpinionWidth, out var hisOpinionWidth, out var pawnSituationLabelWidth); Rect rect2 = new Rect(5f, y + 3f, relationsWidth, rowHeight - 3f); DrawRelationLabel(entry, rect2, selPawnForSocialInfo); Rect rect3 = new Rect(rect2.xMax, y + 3f, pawnLabelWidth, rowHeight - 3f); DrawPawnLabel(otherPawn, rect3); Rect rect4 = new Rect(rect3.xMax, y + 3f, myOpinionWidth, rowHeight - 3f); DrawMyOpinion(entry, rect4, selPawnForSocialInfo); Rect rect5 = new Rect(rect4.xMax, y + 3f, hisOpinionWidth, rowHeight - 3f); DrawHisOpinion(entry, rect5, selPawnForSocialInfo); DrawPawnSituationLabel(rect: new Rect(rect5.xMax, y + 3f, pawnSituationLabelWidth, rowHeight - 3f), pawn: entry.otherPawn, selPawnForSocialInfo: selPawnForSocialInfo); }
private static float GetRowHeight(CachedSocialTabEntry entry, float rowWidth, Pawn selPawnForSocialInfo) { CalculateColumnsWidths(rowWidth, out float relationsWidth, out float pawnLabelWidth, out float _, out float _, out float _); float a = 0f; a = Mathf.Max(a, Text.CalcHeight(GetRelationsString(entry, selPawnForSocialInfo), relationsWidth)); a = Mathf.Max(a, Text.CalcHeight(GetPawnLabel(entry.otherPawn), pawnLabelWidth)); return(a + 3f); }
private static void DrawHisOpinion(CachedSocialTabEntry entry, Rect rect, Pawn selPawnForSocialInfo) { if (entry.otherPawn.RaceProps.Humanlike && selPawnForSocialInfo.RaceProps.Humanlike) { int opinionOfMe = entry.opinionOfMe; Color color = OpinionLabelColor(opinionOfMe); GUI.color = new Color(color.r, color.g, color.b, 0.4f); Widgets.Label(rect, "(" + opinionOfMe.ToStringWithSign() + ")"); } }
private static void DrawRelationLabel(CachedSocialTabEntry entry, Rect rect, Pawn selPawnForSocialInfo) { string relationsString = GetRelationsString(entry, selPawnForSocialInfo); if (!relationsString.NullOrEmpty()) { GUI.color = RelationLabelColor; Widgets.Label(rect, relationsString); } }
private static void Recache(Pawn selPawnForSocialInfo) { SocialCardUtility.cachedForPawn = selPawnForSocialInfo; SocialCardUtility.tmpToCache.Clear(); foreach (Pawn relatedPawn in selPawnForSocialInfo.relations.RelatedPawns) { if (SocialCardUtility.ShouldShowPawnRelations(relatedPawn, selPawnForSocialInfo)) { SocialCardUtility.tmpToCache.Add(relatedPawn); } } List <Pawn> list = null; if (selPawnForSocialInfo.MapHeld != null) { list = selPawnForSocialInfo.MapHeld.mapPawns.AllPawnsSpawned; } else if (selPawnForSocialInfo.IsCaravanMember()) { list = selPawnForSocialInfo.GetCaravan().PawnsListForReading; } if (list != null) { for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; if (pawn.RaceProps.Humanlike && pawn != selPawnForSocialInfo && SocialCardUtility.ShouldShowPawnRelations(pawn, selPawnForSocialInfo) && !SocialCardUtility.tmpToCache.Contains(pawn) && (selPawnForSocialInfo.relations.OpinionOf(pawn) != 0 || pawn.relations.OpinionOf(selPawnForSocialInfo) != 0)) { SocialCardUtility.tmpToCache.Add(pawn); } } } SocialCardUtility.cachedEntries.RemoveAll((CachedSocialTabEntry x) => !SocialCardUtility.tmpToCache.Contains(x.otherPawn)); SocialCardUtility.tmpCached.Clear(); for (int j = 0; j < SocialCardUtility.cachedEntries.Count; j++) { SocialCardUtility.tmpCached.Add(SocialCardUtility.cachedEntries[j].otherPawn); } foreach (Pawn item in SocialCardUtility.tmpToCache) { if (!SocialCardUtility.tmpCached.Contains(item)) { CachedSocialTabEntry cachedSocialTabEntry = new CachedSocialTabEntry(); cachedSocialTabEntry.otherPawn = item; SocialCardUtility.cachedEntries.Add(cachedSocialTabEntry); } } SocialCardUtility.tmpCached.Clear(); SocialCardUtility.tmpToCache.Clear(); for (int k = 0; k < SocialCardUtility.cachedEntries.Count; k++) { SocialCardUtility.RecacheEntry(SocialCardUtility.cachedEntries[k], selPawnForSocialInfo); } SocialCardUtility.cachedEntries.Sort(SocialCardUtility.CachedEntriesComparer); }
private static void RecacheEntryInt(CachedSocialTabEntry entry, Pawn selPawnForSocialInfo, int?opinionOfMe = null, int?opinionOfOtherPawn = null) { entry.opinionOfMe = (opinionOfMe.HasValue ? opinionOfMe.Value : entry.otherPawn.relations.OpinionOf(selPawnForSocialInfo)); entry.opinionOfOtherPawn = (opinionOfOtherPawn.HasValue ? opinionOfOtherPawn.Value : selPawnForSocialInfo.relations.OpinionOf(entry.otherPawn)); entry.relations.Clear(); foreach (PawnRelationDef relation in selPawnForSocialInfo.GetRelations(entry.otherPawn)) { entry.relations.Add(relation); } entry.relations.Sort((PawnRelationDef a, PawnRelationDef b) => b.importance.CompareTo(a.importance)); }
private static void RecacheEntry(CachedSocialTabEntry entry, Pawn selPawnForSocialInfo) { entry.opinionOfMe = entry.otherPawn.relations.OpinionOf(selPawnForSocialInfo); entry.opinionOfOtherPawn = selPawnForSocialInfo.relations.OpinionOf(entry.otherPawn); entry.relations.Clear(); foreach (PawnRelationDef relation in selPawnForSocialInfo.GetRelations(entry.otherPawn)) { entry.relations.Add(relation); } entry.relations.Sort((PawnRelationDef a, PawnRelationDef b) => b.importance.CompareTo(a.importance)); }
public static void GetPawnRowTooltip_Postfix(ref string __result, CachedSocialTabEntry entry, Pawn selPawnForSocialInfo) { if (!Prefs.DevMode) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(__result); stringBuilder.AppendLine("Compatibility: " + selPawnForSocialInfo.relations.CompatibilityWith(entry.otherPawn).ToString("F2")); stringBuilder.Append("Romance Chance Factor: " + selPawnForSocialInfo.relations.SecondaryRomanceChanceFactor(entry.otherPawn).ToString("F2")); __result = stringBuilder.ToString(); } }
private static float GetRowHeight(CachedSocialTabEntry entry, float rowWidth, Pawn selPawnForSocialInfo) { float width = default(float); float width2 = default(float); float num = default(float); float num2 = default(float); float num3 = default(float); SocialCardUtility.CalculateColumnsWidths(rowWidth, out width, out width2, out num, out num2, out num3); float a = 0f; a = Mathf.Max(a, Text.CalcHeight(SocialCardUtility.GetRelationsString(entry, selPawnForSocialInfo), width)); a = Mathf.Max(a, Text.CalcHeight(SocialCardUtility.GetPawnLabel(entry.otherPawn), width2)); return((float)(a + 3.0)); }
private static void RecacheEntry(Pawn pawn, Pawn selPawnForSocialInfo, int?opinionOfMe = null, int?opinionOfOtherPawn = null) { bool flag = false; foreach (CachedSocialTabEntry cachedEntry in cachedEntries) { if (cachedEntry.otherPawn == pawn) { RecacheEntryInt(cachedEntry, selPawnForSocialInfo, opinionOfMe, opinionOfOtherPawn); flag = true; } } if (!flag) { CachedSocialTabEntry cachedSocialTabEntry = new CachedSocialTabEntry(); cachedSocialTabEntry.otherPawn = pawn; RecacheEntryInt(cachedSocialTabEntry, selPawnForSocialInfo, opinionOfMe, opinionOfOtherPawn); cachedEntries.Add(cachedSocialTabEntry); } }
private static string GetRelationsString(CachedSocialTabEntry entry, Pawn selPawnForSocialInfo) { string text = string.Empty; if (entry.relations.Count == 0) { if (entry.opinionOfOtherPawn < -20) { return("Rival".Translate()); } if (entry.opinionOfOtherPawn > 20) { return("Friend".Translate()); } return("Acquaintance".Translate()); } for (int i = 0; i < entry.relations.Count; i++) { PawnRelationDef pawnRelationDef = entry.relations[i]; text = (text.NullOrEmpty() ? pawnRelationDef.GetGenderSpecificLabelCap(entry.otherPawn) : (text + ", " + pawnRelationDef.GetGenderSpecificLabel(entry.otherPawn))); } return(text); }
private static float GetRowHeight(CachedSocialTabEntry entry, float rowWidth, Pawn selPawnForSocialInfo) { CalculateColumnsWidths(rowWidth, out var relationsWidth, out var pawnLabelWidth, out var _, out var _, out var _); return(Mathf.Max(Mathf.Max(0f, Text.CalcHeight(GetRelationsString(entry, selPawnForSocialInfo), relationsWidth)), Text.CalcHeight(GetPawnLabel(entry.otherPawn), pawnLabelWidth)) + 3f); }
private static void DrawPawnRow(float y, float width, CachedSocialTabEntry entry, Pawn selPawnForSocialInfo) { float rowHeight = SocialCardUtility.GetRowHeight(entry, width, selPawnForSocialInfo); Rect rect = new Rect(0f, y, width, rowHeight); Pawn otherPawn = entry.otherPawn; if (Mouse.IsOver(rect)) { GUI.color = SocialCardUtility.HighlightColor; GUI.DrawTexture(rect, TexUI.HighlightTex); } TooltipHandler.TipRegion(rect, () => SocialCardUtility.GetPawnRowTooltip(entry, selPawnForSocialInfo), entry.otherPawn.thingIDNumber * 13 + selPawnForSocialInfo.thingIDNumber); if (Widgets.ButtonInvisible(rect, false)) { if (Current.ProgramState == ProgramState.Playing) { if (otherPawn.Dead) { Messages.Message("MessageCantSelectDeadPawn".Translate(otherPawn.LabelShort).CapitalizeFirst(), MessageTypeDefOf.RejectInput); } else if (otherPawn.SpawnedOrAnyParentSpawned || otherPawn.IsCaravanMember()) { CameraJumper.TryJumpAndSelect(otherPawn); } else { Messages.Message("MessageCantSelectOffMapPawn".Translate(otherPawn.LabelShort).CapitalizeFirst(), MessageTypeDefOf.RejectInput); } } else if (Find.GameInitData.startingPawns.Contains(otherPawn)) { Page_ConfigureStartingPawns page_ConfigureStartingPawns = Find.WindowStack.WindowOfType <Page_ConfigureStartingPawns>(); if (page_ConfigureStartingPawns != null) { page_ConfigureStartingPawns.SelectPawn(otherPawn); SoundDefOf.RowTabSelect.PlayOneShotOnCamera(null); } } } float width2 = default(float); float width3 = default(float); float width4 = default(float); float width5 = default(float); float width6 = default(float); SocialCardUtility.CalculateColumnsWidths(width, out width2, out width3, out width4, out width5, out width6); Rect rect2 = new Rect(5f, (float)(y + 3.0), width2, (float)(rowHeight - 3.0)); SocialCardUtility.DrawRelationLabel(entry, rect2, selPawnForSocialInfo); Rect rect3 = new Rect(rect2.xMax, (float)(y + 3.0), width3, (float)(rowHeight - 3.0)); SocialCardUtility.DrawPawnLabel(otherPawn, rect3); Rect rect4 = new Rect(rect3.xMax, (float)(y + 3.0), width4, (float)(rowHeight - 3.0)); SocialCardUtility.DrawMyOpinion(entry, rect4, selPawnForSocialInfo); Rect rect5 = new Rect(rect4.xMax, (float)(y + 3.0), width5, (float)(rowHeight - 3.0)); SocialCardUtility.DrawHisOpinion(entry, rect5, selPawnForSocialInfo); Rect rect6 = new Rect(rect5.xMax, (float)(y + 3.0), width6, (float)(rowHeight - 3.0)); SocialCardUtility.DrawPawnSituationLabel(entry.otherPawn, rect6, selPawnForSocialInfo); }