示例#1
0
 public string GetTooltip(Pawn pawn = null)
 {
     if (cachedTooltip == null)
     {
         cachedTooltip = base.LabelCap + ((level > 0) ? ((string)("\n" + "Level".Translate() + " ") + level) : "") + "\n\n" + description;
         string text = StatSummary.ToLineList();
         if (!text.NullOrEmpty())
         {
             cachedTooltip = cachedTooltip + "\n\n" + text;
         }
     }
     if (pawn != null && ModsConfig.RoyaltyActive && abilityClass == typeof(Psycast) && level > 0)
     {
         Faction first = Faction.GetMinTitleForImplantAllFactions(HediffDefOf.PsychicAmplifier).First;
         if (first != null)
         {
             RoyalTitleDef minTitleForImplant = first.GetMinTitleForImplant(HediffDefOf.PsychicAmplifier, level);
             RoyalTitleDef currentTitle       = pawn.royalty.GetCurrentTitle(first);
             if (minTitleForImplant != null && (currentTitle == null || currentTitle.seniority < minTitleForImplant.seniority) && DetectionChance > 0f)
             {
                 return(cachedTooltip + "\n\n" + ColoredText.Colorize("PsycastIsIllegal".Translate(pawn.Named("PAWN"), minTitleForImplant.GetLabelCapFor(pawn).Named("TITLE")), ColoredText.WarningColor));
             }
         }
     }
     return(cachedTooltip);
 }
示例#2
0
 void ChangeText()
 {
     stringToRaceIndex   = GetNextStringToRaceIndex();
     coloredStringToRace = GetNextColoredText();
     index = 0;
     UpdateColoredText();
 }
示例#3
0
        public static IEnumerable <TraitItem> ToTraitItems([NotNull] this TraitDef trait)
        {
            if (trait.degreeDatas == null)
            {
                return(new[]
                {
                    new TraitItem
                    {
                        DefName = trait.defName,
                        Degree = 0,
                        CanAdd = true,
                        CanRemove = true,
                        Name = ColoredText.StripTags(trait.label).ToToolkit(),
                        CostToAdd = 3500,
                        CostToRemove = 5500
                    }
                });
            }

            return(trait.degreeDatas.Select(
                       t => new TraitItem
            {
                DefName = trait.defName,
                Degree = t.degree,
                CostToAdd = 3500,
                CostToRemove = 5500,
                CanAdd = true,
                CanRemove = true,
                Name = ColoredText.StripTags(t.label).ToToolkit()
            }
                       )
                   .ToArray());
        }
        private static string MakeBodyPartText(Pawn pawn, BodyPartRecord part, Hediff replacingPart)
        {
            string bodyPartText;

            if (part == null)
            {
                bodyPartText = ColoredText.Colorize("WholeBody".Translate(), Color.grey);
            }
            else
            {
                Color healthColor = GetHealthColorForBodypart(pawn, part);
                if (replacingPart != null)
                {
                    //diffs = diffs.Where(x => x != replacingPart); //do not list this hediff
                    var replacingPartColorLabel = ColoredText.Colorize(replacingPart.Label, replacingPart.def.defaultLabelColor);
                    var regex = new Regex(@"\b" + part.def.label + @"\b");
                    if (regex.IsMatch(replacingPart.Label) && regex.IsMatch(part.Label))
                    {
                        replacingPartColorLabel = replacingPartColorLabel.Replace(part.def.label, ColoredText.Colorize(part.def.label, healthColor));
                        bodyPartText            = ColoredText.Colorize(part.Label.Replace(part.def.label, replacingPartColorLabel), healthColor);
                    }
                    else
                    {
                        bodyPartText = ColoredText.Colorize(part.Label + ", ", healthColor) + replacingPartColorLabel;
                    }
                }
                else
                {
                    bodyPartText = ColoredText.Colorize(part.Label, healthColor);
                }
            }

            bodyPartText = bodyPartText.CapitalizeFirstNestingAware();
            return(bodyPartText);
        }
示例#5
0
 private void Previous()
 {
     for (int i = 0; i < menuEntries.Count; i++)
     {
         if (menuEntries[i] is ColoredText)
         {
             if (i == 0)
             {
                 menuEntries[0] = new SimpleText(Game, menuEntries[0].Text, false, menuEntries[0].Name);
                 menuEntries[menuEntries.Count - 1] = new ColoredText(Game,
                                                                      menuEntries[menuEntries.Count - 1].Text,
                                                                      false,
                                                                      menuEntries[menuEntries.Count - 1].Name);
             }
             else
             {
                 menuEntries[i]     = new SimpleText(Game, menuEntries[i].Text, false, menuEntries[i].Name);
                 menuEntries[i - 1] = new ColoredText(Game, menuEntries[i - 1].Text, false,
                                                      menuEntries[i - 1].Name);
             }
             SetPositionsAfterEntarence();
             return;
         }
     }
 }
        private static void DrawRow(Rect givenArea, HopeWorker worker)
        {
            Text.Font   = GameFont.Small;
            Text.Anchor = TextAnchor.MiddleLeft;
            GUI.BeginGroup(givenArea);

            // Main stuff
            Rect boundingRect = new Rect(0, 0, givenArea.width, EntryHeight);

            Widgets.DrawHighlightIfMouseover(boundingRect);

            // Tooltip
            sharedStringBuilder.Clear();
            sharedStringBuilder.AppendLine(worker.HopeDescription);
            sharedStringBuilder.AppendLine("\n");
            sharedStringBuilder.AppendLine(worker.HopeFlavorText);
            sharedStringBuilder.AppendLine("\n");
            sharedStringBuilder.AppendLine(worker.Hint);
            string       descriptionString = worker.HopeDescription;
            TaggedString flavorString      = ColoredText.Colorize(worker.HopeFlavorText, GenColor.FromHex("a0a0a0"));
            TaggedString hintString        = ColoredText.Colorize("Hint: ", ColoredText.CurrencyColor) + worker.Hint;
            TaggedString overallString     = descriptionString + "\n\n" + flavorString + "\n\n" + hintString;

            TooltipHandler.TipRegion(boundingRect, overallString);

            int valueWidth = 40;

            // Label stuff
            Rect textRect = new Rect(0, 0, boundingRect.width - valueWidth, boundingRect.height);

            textRect.xMin += 10;
            textRect.xMax -= 10;
            Widgets.Label(textRect, worker.HopeName.CapitalizeFirst());

            // Value stuff
            Text.WordWrap = false;
            Rect valueRect = new Rect(boundingRect.width - valueWidth, 0, valueWidth, boundingRect.height);

            Text.Anchor = TextAnchor.MiddleRight;
            float value = worker.CurrentHopeLevel;

            if (value >= 0)
            {
                GUI.color = PositiveColor;
            }
            else
            {
                GUI.color = NegativeColor;
            }
            Widgets.Label(valueRect, value.ToString("##0.0"));

            // Reset stuff
            Text.Anchor   = TextAnchor.UpperLeft;
            GUI.color     = Color.white;
            Text.WordWrap = true;

            // End group
            GUI.EndGroup();
        }
示例#7
0
        public static ColoredText Apply(ColoredText targetColor)
        {
            var old = targetColor.ForegroundRgb;

            var top = old
                      .OrderByDescending(a => a)
                      .GroupToArrayDictionary(a => a)
                      .First();
示例#8
0
 void Start()
 {
     if (useDebug)
     {
         dictionary = debugDictionary;
     }
     stringToRaceIndex   = GetNextStringToRaceIndex();
     coloredStringToRace = GetNextColoredText();
     UpdateColoredText();
 }
示例#9
0
        public IEnumerable <ColoredText> Highlight(string text)
        {
            var isFirst = true;

            byte[] bg = null, fg = null;
            var    sb = new StringBuilder();

            foreach (var t in HighlightCore(text))
            {
                if (isFirst)
                {
                    sb.Append(t.Text);
                    fg      = t.ForegroundRgb;
                    bg      = t.BackgroundRgb;
                    isFirst = false;
                }
                else
                {
                    if ((fg == null && t.ForegroundRgb != null) ||
                        (bg == null && t.BackgroundRgb != null) ||
                        (fg != null &&
                         (fg[0] != t.ForegroundRgb[0] ||
                          fg[1] != t.ForegroundRgb[1] ||
                          fg[2] != t.ForegroundRgb[2])) ||
                        (bg != null &&
                         (bg[0] != t.BackgroundRgb[0] ||
                          bg[1] != t.BackgroundRgb[1] ||
                          bg[2] != t.BackgroundRgb[2])))
                    {
                        var ct = new ColoredText(fg, bg, sb.ToString());
                        sb.Clear();
                        sb.Append(t.Text);
                        fg = t.ForegroundRgb;
                        bg = t.BackgroundRgb;

                        yield return(ct);
                    }
                    else
                    {
                        sb.Append(t.Text);
                    }
                }
            }

            if (!isFirst)
            {
                yield return(new ColoredText(fg, bg, sb.ToString()));
            }
        }
示例#10
0
        /// <summary>
        /// Performs logic when the <see cref="Scene"/> is initialized.
        /// </summary>
        /// <remarks>All UI elements created in DataContextScene.sml.</remarks>
        protected override void OnInitialized()
        {
            View.SetValue(TextBlock.FontFamilyProperty, "PF Square Sans Pro");

            ParentBorder.DataContext = new ColoredText("Default Data", Colors.Black);
            _coloredText             = new ColoredText("ColoredText", Colors.Red);
            _resizeableText          = new ResizeableText("ResizeableText", 50, Dock.Bottom, 280f);

            text3.SetBinding(DockPanel.DockProperty, "Dock");
            text3.SetBinding(CatWidthManager.AttachedWidthProperty, "AttachedWidth");

            btnAddColoredText.Click       += (sender, args) => ParentStackPanel.DataContext = _coloredText;
            btnAddResizeableText.Click    += (sender, args) => ChildThirdStackPanel.DataContext = _resizeableText;
            btnChangeColoredText.Click    += (sender, args) => _coloredText.Content += Environment.NewLine + "1st changed";
            btnChangeResizeableText.Click += (sender, args) => _resizeableText.Content += Environment.NewLine + "2nd changed";
            btnDeleteAllColoredText.Click += (sender, args) => ParentStackPanel.ClearValue(UIElement.DataContextProperty);
            btnDeleteResizeableText.Click += (sender, args) => ChildThirdStackPanel.ClearValue(UIElement.DataContextProperty);
        }
示例#11
0
        public static string TipForPawnWorker(Pawn p, WorkTypeDef wDef, bool incapableBecauseOfCapacities)
        {
            StringBuilder stringBuilder = new StringBuilder();
            string        str           = wDef.gerundLabel.CapitalizeFirst();
            int           priority      = p.workSettings.GetPriority(wDef);

            str = str + ": " + ColoredText.Colorize(("Priority" + priority).Translate(), ColorOfPriority(priority));
            stringBuilder.AppendLine(str);
            if (p.WorkTypeIsDisabled(wDef))
            {
                stringBuilder.Append("CannotDoThisWork".Translate(p.LabelShort, p));
            }
            else
            {
                float num = p.skills.AverageOfRelevantSkillsFor(wDef);
                if (wDef.relevantSkills.Any())
                {
                    string text = "";
                    foreach (SkillDef relevantSkill in wDef.relevantSkills)
                    {
                        text = text + relevantSkill.skillLabel.CapitalizeFirst() + ", ";
                    }
                    text = text.Substring(0, text.Length - 2);
                    stringBuilder.AppendLine("RelevantSkills".Translate(text, num.ToString("0.#"), 20));
                }
                stringBuilder.AppendLine();
                stringBuilder.Append(wDef.description);
                if (incapableBecauseOfCapacities)
                {
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine();
                    stringBuilder.Append("IncapableOfWorkTypeBecauseOfCapacities".Translate());
                }
                if (wDef.relevantSkills.Any() && num <= 2f && p.workSettings.WorkIsActive(wDef))
                {
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine();
                    stringBuilder.Append("SelectedWorkTypeWithVeryBadSkill".Translate());
                }
            }
            return(stringBuilder.ToString());
        }
        //TODO: Add Warning message
        public override string GetInspectString()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(base.GetInspectString());
            string obstructedDirs = "";

            foreach (var charge in Charges)
            {
                if (charge.Obstructed)
                {
                    obstructedDirs += (obstructedDirs.NullOrEmpty() ? "" : ", ") + charge.direction.ToStringHuman();
                }
            }
            if (!obstructedDirs.NullOrEmpty())
            {
                sb.AppendLine(ColoredText.Colorize("RWC_Obstructed".Translate(obstructedDirs), Color.red));
            }
            return(sb.ToString().TrimEndNewlines());
        }
示例#13
0
        public static ColoredText Apply(ColoredText x)
        {
            if (x.BackgroundRgb == null)
            {
                x.BackgroundRgb = x.ForegroundRgb;
                x.ForegroundRgb = SystemColor.Black;
            }
            else if (x.ForegroundRgb == null)
            {
                x.ForegroundRgb = x.BackgroundRgb;
                x.BackgroundRgb = SystemColor.White;
            }
            else
            {
                var bg = x.BackgroundRgb;
                x.BackgroundRgb = x.ForegroundRgb;
                x.ForegroundRgb = bg;
            }

            return(x);
        }
示例#14
0
        public void SetPositions()
        {
            title.Position = new Vector2(Game.GraphicsDevice.Viewport.Width / 2 - 200, -40);
            Vector2 pos   = new Vector2(Game.GraphicsDevice.Viewport.Width - 306, 250);
            int     count = 0;

            foreach (SimpleText text in menuEntries)
            {
                if (text is ColoredText)
                {
                    count++;
                }
                text.Position = pos;
                pos.Y        += OFFSET;
            }
            if (count == 0)
            {
                Vector2 tempPos = menuEntries[0].Position;
                menuEntries[0] = new ColoredText(Game, menuEntries[0].Text, true, menuEntries[0].Name)
                {
                    Position = tempPos
                };
            }
        }
示例#15
0
        private void FillTabGuest(Rect rect)
        {
            //ConceptDatabase.KnowledgeDemonstrated(ConceptDefOf.PrisonerTab, KnowledgeAmount.GuiFrame);
            var title            = SelPawn.royalty?.MostSeniorTitle;
            var isRoyal          = title != null;
            var friends          = isRoyal ? SelPawn.GetFriendsSeniorityInColony() : SelPawn.GetFriendsInColony();
            var friendsRequired  = isRoyal ? RequiredSeniority : RequiredFriends;
            var friendPercentage = 100f * friends / friendsRequired;


            var tryImprove     = SelPawn.ImproveRelationship();
            var tryMakeFriends = SelPawn.MakeFriends();

            listingStandard.ColumnWidth = size.x - 20;

            var comp = SelPawn.GetComp <CompGuest>();

            // If the lord is not on the map it's invalid!
            if (comp?.lord != null && comp.lord.ownedPawns.Contains(SelPawn) && SelPawn.Map.lordManager.lords.Contains(comp.lord))
            {
                listingStandard.Gap();
                string labelStay     = "AreaToStay".Translate();
                string labelBuy      = "AreaToBuy".Translate();
                var    rectStayLabel = listingStandard.GetRect(Text.CalcHeight(labelStay, listingStandard.ColumnWidth));
                var    rectStay      = listingStandard.GetRect(24);
                var    rectBuyLabel  = listingStandard.GetRect(Text.CalcHeight(labelBuy, listingStandard.ColumnWidth));
                var    rectBuy       = listingStandard.GetRect(24);

                LabelWithTooltip(labelStay, "AreaToStayTooltip".Translate(), rectStayLabel);
                GenericUtility.DoAreaRestriction(SelPawn, rectStay, comp.GuestArea, SetAreaRestriction, AreaUtility.AreaAllowedLabel_Area);
                LabelWithTooltip(labelBuy, "AreaToBuyTooltip".Translate(), rectBuyLabel);
                GenericUtility.DoAreaRestriction(SelPawn, rectBuy, comp.ShoppingArea, SetAreaShopping, GenericUtility.GetShoppingLabel);

                var rectImproveRelationship = listingStandard.GetRect(Text.LineHeight);
                CheckboxLabeled(listingStandard, "ImproveRelationship".Translate(), ref tryImprove, rectImproveRelationship, false, txtImproveTooltip);
                var rectMakeFriends = listingStandard.GetRect(Text.LineHeight);
                CheckboxLabeled(listingStandard, "MakeFriends".Translate(), ref tryMakeFriends, rectMakeFriends, false, txtMakeFriendsTooltip);

                comp.SetEntertain(tryImprove);
                comp.SetMakeFriends(tryMakeFriends);

                listingStandard.Gap(50);

                var mayRecruitAtAll = !SelPawn.InMentalState && comp.arrived;

                var rectSetDefault = new Rect(rect.xMax - buttonSize.x - 10, 160, buttonSize.x, buttonSize.y);
                var rectSendHome   = new Rect(rect.xMin - 10, 160, buttonSize.x, buttonSize.y);
                DrawButton(() => SetAllDefaults(SelPawn), txtMakeDefault, rectSetDefault, txtMakeDefaultTooltip);
                DrawButton(() => SendHomeDialog(SelPawn.GetLord()), txtSendAway, rectSendHome, txtSendAwayTooltip);
                if (mayRecruitAtAll)
                {
                    var rectRecruitButton = new Rect(rect.xMin - 10 + 10 + buttonSize.x, 160, buttonSize.x, buttonSize.y);
                    if (friends >= friendsRequired)
                    {
                        DrawButton(() => RecruitDialog(SelPawn, false), txtRecruit, rectRecruitButton, txtRecruitTooltip);
                    }
                    else if (!isRoyal)
                    {
                        DrawButton(() => RecruitDialog(SelPawn, true), txtForceRecruit, rectRecruitButton, txtForceRecruitTooltip);
                    }
                }

                // Highlight defaults
                if (Mouse.IsOver(rectSetDefault))
                {
                    Widgets.DrawHighlight(rectStay);
                    Widgets.DrawHighlight(rectStayLabel);
                    Widgets.DrawHighlight(rectBuy);
                    Widgets.DrawHighlight(rectBuyLabel);
                    Widgets.DrawHighlight(rectImproveRelationship);
                    Widgets.DrawHighlight(rectMakeFriends);
                }
            }

            if (SelPawn.Faction != null)
            {
                listingStandard.Label(txtRecruitmentPenalty.Translate(SelPawn.RecruitPenalty().ToString("##0"), SelPawn.ForcedRecruitPenalty().ToString("##0")));
                listingStandard.Label(txtFactionGoodwill + ": " + SelPawn.Faction.PlayerGoodwill.ToString("##0"));
            }

            listingStandard.Gap();

            if (isRoyal)
            {
                listingStandard.Label($"{"SeniorityRequirement".Translate(friends / 100, friendsRequired / 100)}:");
            }
            else
            {
                listingStandard.Label($"{"FriendsRequirement".Translate(friends, friendsRequired)}:");
            }

            listingStandard.Slider(Mathf.Clamp(friendPercentage, 0, 100), 0, 100);
            if (friendPercentage <= 99)
            {
                // Remove color from AdjustedFor and then Colorize
                listingStandard.Label(ColoredText.StripTags("NotEnoughFriends".Translate(SelPawn.GetMinRecruitOpinion()).AdjustedFor(SelPawn)).Colorize(Color.red));
            }
            else
            {
                listingStandard.Label("CanNowBeRecruited".Translate().AdjustedFor(SelPawn));
            }


            // Will only have score while "checked in", becomes 0 again when guest leaves
            if (SelPawn.GetVisitScore(out var score))
            {
                listingStandard.Label(txtHospitality + ":");
                listingStandard.Slider(score, 0f, 1f);
            }
        }
示例#16
0
        public static void RecruitDialog(Pawn pawn, bool forced)
        {
            var penalty       = forced ? pawn.ForcedRecruitPenalty() : pawn.RecruitPenalty();
            int finalGoodwill = Mathf.Clamp(pawn.Faction.PlayerGoodwill - penalty, -100, 100);

            var warning = finalGoodwill <= DiplomacyTuning.BecomeHostileThreshold ? "ForceRecruitWarning".Translate() : TaggedString.Empty;

            var text = (forced ? "ForceRecruitQuestion" : "RecruitQuestion").Translate(penalty.ToString("##0"), ColoredText.Colorize(warning, ColoredText.FactionColor_Hostile), new NamedArgument(pawn, "PAWN"));

            Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation(text, () => GuestUtility.Recruit(pawn, penalty, forced)));
        }
示例#17
0
 public string Resolve()
 {
     return(ColoredText.Resolve(this));
 }
示例#18
0
        public void Notify_RelationKindChanged(Faction other, FactionRelationKind previousKind, bool canSendLetter, string reason, GlobalTargetInfo lookTarget, out bool sentLetter)
        {
            if (Current.ProgramState != ProgramState.Playing || other != OfPlayer)
            {
                canSendLetter = false;
            }
            sentLetter = false;
            ColoredText.ClearCache();
            FactionRelationKind factionRelationKind = RelationKindWith(other);

            if (factionRelationKind == FactionRelationKind.Hostile)
            {
                if (Current.ProgramState == ProgramState.Playing)
                {
                    foreach (Pawn item in PawnsFinder.AllMapsWorldAndTemporary_Alive.ToList())
                    {
                        if ((item.Faction == this && item.HostFaction == other) || (item.Faction == other && item.HostFaction == this))
                        {
                            item.guest.SetGuestStatus(item.HostFaction, prisoner: true);
                        }
                    }
                }
                if (other == OfPlayer)
                {
                    QuestUtility.SendQuestTargetSignals(questTags, "BecameHostileToPlayer", this.Named("SUBJECT"));
                }
            }
            if (other == OfPlayer && !this.HostileTo(OfPlayer))
            {
                List <Site> list  = new List <Site>();
                List <Site> sites = Find.WorldObjects.Sites;
                for (int i = 0; i < sites.Count; i++)
                {
                    if (sites[i].factionMustRemainHostile && sites[i].Faction == this && !sites[i].HasMap)
                    {
                        list.Add(sites[i]);
                    }
                }
                if (list.Any())
                {
                    string str;
                    string str2;
                    if (list.Count == 1)
                    {
                        str  = "LetterLabelSiteNoLongerHostile".Translate();
                        str2 = "LetterSiteNoLongerHostile".Translate(NameColored, list[0].Label);
                    }
                    else
                    {
                        StringBuilder stringBuilder = new StringBuilder();
                        for (int j = 0; j < list.Count; j++)
                        {
                            if (stringBuilder.Length != 0)
                            {
                                stringBuilder.AppendLine();
                            }
                            stringBuilder.Append("  - " + list[j].LabelCap);
                            ImportantPawnComp component = list[j].GetComponent <ImportantPawnComp>();
                            if (component != null && component.pawn.Any)
                            {
                                stringBuilder.Append(" (" + component.pawn[0].LabelCap + ")");
                            }
                        }
                        str  = "LetterLabelSiteNoLongerHostileMulti".Translate();
                        str2 = (string)("LetterSiteNoLongerHostileMulti".Translate(NameColored) + ":\n\n") + stringBuilder;
                    }
                    Find.LetterStack.ReceiveLetter(str, str2, LetterDefOf.NeutralEvent, new LookTargets(list.Select((Site x) => new GlobalTargetInfo(x.Tile))));
                    for (int k = 0; k < list.Count; k++)
                    {
                        list[k].Destroy();
                    }
                }
            }
            if (other == OfPlayer && this.HostileTo(OfPlayer))
            {
                List <WorldObject> allWorldObjects = Find.WorldObjects.AllWorldObjects;
                for (int l = 0; l < allWorldObjects.Count; l++)
                {
                    if (allWorldObjects[l].Faction == this)
                    {
                        TradeRequestComp component2 = allWorldObjects[l].GetComponent <TradeRequestComp>();
                        if (component2 != null && component2.ActiveRequest)
                        {
                            component2.Disable();
                        }
                    }
                }
                foreach (Map map in Find.Maps)
                {
                    map.passingShipManager.RemoveAllShipsOfFaction(this);
                }
            }
            if (canSendLetter)
            {
                TaggedString text = "";
                TryAppendRelationKindChangedInfo(ref text, previousKind, factionRelationKind, reason);
                switch (factionRelationKind)
                {
                case FactionRelationKind.Hostile:
                    Find.LetterStack.ReceiveLetter("LetterLabelRelationsChange_Hostile".Translate(Name), text, LetterDefOf.NegativeEvent, lookTarget, this);
                    sentLetter = true;
                    break;

                case FactionRelationKind.Ally:
                    Find.LetterStack.ReceiveLetter("LetterLabelRelationsChange_Ally".Translate(Name), text, LetterDefOf.PositiveEvent, lookTarget, this);
                    sentLetter = true;
                    break;

                case FactionRelationKind.Neutral:
                    if (previousKind == FactionRelationKind.Hostile)
                    {
                        Find.LetterStack.ReceiveLetter("LetterLabelRelationsChange_NeutralFromHostile".Translate(Name), text, LetterDefOf.PositiveEvent, lookTarget, this);
                        sentLetter = true;
                    }
                    else
                    {
                        Find.LetterStack.ReceiveLetter("LetterLabelRelationsChange_NeutralFromAlly".Translate(Name), text, LetterDefOf.NeutralEvent, lookTarget, this);
                        sentLetter = true;
                    }
                    break;
                }
            }
            if (Current.ProgramState != ProgramState.Playing)
            {
                return;
            }
            List <Map> maps = Find.Maps;

            for (int m = 0; m < maps.Count; m++)
            {
                maps[m].attackTargetsCache.Notify_FactionHostilityChanged(this, other);
                LordManager lordManager = maps[m].lordManager;
                for (int n = 0; n < lordManager.lords.Count; n++)
                {
                    Lord lord = lordManager.lords[n];
                    if (lord.faction == other)
                    {
                        lord.Notify_FactionRelationsChanged(this, previousKind);
                    }
                    else if (lord.faction == this)
                    {
                        lord.Notify_FactionRelationsChanged(other, previousKind);
                    }
                }
            }
        }
示例#19
0
        /// <inheritdoc />
        public override void DoWindowContents(Rect inRect)
        {
            Rect titleRect = new Rect(inRect.x, inRect.y, inRect.width, 42f).Rounded();

            Text.Font = GameFont.Medium;
            Widgets.Label(titleRect, "ColorPicker_Title".Translate(this.targetPawn.LabelCap));
            Text.Font = GameFont.Small;
            Rect contentRect = new Rect(inRect.x, 45f, inRect.width, inRect.height - 45f).ContractedBy(5f).Rounded();

            var  hintText     = "<i>" + "ColorPicker_RemovalHint".Translate() + "</i>";
            var  hintTextSize = Text.CalcSize(hintText);
            Rect hintRect     = new Rect(contentRect.center.x - (hintTextSize.x / 2), contentRect.y, hintTextSize.x, hintTextSize.y).Rounded();

            Widgets.Label(hintRect, hintText);
            contentRect.y      += hintRect.height;
            contentRect.height -= hintRect.height;

            Rect skinRect = new Rect(contentRect.x, contentRect.y, contentRect.width / 2, 30f).Rounded();

            Widgets.DrawBoxSolid(skinRect.ContractedBy(5f), customSkinColor ? skinFirstColor : getOriginalColor(PawnColorSlot.SkinFirst));
            skinRect.y += 30f;
            Widgets.CheckboxLabeled(skinRect.Rounded(), "ColorPicker_CustomSkinColorCheckbox".Translate(), ref customSkinColor);
            if (customSkinColor)
            {
                skinRect.width -= 60f;
                skinRect.x     += 30f;

                skinRect.y += 30f;
                float r = Widgets.HorizontalSlider(skinRect, skinFirstColor.r, 0f, 1f, label: ColoredText.Colorize("ColorPicker_r".Translate(), Color.red));
                skinRect.y += 30f;
                float g = Widgets.HorizontalSlider(skinRect, skinFirstColor.g, 0f, 1f, label: ColoredText.Colorize("ColorPicker_g".Translate(), Color.green));
                skinRect.y += 30f;
                float b = Widgets.HorizontalSlider(skinRect, skinFirstColor.b, 0f, 1f, label: ColoredText.Colorize("ColorPicker_b".Translate(), Color.blue));
                skinFirstColor = new Color(r, g, b);
            }

            Rect hairRect = new Rect(contentRect.x + (contentRect.width / 2), contentRect.y, contentRect.width / 2, 30f).Rounded();

            Widgets.DrawBoxSolid(hairRect.ContractedBy(5f), customHairColor ? hairFirstColor : getOriginalColor(PawnColorSlot.HairFirst));
            hairRect.y += 30f;
            Widgets.CheckboxLabeled(hairRect.TopPartPixels(30f).Rounded(), "ColorPicker_CustomHairColorCheckbox".Translate(), ref customHairColor);
            if (customHairColor)
            {
                hairRect.width -= 60f;
                hairRect.x     += 30f;

                hairRect.y += 30f;
                float r = Widgets.HorizontalSlider(hairRect, hairFirstColor.r, 0f, 1f, label: ColoredText.Colorize("ColorPicker_r".Translate(), Color.red));
                hairRect.y += 30f;
                float g = Widgets.HorizontalSlider(hairRect, hairFirstColor.g, 0f, 1f, label: ColoredText.Colorize("ColorPicker_g".Translate(), Color.green));
                hairRect.y += 30f;
                float b = Widgets.HorizontalSlider(hairRect, hairFirstColor.b, 0f, 1f, label: ColoredText.Colorize("ColorPicker_b".Translate(), Color.blue));
                hairFirstColor = new Color(r, g, b);
            }

            Rect confirmRect = new Rect(contentRect.x + ((contentRect.width / 6) * 2), contentRect.yMax - 40f, (contentRect.width / 6) * 2, 40f).Rounded();

            if (Widgets.ButtonText(confirmRect, "ColorPicker_Confirm".Translate()))
            {
                this.Close(true);
            }
        }
        public BasicFileNameParser(string e)
        {
            // rule #1 - dots, underspaces are spaces
            // rule #2 - there may be season (Season 3, S03) and/or episode tag
            // rule #3 - there may be a year
            // rule #4 - words with two or more upper case chars may be tags
            //           if they do not represent roman numbers
            //           if they do not appear before season/episode tag (CSI)
            // rule #5 - a year may come after a tag
            // rule #6 - a year may be enclosed within brackets
            // rule #7 - name may start or container a number
            // rule #8 - name does not span beyond year or tag, or a bracket
            // rule #9 - imdb may not know about the name
            // rule #10 - episode title may appear after episode tag


            var c = new ColoredText(e);

            this.ColoredText = c;

            var BackgroundToGray   = "#c0c0c0".FixLastParam <int, int, string>(c.SetBackground);
            var BackgroundToRed    = "red".FixLastParam <int, int, string>(c.SetBackground);
            var BackgroundToYellow = "yellow".FixLastParam <int, int, string>(c.SetBackground);
            var BackgroundToCyan   = "cyan".FixLastParam <int, int, string>(c.SetBackground);

            #region rule # 1
            e.FindSubstrings(".",
                             (offset, length) =>
            {
                BackgroundToYellow(offset, length);

                return(offset + length);
            }
                             );

            e.FindSubstrings("_",
                             (offset, length) =>
            {
                BackgroundToYellow(offset, length);

                return(offset + length);
            }
                             );
            #endregion

            Func <int, int, int> Discard =
                (offset, length) =>
            {
                BackgroundToGray(offset, e.Length - offset);

                return(e.Length);
            };


            // rule #3
            // rule #8
            e.FindDigits(4,
                         (offset, length) =>
            {
                BackgroundToCyan(offset, length);

                this.Year = e.Substring(offset, length);

                Discard(offset + length, length);
            }
                         );

            #region FindEpisodeInfo
            Action <string, Action <string, int, int> > FindEpisodeInfo =
                (prefix, handler) =>
                e.FindSubstrings(prefix,
                                 (offset, length) =>
            {
                int i = 1;

                for (; i + offset < e.Length; i++)
                {
                    if (!char.IsNumber(e[offset + i]))
                    {
                        break;
                    }
                }

                if (i > 1)
                {
                    handler(prefix, offset, i);
                }

                return(offset + i);
            }
                                 );
            #endregion

            #region season tag
            var SeasonEndOffset = -1;
            FindEpisodeInfo("S",
                            (prefix, offset, length) =>
            {
                Season          = e.Substring(offset + prefix.Length, length - prefix.Length);
                SeasonEndOffset = offset;
                BackgroundToRed(offset, length);
            }
                            );

            var EpisodeEndOffset = -1;
            FindEpisodeInfo("E",
                            (prefix, offset, length) =>
            {
                Episode          = e.Substring(offset + prefix.Length, length - prefix.Length);
                EpisodeEndOffset = offset;
                BackgroundToRed(offset, length);
            }
                            );

            var SeasonTagEndOffset = EpisodeEndOffset.Max(SeasonEndOffset);
            #endregion


            // rule #4
            // rule #8
            e.FindUpperCase(2,
                            (offset, length) =>
            {
                // http://en.wikipedia.org/wiki/Roman_numerals
                // roman numbers may be part of the name
                if (e.EnsureChars(offset, length, "IVXLCDM"))
                {
                    return(offset + length);
                }

                if (SeasonTagEndOffset >= 0)
                {
                    if (offset < SeasonTagEndOffset)
                    {
                        return(offset + length);
                    }
                }

                return(Discard(offset, length));
            }
                            );

            e.FindSubstrings("[", Discard);
            e.FindSubstrings("(", Discard);



            var TitleBuilder    = new StringBuilder();
            var SubTitleBuilder = new StringBuilder();

            Func <int, StringBuilder> GetStream =
                offset =>
            {
                if (SeasonTagEndOffset < 0)
                {
                    return(TitleBuilder);
                }

                if (offset < SeasonTagEndOffset)
                {
                    return(TitleBuilder);
                }

                return(SubTitleBuilder);
            };

            for (int i = 0; i < this.ColoredText.Source.Length; i++)
            {
                if (!string.IsNullOrEmpty(this.ColoredText.Background[i]))
                {
                    GetStream(i).Append(" ");
                }
                else
                {
                    GetStream(i).Append(this.ColoredText.Source[i]);
                }
            }

            this.Title    = TitleBuilder.ToString().Trim();
            this.SubTitle = SubTitleBuilder.ToString().Trim();
        }