コード例 #1
0
        protected void DrawEquipmentList(ViewEquipmentList view)
        {
            SortField sortField = PrepareCarefully.Instance.SortField;

            view.Table.Draw(FilterEquipmentList(view));
            view.Table.BackgroundColor = Style.ColorPanelBackgroundDeep;
        }
コード例 #2
0
 protected void SortByName(ViewEquipmentList view, int direction)
 {
     if (direction == 1)
     {
         view.List.SortBy((EquipmentRecord arg) => { return(arg.Label); });
     }
     else
     {
         view.List.SortByDescending((EquipmentRecord arg) => { return(arg.Label); });
     }
 }
コード例 #3
0
        protected void DrawFilters(ViewEquipmentList view)
        {
            string label = selectedType.Label.Translate();

            if (WidgetDropdown.Button(RectDropdownTypes, label, true, false, true))
            {
                List <FloatMenuOption> list = new List <FloatMenuOption>();
                foreach (var type in providerEquipment.Types)
                {
                    EquipmentType localType = type;
                    list.Add(new FloatMenuOption(type.Label.Translate(), () => {
                        this.selectedType = localType;
                        this.UpdateAvailableMaterials();
                    }, MenuOptionPriority.Default, null, null, 0, null, null));
                }
                Find.WindowStack.Add(new FloatMenu(list, null, false));
            }

            if (StuffFilterVisible)
            {
                string stuffLabel = null;
                if (!filterMadeFromStuff)
                {
                    stuffLabel = "EdB.PC.Panel.AvailableEquipment.Materials.None".Translate();
                }
                else if (filterStuff == null)
                {
                    stuffLabel = "EdB.PC.Panel.AvailableEquipment.Materials.All".Translate();
                }
                else
                {
                    stuffLabel = filterStuff.LabelCap;
                }
                if (WidgetDropdown.Button(RectDropdownMaterials, stuffLabel, true, false, true))
                {
                    List <FloatMenuOption> stuffFilterOptions = new List <FloatMenuOption>();
                    stuffFilterOptions.Add(new FloatMenuOption("EdB.PC.Panel.AvailableEquipment.Materials.All".Translate(), () => {
                        UpdateStuffFilter(true, null);
                    }, MenuOptionPriority.Default, null, null, 0, null, null));
                    stuffFilterOptions.Add(new FloatMenuOption("EdB.PC.Panel.AvailableEquipment.Materials.None".Translate(), () => {
                        UpdateStuffFilter(false, null);
                    }, MenuOptionPriority.Default, null, null, 0, null, null));
                    foreach (var item in stuffFilterSet.OrderBy((ThingDef def) => { return(def.LabelCap.Resolve()); }))
                    {
                        stuffFilterOptions.Add(new FloatMenuOption(item.LabelCap, () => {
                            UpdateStuffFilter(true, item);
                        }, MenuOptionPriority.Default, null, null, 0, null, null));
                    }
                    Find.WindowStack.Add(new FloatMenu(stuffFilterOptions, null, false));
                }
            }
        }
コード例 #4
0
        protected void UpdateStuffFilter(bool madeFromStuff, ThingDef stuff)
        {
            this.filterMadeFromStuff = madeFromStuff;
            this.filterStuff         = stuff;
            ViewEquipmentList             view    = CurrentView;
            IEnumerable <EquipmentRecord> entries = FilterEquipmentList(view);

            if (!entries.Any((EquipmentRecord e) => {
                return(e == view.Table.Selected);
            }))
            {
                view.Table.Selected = entries.FirstOrDefault();
            }
        }
コード例 #5
0
 protected IEnumerable <EquipmentRecord> FilterEquipmentList(ViewEquipmentList view)
 {
     if (StuffFilterVisible)
     {
         return(view.List.FindAll((EquipmentRecord entry) => {
             if (filterMadeFromStuff)
             {
                 return filterStuff == null || filterStuff == entry.stuffDef;
             }
             else
             {
                 return !entry.def.MadeFromStuff;
             }
         }));
     }
     return(view.List);
 }
コード例 #6
0
        protected void UpdateAvailableMaterials()
        {
            ViewEquipmentList view = CurrentView;

            stuffFilterSet.Clear();
            foreach (var item in view.List)
            {
                if (item.stuffDef != null)
                {
                    stuffFilterSet.Add(item.stuffDef);
                }
            }
            if (filterStuff != null && !stuffFilterSet.Contains(filterStuff))
            {
                filterStuff = null;
            }
        }
コード例 #7
0
 protected void SortByCost(ViewEquipmentList view, int direction)
 {
     view.List.Sort((EquipmentRecord x, EquipmentRecord y) => {
         if (direction == 1)
         {
             int result = x.cost.CompareTo(y.cost);
             if (result != 0)
             {
                 return(result);
             }
         }
         else
         {
             int result = y.cost.CompareTo(x.cost);
             if (result != 0)
             {
                 return(result);
             }
         }
         return(x.Label.CompareTo(y.Label));
     });
 }
コード例 #8
0
        public override void Resize(Rect rect)
        {
            base.Resize(rect);

            Vector2 padding = new Vector2(12, 12);

            RectDropdownTypes     = new Rect(padding.x, padding.y, 140, 28);
            RectDropdownMaterials = new Rect(RectDropdownTypes.xMax + 8, RectDropdownTypes.yMin, 160, 28);

            Vector2 sizeInfoButton = new Vector2(24, 24);
            Vector2 sizeAddButton  = new Vector2(160, 34);

            RectAddButton = new Rect(PanelRect.HalfWidth() - sizeAddButton.HalfX(),
                                     PanelRect.height - padding.y - sizeAddButton.y, sizeAddButton.x, sizeAddButton.y);

            Vector2 listSize = new Vector2();

            listSize.x = rect.width - padding.x * 2;
            listSize.y = rect.height - RectDropdownTypes.yMax - (padding.y * 3) - RectAddButton.height;
            float listHeaderHeight = 20;
            float listBodyHeight   = listSize.y - listHeaderHeight;

            Rect rectTable = new Rect(padding.x, padding.y + RectDropdownTypes.yMax, listSize.x, listSize.y);

            RectListHeader = new Rect(padding.x, RectDropdownTypes.yMax + 4, listSize.x, listHeaderHeight);
            RectListBody   = new Rect(padding.x, RectListHeader.yMax, listSize.x, listBodyHeight);

            RectColumnHeaderName = new Rect(RectListHeader.x + 64, RectListHeader.y, 240, RectListHeader.height);
            RectColumnHeaderCost = new Rect(RectListHeader.xMax - 100, RectListHeader.y, 100, RectListHeader.height);

            RectScrollFrame = RectListBody;
            RectScrollView  = new Rect(0, 0, RectScrollFrame.width, RectScrollFrame.height);

            RectRow  = new Rect(0, 0, RectScrollView.width, 42);
            RectItem = new Rect(10, 2, 38, 38);

            Vector2 nameOffset      = new Vector2(10, 0);
            float   columnWidthInfo = 36;
            float   columnWidthIcon = 42;
            float   columnWidthCost = 100;
            float   columnWidthName = RectRow.width - columnWidthInfo - columnWidthIcon - columnWidthCost - 10;

            if (providerEquipment == null)
            {
                providerEquipment = new ProviderEquipmentTypes();
            }
            if (!providerEquipment.DatabaseReady)
            {
                return;
            }
            foreach (var type in providerEquipment.Types)
            {
                if (!equipmentViews.ContainsKey(type))
                {
                    WidgetTable <EquipmentRecord> table = new WidgetTable <EquipmentRecord>();
                    table.Rect              = rectTable;
                    table.BackgroundColor   = Style.ColorPanelBackgroundDeep;
                    table.RowColor          = Style.ColorTableRow1;
                    table.AlternateRowColor = Style.ColorTableRow2;
                    table.SelectedRowColor  = Style.ColorTableRowSelected;
                    table.SupportSelection  = true;
                    table.RowHeight         = 42;
                    table.ShowHeader        = true;
                    table.SortAction        = DoSort;
                    table.SelectedAction    = (EquipmentRecord entry) => {
                        SoundDefOf.Tick_Tiny.PlayOneShotOnCamera();
                    };
                    table.DoubleClickAction = (EquipmentRecord entry) => {
                        SoundDefOf.Tick_High.PlayOneShotOnCamera();
                        EquipmentAdded(entry);
                    };
                    table.AddColumn(new WidgetTable <EquipmentRecord> .Column()
                    {
                        Width      = columnWidthInfo,
                        Name       = ColumnNameInfo,
                        DrawAction = (EquipmentRecord entry, Rect columnRect, WidgetTable <EquipmentRecord> .Metadata metadata) => {
                            Rect infoRect = new Rect(columnRect.MiddleX() - sizeInfoButton.HalfX(), columnRect.MiddleY() - sizeInfoButton.HalfY(), sizeInfoButton.x, sizeInfoButton.y);
                            Style.SetGUIColorForButton(infoRect);
                            GUI.DrawTexture(infoRect, Textures.TextureButtonInfo);
                            if (Widgets.ButtonInvisible(infoRect))
                            {
                                if (entry.animal)
                                {
                                    Find.WindowStack.Add((Window) new Dialog_InfoCard(entry.thing));
                                }
                                else if (entry.stuffDef != null)
                                {
                                    Find.WindowStack.Add((Window) new Dialog_InfoCard(entry.def, entry.stuffDef));
                                }
                                else
                                {
                                    Find.WindowStack.Add((Window) new Dialog_InfoCard(entry.def));
                                }
                            }
                            GUI.color = Color.white;
                        }
                    });
                    table.AddColumn(new WidgetTable <EquipmentRecord> .Column()
                    {
                        Width      = columnWidthIcon,
                        Name       = ColumnNameIcon,
                        DrawAction = (EquipmentRecord entry, Rect columnRect, WidgetTable <EquipmentRecord> .Metadata metadata) => {
                            WidgetEquipmentIcon.Draw(columnRect, entry);
                        }
                    });
                    table.AddColumn(new WidgetTable <EquipmentRecord> .Column()
                    {
                        Width = columnWidthName,
                        Name  = ColumnNameName,
                        Label = "Name",
                        AdjustForScrollbars = true,
                        AllowSorting        = true,
                        DrawAction          = (EquipmentRecord entry, Rect columnRect, WidgetTable <EquipmentRecord> .Metadata metadata) => {
                            columnRect  = columnRect.InsetBy(nameOffset.x, 0, 0, 0);
                            GUI.color   = Style.ColorText;
                            Text.Font   = GameFont.Small;
                            Text.Anchor = TextAnchor.MiddleLeft;
                            Widgets.Label(columnRect, entry.Label);
                            GUI.color   = Color.white;
                            Text.Anchor = TextAnchor.UpperLeft;
                        }
                    });
                    table.AddColumn(new WidgetTable <EquipmentRecord> .Column()
                    {
                        Width = columnWidthCost,
                        Name  = ColumnNameCost,
                        Label = "Cost",
                        AdjustForScrollbars = false,
                        AllowSorting        = true,
                        DrawAction          = (EquipmentRecord entry, Rect columnRect, WidgetTable <EquipmentRecord> .Metadata metadata) => {
                            GUI.color   = Style.ColorText;
                            Text.Font   = GameFont.Small;
                            Text.Anchor = TextAnchor.MiddleRight;
                            Widgets.Label(new Rect(columnRect.x, columnRect.y, columnRect.width, columnRect.height),
                                          "" + entry.cost);
                            GUI.color   = Color.white;
                            Text.Anchor = TextAnchor.UpperLeft;
                        },
                        Alignment = TextAnchor.LowerRight
                    });
                    table.SetSortState(ColumnNameName, 1);
                    ViewEquipmentList view = new ViewEquipmentList()
                    {
                        Table = table,
                        List  = providerEquipment.AllEquipmentOfType(type).ToList()
                    };
                    SortByName(view, 1);
                    equipmentViews.Add(type, view);
                }
            }
        }