private void BuildRecipeMenu(ImGui gui, ref bool closed) { if (gui.BuildButton("Add recipe") && (closed = true)) { SelectObjectPanel.Select(Database.recipes.all, "Select raw recipe", r => AddRecipe(model, r)); } gui.BuildText("Export inputs and outputs to blueprint with constant combinators:", wrap: true); using (gui.EnterRow()) { gui.BuildText("Amount per:"); if (gui.BuildLink("second") && (closed = true)) { ExportIo(1f); } if (gui.BuildLink("minute") && (closed = true)) { ExportIo(60f); } if (gui.BuildLink("hour") && (closed = true)) { ExportIo(3600f); } } }
private void BuildLink(ImGui gui, string url, string text = null) { if (gui.BuildLink(text ?? url)) { VisitLink(url); } }
private void DrawEntryList(ImGui gui, List <RecipeEntry> entries, bool production) { var footerDrawn = false; var prevEntryStatus = EntryStatus.Normal; FactorioObject prevLatestMilestone = null; foreach (var entry in entries) { var status = entry.entryStatus; if (status < showRecipesRange) { DrawEntryFooter(gui, production); footerDrawn = true; gui.BuildText(entry.entryStatus == EntryStatus.Special ? "Show special recipes (barreling / voiding)" : entry.entryStatus == EntryStatus.NotAccessibleWithCurrentMilestones ? "There are more recipes, but they are locked based on current milestones" : "There are more recipes but they are inaccessible", wrap: true); if (gui.BuildButton("Show more recipes")) { ChangeShowStatus(status); } break; } if (status < prevEntryStatus) { prevEntryStatus = status; using (gui.EnterRow()) { gui.BuildText(status == EntryStatus.Special ? "Special recipes:" : status == EntryStatus.NotAccessibleWithCurrentMilestones ? "Locked recipes:" : "Inaccessible recipes:"); if (gui.BuildLink("hide")) { ChangeShowStatus(status + 1); } } } if (status == EntryStatus.NotAccessibleWithCurrentMilestones) { var latest = Milestones.Instance.GetHighest(entry.recipe, false); if (latest != prevLatestMilestone) { gui.BuildFactorioObjectButtonWithText(latest, size: 3f, display: MilestoneDisplay.None); prevLatestMilestone = latest; } } if (gui.ShouldBuildGroup(entry.recipe, out var group)) { DrawRecipeEntry(gui, entry, production); group.Complete(); } } if (!footerDrawn) { DrawEntryFooter(gui, production); } CheckChanging(); }
public override void Build(ImGui gui) { BuildHeader(gui, "Never Enough Items Explorer"); using (gui.EnterRow()) { if (recent.Count == 0) { gui.AllocateRect(0f, 3f); } for (var i = recent.Count - 1; i >= 0; i--) { var elem = recent[i]; if (gui.BuildFactorioObjectButton(elem, 3f)) { changing = elem; } } } using (gui.EnterGroup(new Padding(0.5f), RectAllocator.LeftRow)) { gui.spacing = 0.2f; gui.BuildFactorioObjectIcon(current, size: 3f); gui.BuildText(current.locName, Font.subheader); gui.allocator = RectAllocator.RightAlign; gui.BuildText(CostAnalysis.GetDisplayCost(current)); var amount = CostAnalysis.Instance.GetItemAmount(current); if (amount != null) { gui.BuildText(amount, wrap: true); } } if (gui.BuildFactorioObjectButton(gui.lastRect, current, SchemeColor.Grey)) { SelectObjectPanel.Select(Database.goods.all, "Select item", SetItem); } using (var split = gui.EnterHorizontalSplit(2)) { split.Next(); gui.BuildText("Production:", Font.subheader); productionList.Build(gui); split.Next(); gui.BuildText("Usages:", Font.subheader); usageList.Build(gui); } CheckChanging(); using (gui.EnterRow()) { if (gui.BuildLink("What do colored bars mean?")) { MessageBox.Show("How to read colored bars", "Blue bar means estimated production or comsumption of the thing you selected. Blue bar at 50% means that that recipe produces(consumes) 50% of the product.\n\n" + "Orange bar means estimated recipe efficiency. If it is not full, the recipe looks inefficient to YAFC.\n\n" + "It is possible for a recipe to be efficient but not useful - for example a recipe that produces something that is not useful.\n\n" + "YAFC only estimates things that are required for science recipes. So buildings, belts, weapons, fuel - are not shown in estimations.", "Ok"); } if (gui.BuildCheckBox("Current milestones info", atCurrentMilestones, out atCurrentMilestones, allocator: RectAllocator.RightRow)) { var item = current; current = null; SetItem(item); } } }