Inheritance: IExposable
Example #1
0
        //other hardcoded options
        public void OtherOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Gear, "Equipment".Translate(), null);
                    if (fits(kl.minWidthDesired))
                    {
                        kList.Add(kl);
                    }
                };
                list.Add(new FloatMenuOption("Equipment".Translate(), action, MenuOptionPriority.Medium, null, null));
            }

            if (chosenPawnType == pawnType.Prisoners)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerGetsFood, "GetsFood".Translate(), null);
                    if (fits(kl.minWidthDesired))
                    {
                        kList.Add(kl);
                    }
                };
                list.Add(new FloatMenuOption("GetsFood".Translate(), action, MenuOptionPriority.Medium, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerInteraction, "koisama.Interaction".Translate(), null);
                    if (fits(kl.minWidthDesired))
                    {
                        kList.Add(kl);
                    }
                };
                list.Add(new FloatMenuOption("koisama.Interaction".Translate(), action2, MenuOptionPriority.Medium, null, null));
            }

            if (new[] { pawnType.Colonists, pawnType.Prisoners }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlMedicalCare, "koisama.MedicalCare".Translate(), null);
                    if (fits(kl.minWidthDesired))
                    {
                        kList.Add(kl);
                    }
                };
                list.Add(new FloatMenuOption("koisama.MedicalCare".Translate(), action, MenuOptionPriority.Medium, null, null));
            }


            Find.WindowStack.Add(new FloatMenu(list, false));
        }
Example #2
0
        public void RecordsOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (RecordDef rcd in DefDatabase <RecordDef> .AllDefsListForReading)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.Record, rcd.LabelCap, rcd);
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption(rcd.LabelCap, action, MenuOptionPriority.Default, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
        public void CapacityOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (PawnCapacityDef pcd in DefDatabase <PawnCapacityDef> .AllDefsListForReading)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Capacity, pcd.LabelCap, pcd);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption(pcd.LabelCap, action, MenuOptionPriority.Default, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
        public void NeedsOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (NeedDef need in pNeedDef)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Need, need.LabelCap, need);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption(need.LabelCap, action, MenuOptionPriority.Default, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
        public void StatsOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (StatDef stat in pStatDef)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Stat, stat.LabelCap, stat);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption(stat.LabelCap, action, MenuOptionPriority.Default, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
Example #6
0
        public void SkillsOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (SkillDef skill in DefDatabase <SkillDef> .AllDefsListForReading)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.Skill, skill.LabelCap, skill);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption(skill.LabelCap, action, MenuOptionPriority.Default, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
Example #7
0
        public override void DoWindowContents(Rect r)
        {
            base.DoWindowContents(r);

            if (pawnListUpdateNext < Find.TickManager.TicksGame)
            {
                isDirty = true;
            }

            if (isDirty)
            {
                UpdatePawnList();
            }

            Rect position = new Rect(0f, 0f, r.width, 110f);

            GUI.BeginGroup(position);

            float x = 0f;

            Text.Font = GameFont.Small;

            //pawn/prisoner list switch
            Rect sourceButton = new Rect(x, 0f, 180f, PawnRowHeight);

            if (Widgets.TextButton(sourceButton, ("koisama.pawntype." + chosenPawnType.ToString()).Translate()))
            {
                PawnSelectOptionsMaker();
            }
            x += 190;

            //stats btn
            Rect addColumnButton = new Rect(x, 0f, 180f, PawnRowHeight);

            if (Widgets.TextButton(addColumnButton, "koisama.Numbers.AddColumnLabel".Translate()))
            {
                StatsOptionsMaker();
            }
            x += 190;

            //skills btn
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies }.Contains(chosenPawnType))
            {
                Rect skillColumnButton = new Rect(x, 0f, 180f, PawnRowHeight);
                if (Widgets.TextButton(skillColumnButton, "koisama.Numbers.AddSkillColumnLabel".Translate()))
                {
                    SkillsOptionsMaker();
                }
                x += 190;
            }

            //needs btn
            Rect needsColumnButton = new Rect(x, 0f, 180f, PawnRowHeight);

            if (Widgets.TextButton(needsColumnButton, "koisama.Numbers.AddNeedsColumnLabel".Translate()))
            {
                NeedsOptionsMaker();
            }
            x += 190;

            Rect otherColumnBtn = new Rect(x, 0f, 180f, PawnRowHeight);

            if (Widgets.TextButton(otherColumnBtn, "koisama.Numbers.AddOtherColumnLabel".Translate()))
            {
                OtherOptionsMaker();
            }
            x += 190;

            x = 0;
            //names
            Rect nameLabel = new Rect(x, 75f, NameColumnWidth, PawnRowHeight);

            Text.Anchor = TextAnchor.LowerCenter;
            Widgets.Label(nameLabel, "koisama.Numbers.Name".Translate());
            if (Widgets.InvisibleButton(nameLabel))
            {
                if (chosenOrderBy == orderBy.Name)
                {
                    pawnListDescending = !pawnListDescending;
                }
                else
                {
                    chosenOrderBy      = orderBy.Name;
                    pawnListDescending = false;
                }
                isDirty = true;
            }

            TooltipHandler.TipRegion(nameLabel, "koisama.Numbers.SortByTooltip".Translate("koisama.Numbers.Name".Translate()));
            Widgets.DrawHighlightIfMouseover(nameLabel);
            x += NameColumnWidth;

            //header
            //TODO: better interface - auto width calculation
            bool offset = true;

            kListDesiredWidth = 175f;

            for (int i = 0; i < kList.Count; i++)
            {
                float colWidth = kList[i].minWidthDesired;
                kListDesiredWidth += colWidth;

                Rect defLabel = new Rect(x - 35, 20f + (offset ? 10f : 50f), colWidth + 70, 40f);
                Widgets.DrawLine(new Vector2(x + colWidth / 2, 52f + (offset ? 15f : 55f)), new Vector2(x + colWidth / 2, 110f), Color.gray, 1);
                Widgets.Label(defLabel, kList[i].label);

                StringBuilder labelSB = new StringBuilder();
                labelSB.AppendLine("koisama.Numbers.SortByTooltip".Translate(kList[i].label));
                labelSB.AppendLine("koisama.Numbers.RemoveTooltip".Translate());
                TooltipHandler.TipRegion(defLabel, labelSB.ToString());
                Widgets.DrawHighlightIfMouseover(defLabel);

                if (Widgets.InvisibleButton(defLabel))
                {
                    if (Event.current.button == 1)
                    {
                        kList.RemoveAt(i);
                    }
                    else
                    {
                        if (chosenOrderBy == orderBy.Column && kList[i].Equals(sortObject))
                        {
                            pawnListDescending = !pawnListDescending;
                        }
                        else
                        {
                            sortObject         = kList[i];
                            chosenOrderBy      = orderBy.Column;
                            pawnListDescending = false;
                        }
                    }
                    isDirty = true;
                }
                offset = !offset;
                x     += colWidth;
            }
            GUI.EndGroup();

            //content
            Rect content = new Rect(0f, position.yMax, r.width, r.height - position.yMax);

            GUI.BeginGroup(content);
            base.DrawRows(new Rect(0f, 0f, content.width, content.height));
            GUI.EndGroup();
        }
        //other hardcoded options
        public void OtherOptionsMaker()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            //equipment bearers
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Corpses }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Gear, "koisama.Equipment".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Equipment".Translate(), action, MenuOptionPriority.Default, null, null));
            }

            //all living things
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Animals, pawnType.WildAnimals, pawnType.Guests }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Age, "koisama.Age".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Age".Translate(), action, MenuOptionPriority.Default, null, null));

                action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.MentalState, "koisama.MentalState".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.MentalState".Translate(), action, MenuOptionPriority.Default, null, null));
            }

            if (chosenPawnType == pawnType.Prisoners)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerGetsFood, "GetsFood".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("GetsFood".Translate(), action, MenuOptionPriority.Default, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerInteraction, "koisama.Interaction".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Interaction".Translate(), action2, MenuOptionPriority.Default, null, null));
            }

            if (chosenPawnType == pawnType.Animals)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.AnimalMilkFullness, "MilkFullness".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("MilkFullness".Translate(), action, MenuOptionPriority.Default, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.AnimalWoolGrowth, "WoolGrowth".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("WoolGrowth".Translate(), action2, MenuOptionPriority.Default, null, null));
            }

            //healable
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Animals }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlMedicalCare, "koisama.MedicalCare".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.MedicalCare".Translate(), action, MenuOptionPriority.Default, null, null));
            }

            if (!new[] { pawnType.Corpses, pawnType.AnimalCorpses }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.CurrentJob, "koisama.CurrentJob".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.CurrentJob".Translate(), action, MenuOptionPriority.Default, null, null));
            }

            Find.WindowStack.Add(new FloatMenu(list));
        }
Example #9
0
        public override void DoWindowContents(Rect r)
        {
            var component = Find.World.GetComponent <WorldComponent_Numbers>();

            maxWindowWidth = Screen.width;
            base.DoWindowContents(r);

            if (pawnListUpdateNext < Find.TickManager.TicksGame)
            {
                isDirty = true;
            }

            if (isDirty)
            {
                UpdatePawnList();
            }

            Rect position = new Rect(0f, 0f, r.width, 115f);

            GUI.BeginGroup(position);

            float x = 0f;

            Text.Font = GameFont.Small;

            //pawn/prisoner list switch
            Rect sourceButton = new Rect(x, 0f, buttonWidth, PawnRowHeight);

            if (Widgets.ButtonText(sourceButton, ("koisama.pawntype." + component.chosenPawnType.ToString()).Translate()))
            {
                PawnSelectOptionsMaker();
            }
            x += buttonWidth + 10;
            TooltipHandler.TipRegion(sourceButton, new TipSignal("koisama.Numbers.ClickToToggle".Translate(), sourceButton.GetHashCode()));

            //stats btn
            Rect addColumnButton = new Rect(x, 0f, buttonWidth, PawnRowHeight);

            if (Widgets.ButtonText(addColumnButton, "koisama.Numbers.AddColumnLabel".Translate()))
            {
                StatsOptionsMaker();
            }
            x += buttonWidth + 10;


            //skills btn
            if (new[] { PawnType.Colonists, PawnType.Prisoners, PawnType.Enemies }.Contains(component.chosenPawnType))
            {
                Rect skillColumnButton = new Rect(x, 0f, buttonWidth, PawnRowHeight);
                if (Widgets.ButtonText(skillColumnButton, "koisama.Numbers.AddSkillColumnLabel".Translate()))
                {
                    SkillsOptionsMaker();
                }
                x += buttonWidth + 10;
            }

            if (!new[] { PawnType.AnimalCorpses, PawnType.Corpses }.Contains(component.chosenPawnType))
            {
                //needs btn
                Rect needsColumnButton = new Rect(x, 0f, buttonWidth, PawnRowHeight);
                if (Widgets.ButtonText(needsColumnButton, "koisama.Numbers.AddNeedsColumnLabel".Translate()))
                {
                    NeedsOptionsMaker();
                }
                x += buttonWidth + 10;
            }

            //cap btn
            Rect capacityColumnButton = new Rect(x, 0f, buttonWidth, PawnRowHeight);

            if (Widgets.ButtonText(capacityColumnButton, "koisama.Numbers.AddCapacityColumnLabel".Translate()))
            {
                CapacityOptionsMaker();
            }
            x += buttonWidth + 10;

            if (!new[] { PawnType.AnimalCorpses }.Contains(component.chosenPawnType))
            {
                Rect otherColumnBtn = new Rect(x, 0f, buttonWidth, PawnRowHeight);
                if (Widgets.ButtonText(otherColumnBtn, "koisama.Numbers.AddOtherColumnLabel".Translate()))
                {
                    OtherOptionsMaker();
                }
                x += buttonWidth + 10;
            }

            Rect recordsColumnBtn = new Rect(x, 0f, buttonWidth, PawnRowHeight);

            if (Widgets.ButtonText(recordsColumnBtn, "TabRecords".Translate()))
            {
                RecordsOptionsMaker();
            }
            x += buttonWidth + 10;

            //TODO: implement

            /*
             * Rect addPresetBtn = new Rect(x, 0f, buttonWidth, PawnRowHeight);
             * if (Widgets.ButtonText(addPresetBtn, "koisama.Numbers.SetPresetLabel".Translate()))
             * {
             *  PresetOptionsMaker();
             * }
             * x += buttonWidth + 10;
             */

            Rect thingCount = new Rect(10f, 45f, 200f, 30f);

            Widgets.Label(thingCount, "koisama.Numbers.Count".Translate() + ": " + this.things.Count().ToString());

            x = 0;
            //names
            Rect nameLabel = new Rect(x, 75f, NameColumnWidth, PawnRowHeight);

            Text.Anchor = TextAnchor.LowerCenter;
            Widgets.Label(nameLabel, "koisama.Numbers.Name".Translate());
            if (Widgets.ButtonInvisible(nameLabel))
            {
                if (chosenOrderBy == OrderBy.Name)
                {
                    pawnListDescending = !pawnListDescending;
                }
                else
                {
                    chosenOrderBy      = OrderBy.Name;
                    pawnListDescending = false;
                }
                isDirty = true;
            }

            TooltipHandler.TipRegion(nameLabel, "koisama.Numbers.SortByTooltip".Translate("koisama.Numbers.Name".Translate()));
            Widgets.DrawHighlightIfMouseover(nameLabel);
            x += NameColumnWidth;

            //header
            //TODO: better interface - auto width calculation

            int reorderableGroup = ReorderableWidget.NewGroup(delegate(int from, int to)
            {
                KListObject oldKlistObject = kList[from];
                kList.Insert(to, oldKlistObject);
                kList.RemoveAt((from >= to) ? (from + 1) : from);
            }, ReorderableDirection.Horizontal);

            bool offset = true;

            kListDesiredWidth = 175f;
            Text.Anchor       = TextAnchor.MiddleCenter;

            for (int i = 0; i < kList.Count; i++)
            {
                float colWidth = kList[i].minWidthDesired;

                if (colWidth + kListDesiredWidth + cFreeSpaceAtTheEnd > maxWindowWidth)
                {
                    break;
                }



                kListDesiredWidth += colWidth;

                Rect defLabel = new Rect(x - 35, 25f + (offset ? 10f : 50f), colWidth + 70, 40f);
                Widgets.DrawLine(new Vector2(x + colWidth / 2, 55f + (offset ? 15f : 55f)), new Vector2(x + colWidth / 2, 113f), Color.gray, 1);
                Widgets.Label(defLabel, kList[i].label);

                ReorderableWidget.Reorderable(reorderableGroup, defLabel);

                StringBuilder labelSB = new StringBuilder();
                labelSB.AppendLine("koisama.Numbers.SortByTooltip".Translate(kList[i].label));
                labelSB.AppendLine("koisama.Numbers.RemoveTooltip".Translate());
                labelSB.AppendLine("DragToReorder".Translate());
                TooltipHandler.TipRegion(defLabel, labelSB.ToString());
                Widgets.DrawHighlightIfMouseover(defLabel);

                if (Widgets.ButtonInvisible(defLabel))
                {
                    if (Event.current.button == 1)
                    {
                        kList.RemoveAt(i);
                    }
                    else
                    {
                        if (chosenOrderBy == OrderBy.Column && kList[i].Equals(sortObject))
                        {
                            pawnListDescending = !pawnListDescending;
                        }
                        else
                        {
                            sortObject         = kList[i];
                            chosenOrderBy      = OrderBy.Column;
                            pawnListDescending = false;
                        }
                    }
                    isDirty = true;
                }
                offset = !offset;
                x     += colWidth;
            }
            GUI.EndGroup();

            //content
            Rect content = new Rect(0f, position.yMax, r.width, r.height - position.yMax);

            GUI.BeginGroup(content);
            base.DrawRows(new Rect(0f, 0f, content.width, content.height));
            GUI.EndGroup();
        }
Example #10
0
        //other hardcoded options
        public void OtherOptionsMaker()
        {
            var component = Find.World.GetComponent <WorldComponent_Numbers>();
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            //equipment bearers
            if (new[] { PawnType.Colonists, PawnType.Prisoners, PawnType.Enemies, PawnType.Corpses }.Contains(component.chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.Gear, "koisama.Equipment".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Equipment".Translate(), action, MenuOptionPriority.Default, null, null));
            }

            //all living things
            if (new[] { PawnType.Colonists, PawnType.Prisoners, PawnType.Enemies, PawnType.Animals, PawnType.WildAnimals, PawnType.Guests }.Contains(component.chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.Age, "koisama.Age".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Age".Translate(), action, MenuOptionPriority.Default, null, null));

                action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.MentalState, "koisama.MentalState".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.MentalState".Translate(), action, MenuOptionPriority.Default, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.Race, "Race".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("Race".Translate(), action2, MenuOptionPriority.Default, null, null));
            }

            if (component.chosenPawnType == PawnType.Prisoners)
            {
                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.ControlPrisonerInteraction, "koisama.Interaction".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Interaction".Translate(), action2, MenuOptionPriority.Default, null, null));

                Action action3 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.PrisonerRecruitmentDifficulty, "RecruitmentDifficulty".Translate(), null);
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("RecruitmentDifficulty".Translate(), action3, MenuOptionPriority.Default, null, null));

                Action action4 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.PrisonerResistance, "RecruitmentResistance".Translate(), null);
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("RecruitmentResistance".Translate(), action4, MenuOptionPriority.Default, null, null));
            }

            if (component.chosenPawnType == PawnType.Animals)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.AnimalMilkFullness, "MilkFullness".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("MilkFullness".Translate(), action, MenuOptionPriority.Default, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.AnimalWoolGrowth, "WoolGrowth".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("WoolGrowth".Translate(), action2, MenuOptionPriority.Default, null, null));

                Action action3 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.AnimalEggProgress, "EggProgress".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("EggProgress".Translate(), action3, MenuOptionPriority.Default, null, null));
            }

            //healable
            if (new[] { PawnType.Colonists, PawnType.Prisoners, PawnType.Animals }.Contains(component.chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.ControlMedicalCare, "koisama.MedicalCare".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.MedicalCare".Translate(), action, MenuOptionPriority.Default, null, null));
            }

            if (!new[] { PawnType.Corpses, PawnType.AnimalCorpses }.Contains(component.chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.CurrentJob, "koisama.CurrentJob".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.CurrentJob".Translate(), action, MenuOptionPriority.Default, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.ObjectType.QueuedJob, "koisama.QueuedJob".Translate(), null);
                    //if (fits(kl.minWidthDesired))
                    kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.QueuedJob".Translate(), action2, MenuOptionPriority.Default, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
        public override void DoWindowContents(Rect r)
        {
            base.DoWindowContents(r);

            if (pawnListUpdateNext < Find.TickManager.TicksGame)
                isDirty = true;

            if (isDirty)
            {
                UpdatePawnList();
            }

            Rect position = new Rect(0f, 0f, r.width, 110f);
            GUI.BeginGroup(position);

            float x = 0f;
            Text.Font = GameFont.Small;

            //pawn/prisoner list switch
            Rect sourceButton = new Rect(x, 0f, 180f, PawnRowHeight);
            if (Widgets.TextButton(sourceButton, ("koisama.pawntype." + chosenPawnType.ToString()).Translate()))
            {
                PawnSelectOptionsMaker();
            }
            x += 190;

            //stats btn
            Rect addColumnButton = new Rect(x, 0f, 180f, PawnRowHeight);
            if (Widgets.TextButton(addColumnButton, "koisama.Numbers.AddColumnLabel".Translate()))
            {
                StatsOptionsMaker();
            }
            x += 190;

            //skills btn
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies }.Contains(chosenPawnType))
            {
                Rect skillColumnButton = new Rect(x, 0f, 180f, PawnRowHeight);
                if (Widgets.TextButton(skillColumnButton, "koisama.Numbers.AddSkillColumnLabel".Translate()))
                {
                    SkillsOptionsMaker();
                }
                x += 190;
            }

            //needs btn
            Rect needsColumnButton = new Rect(x, 0f, 180f, PawnRowHeight);
            if (Widgets.TextButton(needsColumnButton, "koisama.Numbers.AddNeedsColumnLabel".Translate()))
            {
                NeedsOptionsMaker();
            }
            x += 190;

            Rect otherColumnBtn = new Rect(x, 0f, 180f, PawnRowHeight);
            if (Widgets.TextButton(otherColumnBtn, "koisama.Numbers.AddOtherColumnLabel".Translate()))
            {
                OtherOptionsMaker();
            }
            x += 190;

            x = 0;
            //names
            Rect nameLabel = new Rect(x, 75f, NameColumnWidth, PawnRowHeight);
            Text.Anchor = TextAnchor.LowerCenter;
            Widgets.Label(nameLabel, "koisama.Numbers.Name".Translate());
            if (Widgets.InvisibleButton(nameLabel))
            {
                if (chosenOrderBy == orderBy.Name)
                {
                    pawnListDescending = !pawnListDescending;
                }
                else
                {
                    chosenOrderBy = orderBy.Name;
                    pawnListDescending = false;
                }
                isDirty = true;
            }

            TooltipHandler.TipRegion(nameLabel, "koisama.Numbers.SortByTooltip".Translate("koisama.Numbers.Name".Translate()));
            Widgets.DrawHighlightIfMouseover(nameLabel);
            x += NameColumnWidth;

            //header
            //TODO: better interface - auto width calculation
            bool offset = true;
            kListDesiredWidth = 175f;

            for (int i=0;i<kList.Count; i++)
            {
                float colWidth = kList[i].minWidthDesired;
                kListDesiredWidth += colWidth;

                Rect defLabel = new Rect(x-35, 20f + (offset ? 10f : 50f), colWidth+70 , 40f);
                Widgets.DrawLine(new Vector2(x + colWidth/2 , 52f + (offset ? 15f : 55f)), new Vector2(x + colWidth/2 , 110f), Color.gray, 1);
                Widgets.Label(defLabel, kList[i].label);

                StringBuilder labelSB = new StringBuilder();
                labelSB.AppendLine("koisama.Numbers.SortByTooltip".Translate(kList[i].label));
                labelSB.AppendLine("koisama.Numbers.RemoveTooltip".Translate());
                TooltipHandler.TipRegion(defLabel, labelSB.ToString());
                Widgets.DrawHighlightIfMouseover(defLabel);

                if (Widgets.InvisibleButton(defLabel))
                {
                    if (Event.current.button == 1)
                    {
                        kList.RemoveAt(i);
                    }
                    else
                    {

                        if (chosenOrderBy == orderBy.Column && kList[i].Equals(sortObject))
                        {
                            pawnListDescending = !pawnListDescending;
                        }
                        else
                        {
                            sortObject = kList[i];
                            chosenOrderBy = orderBy.Column;
                            pawnListDescending = false;
                        }
                    }
                    isDirty = true;
                }
                offset = !offset;
                x += colWidth;
            }
            GUI.EndGroup();

            //content
            Rect content = new Rect(0f, position.yMax, r.width, r.height - position.yMax);
            GUI.BeginGroup(content);
            base.DrawRows(new Rect(0f, 0f, content.width, content.height));
            GUI.EndGroup();
        }
        //other hardcoded options
        public void OtherOptionsMaker()
        {
            List<FloatMenuOption> list = new List<FloatMenuOption>();
                        
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Gear, "Equipment".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("Equipment".Translate(), action, MenuOptionPriority.Medium, null, null));
            }

            if (chosenPawnType == pawnType.Prisoners) {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerGetsFood, "GetsFood".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("GetsFood".Translate(), action, MenuOptionPriority.Medium, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerInteraction, "koisama.Interaction".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Interaction".Translate(), action2, MenuOptionPriority.Medium, null, null));
            }

            if (new[] { pawnType.Colonists, pawnType.Prisoners }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlMedicalCare, "koisama.MedicalCare".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.MedicalCare".Translate(), action, MenuOptionPriority.Medium, null, null));
            }


                Find.WindowStack.Add(new FloatMenu(list, false));
        }
 public void NeedsOptionsMaker()
 {
     List<FloatMenuOption> list = new List<FloatMenuOption>();
     foreach (NeedDef need in pNeedDef)
     {
         Action action = delegate
         {
             KListObject kl = new KListObject(KListObject.objectType.Need, need.LabelCap, need);
             if (fits(kl.minWidthDesired))
                 kList.Add(kl);
         };
         list.Add(new FloatMenuOption(need.LabelCap, action, MenuOptionPriority.Medium, null, null));
     }
     Find.WindowStack.Add(new FloatMenu(list, false));
 }
 public void SkillsOptionsMaker()
 {
     List<FloatMenuOption> list = new List<FloatMenuOption>();
     foreach (SkillDef skill in DefDatabase<SkillDef>.AllDefsListForReading)
     {
         Action action = delegate
         {
             KListObject kl = new KListObject(KListObject.objectType.Skill, skill.LabelCap, skill);
             if (fits(kl.minWidthDesired))
                 kList.Add(kl);
         };
         list.Add(new FloatMenuOption(skill.LabelCap, action, MenuOptionPriority.Medium, null, null));
     }
     Find.WindowStack.Add(new FloatMenu(list, false));
 }
        //other hardcoded options
        public void OtherOptionsMaker()
        {
            List<FloatMenuOption> list = new List<FloatMenuOption>();
            
            //equipment bearers            
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Corpses }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Gear, "koisama.Equipment".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Equipment".Translate(), action, MenuOptionPriority.Medium, null, null));
            }

            //all living things
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Enemies, pawnType.Animals, pawnType.WildAnimals, pawnType.Guests }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.Age, "koisama.Age".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Age".Translate(), action, MenuOptionPriority.Medium, null, null));
            }

            if (chosenPawnType == pawnType.Prisoners) {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerGetsFood, "GetsFood".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("GetsFood".Translate(), action, MenuOptionPriority.Medium, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlPrisonerInteraction, "koisama.Interaction".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.Interaction".Translate(), action2, MenuOptionPriority.Medium, null, null));
            }

            if (chosenPawnType == pawnType.Animals)
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.AnimalMilkFullness, "MilkFullness".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("MilkFullness".Translate(), action, MenuOptionPriority.Medium, null, null));

                Action action2 = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.AnimalWoolGrowth, "WoolGrowth".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("WoolGrowth".Translate(), action2, MenuOptionPriority.Medium, null, null));
            }

            //healable
            if (new[] { pawnType.Colonists, pawnType.Prisoners, pawnType.Animals }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.ControlMedicalCare, "koisama.MedicalCare".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.MedicalCare".Translate(), action, MenuOptionPriority.Medium, null, null));
            }

            if (! new[] { pawnType.Corpses, pawnType.AnimalCorpses }.Contains(chosenPawnType))
            {
                Action action = delegate
                {
                    KListObject kl = new KListObject(KListObject.objectType.CurrentJob, "koisama.CurrentJob".Translate(), null);
                    if (fits(kl.minWidthDesired))
                        kList.Add(kl);
                };
                list.Add(new FloatMenuOption("koisama.CurrentJob".Translate(), action, MenuOptionPriority.Medium, null, null));
            }

            Find.WindowStack.Add(new FloatMenu(list));
        }
 public void StatsOptionsMaker()
 {
     
     List<FloatMenuOption> list = new List<FloatMenuOption>();
     foreach(StatDef stat in pStatDef)
     {
         Action action = delegate
         {
             KListObject kl = new KListObject(KListObject.objectType.Stat, stat.LabelCap, stat);
             if(fits(kl.minWidthDesired))
                 kList.Add(kl);
         };
         list.Add(new FloatMenuOption(stat.LabelCap, action, MenuOptionPriority.Medium, null, null));
     }
     Find.WindowStack.Add(new FloatMenu(list));
 }