Ejemplo n.º 1
0
        private static string GetRelationsString(SocialCardUtility.CachedSocialTabEntry entry, Pawn selPawnForSocialInfo)
        {
            string text = string.Empty;

            if (entry.relations.Count != 0)
            {
                for (int i = 0; i < entry.relations.Count; i++)
                {
                    PawnRelationDef pawnRelationDef = entry.relations[i];
                    if (!text.NullOrEmpty())
                    {
                        text = text + ", " + pawnRelationDef.GetGenderSpecificLabel(entry.otherPawn);
                    }
                    else
                    {
                        text = pawnRelationDef.GetGenderSpecificLabelCap(entry.otherPawn);
                    }
                }
                return(text);
            }
            if (entry.opinionOfOtherPawn < -20)
            {
                return("Rival".Translate());
            }
            if (entry.opinionOfOtherPawn > 20)
            {
                return("Friend".Translate());
            }
            return("Acquaintance".Translate());
        }
Ejemplo n.º 2
0
        private static string GetPawnRowTooltip(SocialCardUtility.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(new object[]
                {
                    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());
        }
Ejemplo n.º 3
0
        private static void Recache(Pawn selPawnForSocialInfo)
        {
            SocialCardUtility.cachedForPawn = selPawnForSocialInfo;
            SocialCardUtility.tmpToCache.Clear();
            foreach (Pawn current in selPawnForSocialInfo.relations.RelatedPawns)
            {
                if (SocialCardUtility.ShouldShowPawnRelations(current, selPawnForSocialInfo))
                {
                    SocialCardUtility.tmpToCache.Add(current);
                }
            }
            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))
                    {
                        if (selPawnForSocialInfo.relations.OpinionOf(pawn) != 0 || pawn.relations.OpinionOf(selPawnForSocialInfo) != 0)
                        {
                            SocialCardUtility.tmpToCache.Add(pawn);
                        }
                    }
                }
            }
            SocialCardUtility.cachedEntries.RemoveAll((SocialCardUtility.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 current2 in SocialCardUtility.tmpToCache)
            {
                if (!SocialCardUtility.tmpCached.Contains(current2))
                {
                    SocialCardUtility.CachedSocialTabEntry cachedSocialTabEntry = new SocialCardUtility.CachedSocialTabEntry();
                    cachedSocialTabEntry.otherPawn = current2;
                    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);
        }
Ejemplo n.º 4
0
        private static void DrawRelationLabel(SocialCardUtility.CachedSocialTabEntry entry, Rect rect, Pawn selPawnForSocialInfo)
        {
            string relationsString = SocialCardUtility.GetRelationsString(entry, selPawnForSocialInfo);

            if (!relationsString.NullOrEmpty())
            {
                GUI.color = SocialCardUtility.RelationLabelColor;
                Widgets.Label(rect, relationsString);
            }
        }
Ejemplo n.º 5
0
        private static void DrawMyOpinion(SocialCardUtility.CachedSocialTabEntry entry, Rect rect, Pawn selPawnForSocialInfo)
        {
            if (!entry.otherPawn.RaceProps.Humanlike || !selPawnForSocialInfo.RaceProps.Humanlike)
            {
                return;
            }
            int opinionOfOtherPawn = entry.opinionOfOtherPawn;

            GUI.color = SocialCardUtility.OpinionLabelColor(opinionOfOtherPawn);
            Widgets.Label(rect, opinionOfOtherPawn.ToStringWithSign());
        }
Ejemplo n.º 6
0
 private static void RecacheEntry(SocialCardUtility.CachedSocialTabEntry entry, Pawn selPawnForSocialInfo)
 {
     entry.opinionOfMe        = entry.otherPawn.relations.OpinionOf(selPawnForSocialInfo);
     entry.opinionOfOtherPawn = selPawnForSocialInfo.relations.OpinionOf(entry.otherPawn);
     entry.relations.Clear();
     foreach (PawnRelationDef current in selPawnForSocialInfo.GetRelations(entry.otherPawn))
     {
         entry.relations.Add(current);
     }
     entry.relations.Sort((PawnRelationDef a, PawnRelationDef b) => b.importance.CompareTo(a.importance));
 }
Ejemplo n.º 7
0
        private static void DrawHisOpinion(SocialCardUtility.CachedSocialTabEntry entry, Rect rect, Pawn selPawnForSocialInfo)
        {
            if (!entry.otherPawn.RaceProps.Humanlike || !selPawnForSocialInfo.RaceProps.Humanlike)
            {
                return;
            }
            int   opinionOfMe = entry.opinionOfMe;
            Color color       = SocialCardUtility.OpinionLabelColor(opinionOfMe);

            GUI.color = new Color(color.r, color.g, color.b, 0.4f);
            Widgets.Label(rect, "(" + opinionOfMe.ToStringWithSign() + ")");
        }
Ejemplo n.º 8
0
        private static float GetRowHeight(SocialCardUtility.CachedSocialTabEntry entry, float rowWidth, Pawn selPawnForSocialInfo)
        {
            float width;
            float width2;
            float num;
            float num2;
            float num3;

            SocialCardUtility.CalculateColumnsWidths(rowWidth, out width, out width2, out num, out num2, out num3);
            float num4 = 0f;

            num4 = Mathf.Max(num4, Text.CalcHeight(SocialCardUtility.GetRelationsString(entry, selPawnForSocialInfo), width));
            num4 = Mathf.Max(num4, Text.CalcHeight(SocialCardUtility.GetPawnLabel(entry.otherPawn), width2));
            return(num4 + 3f);
        }
Ejemplo n.º 9
0
        private static void DrawPawnRow(float y, float width, SocialCardUtility.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(new object[]
                        {
                            otherPawn.LabelShort
                        }).CapitalizeFirst(), MessageTypeDefOf.RejectInput, false);
                    }
                    else if (otherPawn.SpawnedOrAnyParentSpawned || otherPawn.IsCaravanMember())
                    {
                        CameraJumper.TryJumpAndSelect(otherPawn);
                    }
                    else
                    {
                        Messages.Message("MessageCantSelectOffMapPawn".Translate(new object[]
                        {
                            otherPawn.LabelShort
                        }).CapitalizeFirst(), MessageTypeDefOf.RejectInput, 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(null);
                    }
                }
            }
            float width2;
            float width3;
            float width4;
            float width5;
            float width6;

            SocialCardUtility.CalculateColumnsWidths(width, out width2, out width3, out width4, out width5, out width6);
            Rect rect2 = new Rect(5f, y + 3f, width2, rowHeight - 3f);

            SocialCardUtility.DrawRelationLabel(entry, rect2, selPawnForSocialInfo);
            Rect rect3 = new Rect(rect2.xMax, y + 3f, width3, rowHeight - 3f);

            SocialCardUtility.DrawPawnLabel(otherPawn, rect3);
            Rect rect4 = new Rect(rect3.xMax, y + 3f, width4, rowHeight - 3f);

            SocialCardUtility.DrawMyOpinion(entry, rect4, selPawnForSocialInfo);
            Rect rect5 = new Rect(rect4.xMax, y + 3f, width5, rowHeight - 3f);

            SocialCardUtility.DrawHisOpinion(entry, rect5, selPawnForSocialInfo);
            Rect rect6 = new Rect(rect5.xMax, y + 3f, width6, rowHeight - 3f);

            SocialCardUtility.DrawPawnSituationLabel(entry.otherPawn, rect6, selPawnForSocialInfo);
        }