コード例 #1
0
 private static bool StillValid(FloatMenuOption opt, List <FloatMenuOption> curOpts)
 {
     if (opt.revalidateClickTarget == null)
     {
         for (int i = 0; i < curOpts.Count; i++)
         {
             if (FloatMenuMap.OptionsMatch(opt, curOpts[i]))
             {
                 return(true);
             }
         }
     }
     else
     {
         if (!opt.revalidateClickTarget.Spawned)
         {
             return(false);
         }
         List <FloatMenuOption> list = FloatMenuMakerMap.ChoicesAtFor(opt.revalidateClickTarget.Position.ToVector3Shifted(), Find.Selector.SingleSelectedThing as Pawn);
         for (int j = 0; j < list.Count; j++)
         {
             if (FloatMenuMap.OptionsMatch(opt, list[j]))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #2
0
        public override void DoWindowContents(Rect inRect)
        {
            Pawn pawn = Find.Selector.SingleSelectedThing as Pawn;

            if (pawn == null)
            {
                Find.WindowStack.TryRemove(this, true);
            }
            else
            {
                if (Time.frameCount % 3 == 0)
                {
                    Profiler.BeginSample("Float menu ChoicesAtFor()");
                    List <FloatMenuOption> list = FloatMenuMakerMap.ChoicesAtFor(this.clickPos, pawn);
                    Profiler.EndSample();
                    List <FloatMenuOption> list2 = list;
                    Vector3 vector = this.clickPos;
                    Profiler.BeginSample("StillValid()");
                    for (int i = 0; i < this.options.Count; i++)
                    {
                        if (!this.options[i].Disabled && !FloatMenuMap.StillValid(this.options[i], list, pawn, ref list2, ref vector))
                        {
                            this.options[i].Disabled = true;
                        }
                    }
                    Profiler.EndSample();
                }
                base.DoWindowContents(inRect);
            }
        }
コード例 #3
0
            private static bool StillValid(
                FloatMenuOption opt,
                IEnumerable <FloatMenuOption> curOpts,
                Pawn forPawn,
                ref List <FloatMenuOption> cachedChoices,
                ref Vector3 cachedChoicesForPos)
            {
                if (opt.revalidateClickTarget == null)
                {
                    return(curOpts.Any(t => OptionsMatch(opt, t)));
                }

                {
                    if (!opt.revalidateClickTarget.Spawned)
                    {
                        return(false);
                    }

                    var vector3Shifted = opt.revalidateClickTarget.Position.ToVector3Shifted();
                    List <FloatMenuOption> floatMenuOptionList;
                    if (vector3Shifted == cachedChoicesForPos)
                    {
                        floatMenuOptionList = cachedChoices;
                    }
                    else
                    {
                        cachedChoices       = FloatMenuMakerMap.ChoicesAtFor(vector3Shifted, forPawn);
                        cachedChoicesForPos = vector3Shifted;
                        floatMenuOptionList = cachedChoices;
                    }

                    return((from t in floatMenuOptionList where OptionsMatch(opt, t) select !t.Disabled).FirstOrDefault());
                }
            }
コード例 #4
0
 private static bool StillValid(FloatMenuOption opt, List <FloatMenuOption> curOpts, Pawn forPawn)
 {
     if (opt.revalidateClickTarget == null)
     {
         for (int i = 0; i < curOpts.Count; i++)
         {
             if (OptionsMatch(opt, curOpts[i]))
             {
                 return(true);
             }
         }
     }
     else
     {
         if (!opt.revalidateClickTarget.Spawned)
         {
             return(false);
         }
         Vector3 key = opt.revalidateClickTarget.Position.ToVector3Shifted();
         if (!cachedChoices.TryGetValue(key, out var value))
         {
             List <FloatMenuOption> list = FloatMenuMakerMap.ChoicesAtFor(key, forPawn);
             cachedChoices.Add(key, list);
             value = list;
         }
         for (int j = 0; j < value.Count; j++)
         {
             if (OptionsMatch(opt, value[j]))
             {
                 return(!value[j].Disabled);
             }
         }
     }
     return(false);
 }
コード例 #5
0
ファイル: FloatMenuMap.cs プロジェクト: potsh/RimWorld
        public override void DoWindowContents(Rect inRect)
        {
            Pawn pawn = Find.Selector.SingleSelectedThing as Pawn;

            if (pawn == null)
            {
                Find.WindowStack.TryRemove(this);
            }
            else
            {
                if (Time.frameCount % 3 == 0)
                {
                    List <FloatMenuOption> list          = FloatMenuMakerMap.ChoicesAtFor(clickPos, pawn);
                    List <FloatMenuOption> cachedChoices = list;
                    Vector3 cachedChoicesForPos          = clickPos;
                    for (int i = 0; i < options.Count; i++)
                    {
                        if (!options[i].Disabled && !StillValid(options[i], list, pawn, ref cachedChoices, ref cachedChoicesForPos))
                        {
                            options[i].Disabled = true;
                        }
                    }
                }
                base.DoWindowContents(inRect);
            }
        }
コード例 #6
0
        public override void PreOptionChosen(FloatMenuOption opt)
        {
            base.PreOptionChosen(opt);
            Pawn pawn = Find.Selector.SingleSelectedThing as Pawn;

            if (!opt.Disabled && (pawn == null || !FloatMenuMap.StillValid(opt, FloatMenuMakerMap.ChoicesAtFor(this.clickPos, pawn), pawn)))
            {
                opt.Disabled = true;
            }
        }
コード例 #7
0
        public override void DoWindowContents(Rect inRect)
        {
            Pawn selPawn = Find.Selector.SingleSelectedThing as Pawn;

            if (selPawn == null)
            {
                Find.WindowStack.TryRemove(this);
                return;
            }
            bool flag = options.Count >= 3;

            if (Time.frameCount % 4 == 0 || lastOptionsForRevalidation == null)
            {
                lastOptionsForRevalidation = FloatMenuMakerMap.ChoicesAtFor(clickPos, selPawn);
                cachedChoices.Clear();
                cachedChoices.Add(clickPos, lastOptionsForRevalidation);
                if (!flag)
                {
                    for (int i = 0; i < options.Count; i++)
                    {
                        RevalidateOption(options[i]);
                    }
                }
            }
            else if (flag)
            {
                if (nextOptionToRevalidate >= options.Count)
                {
                    nextOptionToRevalidate = 0;
                }
                int num  = Mathf.CeilToInt((float)options.Count / 3f);
                int num2 = nextOptionToRevalidate;
                int num3 = 0;
                while (num2 < options.Count && num3 < num)
                {
                    RevalidateOption(options[num2]);
                    nextOptionToRevalidate++;
                    num2++;
                    num3++;
                }
            }
            base.DoWindowContents(inRect);
            void RevalidateOption(FloatMenuOption option)
            {
                if (!option.Disabled && !StillValid(option, lastOptionsForRevalidation, selPawn))
                {
                    option.Disabled = true;
                }
            }
        }
コード例 #8
0
        public override void DoWindowContents(Rect inRect)
        {
            Pawn pawn = Find.Selector.SingleSelectedThing as Pawn;

            if (pawn == null)
            {
                Find.WindowStack.TryRemove(this, true);
                return;
            }
            List <FloatMenuOption> curOpts = FloatMenuMakerMap.ChoicesAtFor(this.clickPos, pawn);

            for (int i = 0; i < this.options.Count; i++)
            {
                if (!this.options[i].Disabled && !FloatMenuMap.StillValid(this.options[i], curOpts))
                {
                    this.options[i].Disabled = true;
                }
            }
            base.DoWindowContents(inRect);
        }
コード例 #9
0
 private static bool StillValid(FloatMenuOption opt, List <FloatMenuOption> curOpts, Pawn forPawn, ref List <FloatMenuOption> cachedChoices, ref Vector3 cachedChoicesForPos)
 {
     if (opt.revalidateClickTarget == null)
     {
         for (int i = 0; i < curOpts.Count; i++)
         {
             if (FloatMenuMap.OptionsMatch(opt, curOpts[i]))
             {
                 return(true);
             }
         }
     }
     else
     {
         if (!opt.revalidateClickTarget.Spawned)
         {
             return(false);
         }
         Vector3 vector = opt.revalidateClickTarget.Position.ToVector3Shifted();
         List <FloatMenuOption> list;
         if (vector == cachedChoicesForPos)
         {
             list = cachedChoices;
         }
         else
         {
             cachedChoices       = FloatMenuMakerMap.ChoicesAtFor(vector, forPawn);
             cachedChoicesForPos = vector;
             list = cachedChoices;
         }
         for (int j = 0; j < list.Count; j++)
         {
             if (FloatMenuMap.OptionsMatch(opt, list[j]))
             {
                 return(!list[j].Disabled);
             }
         }
     }
     return(false);
 }
コード例 #10
0
        public static void UseIndexedFloatMenuEntryAt(Vector3 clickPos, Pawn pawn, int index, int totalCount, string delegateName)
        {
            var entries = FloatMenuMakerMap.ChoicesAtFor(clickPos, pawn);

            if (totalCount == entries.Count)
            {
                Action a = entries[index].action;

                if (a != null && (a.Method.Name + "::" + a.Method.DeclaringType.Name).SequenceEqual(delegateName))
                {
                    a();
                }
                else
                {
                    Utilities.RimLog.Message("Warning! Different methods for float menu entry! But this might be fine");
                }
            }
            else
            {
                Utilities.RimLog.Message("Warning! Different method count for float menu entry! But this might be fine");
            }
        }
コード例 #11
0
        private void HandleColonistClicks(Rect rect, Pawn colonist)
        {
            if (Mouse.IsOver(rect) && Event.current.type == EventType.MouseDown)
            {
                if (clickedColonist == colonist && Time.time - clickedAt < ColBarSettings.DoubleClickTime)
                {
                    // use event so it doesn't bubble through
                    Event.current.Use();
                    JumpToTargetUtility.TryJump(colonist);
                    clickedColonist = null;
                }
                else
                {
                    clickedColonist = colonist;
                    clickedAt       = Time.time;
                }
            }
            if (Mouse.IsOver(rect) && Event.current.button == 1)
            {
                if (Event.current.type == EventType.MouseDown)
                {
                    List <FloatMenuOption> floatOptionList = new List <FloatMenuOption>();

                    if (clickedColonist != null && SelPawn != null && SelPawn != clickedColonist)
                    {
                        foreach (FloatMenuOption choice in FloatMenuMakerMap.ChoicesAtFor(clickedColonist.TrueCenter(), SelPawn))
                        {
                            floatOptionList.Add(choice);
                        }
                        floatOptionList.Add(new FloatMenuOption("--------------------", delegate
                        {
                        }));
                    }

                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.Vanilla".Translate(), delegate
                    {
                        ColBarSettings.SortBy = vanilla;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));
                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.ByName".Translate(), delegate
                    {
                        ColBarSettings.SortBy = byName;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));

                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.SexAge".Translate(), delegate
                    {
                        ColBarSettings.SortBy = sexage;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));

                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.Mood".Translate(), delegate
                    {
                        ColBarSettings.SortBy = mood;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));
                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.Health".Translate(), delegate
                    {
                        ColBarSettings.SortBy = health;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));
                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.Medic".Translate(), delegate
                    {
                        ColBarSettings.SortBy = medic;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));
                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.Weapons".Translate(), delegate
                    {
                        ColBarSettings.SortBy = weapons;
                        ((UIRootMap)Find.UIRoot).colonistBar.MarkColonistsListDirty();
                    }));

                    floatOptionList.Add(new FloatMenuOption("CBKF.Settings.SettingsColonistBar".Translate(), delegate { Find.WindowStack.Add(new ColonistBarKF_Settings()); }));
                    FloatMenu window = new FloatMenu(floatOptionList, "CBKF.Settings.SortingOptions".Translate());
                    Find.WindowStack.Add(window);

                    // use event so it doesn't bubble through
                    Event.current.Use();
                }
            }
        }