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); } } }
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; } }