Beispiel #1
0
        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());
        }
Beispiel #2
0
 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());
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 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() + ")");
     }
 }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 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));
 }
Beispiel #9
0
 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();
            }
        }
Beispiel #11
0
        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));
        }
Beispiel #12
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);
            }
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
 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);
 }
Beispiel #15
0
        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);
        }