예제 #1
0
        private void DrawRecipeModules(ImGui gui, Entity beacon)
        {
            using (var grid = gui.EnterInlineGrid(3f, 1f))
            {
                foreach (var module in recipe.modules.list)
                {
                    if (module.inBeacon != (beacon != null))
                    {
                        continue;
                    }
                    grid.Next();
                    var evt = gui.BuildFactorioGoodsWithEditableAmount(module.module, module.fixedCount, UnitOfMeasure.None, out var newAmount);
                    if (evt == GoodsWithAmountEvent.ButtonClick)
                    {
                        SelectObjectPanel.Select(GetModules(beacon), "Select module", sel =>
                        {
                            if (sel == null)
                            {
                                recipe.modules.RecordUndo().list.Remove(module);
                            }
                            else
                            {
                                module.module = sel;
                            }
                            gui.Rebuild();
                        }, DataUtils.FavouriteModule, true);
                    }
                    else if (evt == GoodsWithAmountEvent.TextEditing)
                    {
                        var amountInt = MathUtils.Floor(newAmount);
                        if (amountInt < 0)
                        {
                            amountInt = 0;
                        }
                        module.fixedCount = amountInt;
                    }
                }

                grid.Next();
                if (gui.BuildButton(Icon.Plus, SchemeColor.Primary, SchemeColor.PrimalyAlt, size: 2.5f))
                {
                    SelectObjectPanel.Select(GetModules(beacon), "Select module", sel =>
                    {
                        recipe.modules.RecordUndo().list.Add(new RecipeRowCustomModule(recipe.modules, sel)
                        {
                            inBeacon = beacon != null
                        });
                        gui.Rebuild();
                    }, DataUtils.FavouriteModule, false);
                }
            }
        }
예제 #2
0
        private void DrawDesiredProduct(ImGui gui, ProductionLink element)
        {
            gui.allocator = RectAllocator.Stretch;
            gui.spacing   = 0f;
            var error = element.flags.HasFlags(ProductionLink.Flags.LinkNotMatched);
            var evt   = gui.BuildFactorioGoodsWithEditableAmount(element.goods, element.amount, element.goods.flowUnitOfMeasure, out var newAmount, error ? SchemeColor.Error : SchemeColor.Primary);

            if (evt == GoodsWithAmountEvent.ButtonClick)
            {
                OpenProductDropdown(gui, gui.lastRect, element.goods, ProductDropdownType.DesiredProduct, null, model);
            }
            else if (evt == GoodsWithAmountEvent.TextEditing && newAmount != 0)
            {
                element.RecordUndo().amount = newAmount;
            }
        }