private void BuildRecipePad(ImGui gui, RecipeRow row) { gui.allocator = RectAllocator.Center; gui.spacing = 0f; if (row.subgroup != null) { if (gui.BuildButton(row.subgroup.expanded ? Icon.ShevronDown : Icon.ShevronRight)) { row.subgroup.RecordUndo(true).expanded = !row.subgroup.expanded; flatHierarchyBuilder.SetData(model); } } if (row.parameters.warningFlags != 0) { var isError = row.parameters.warningFlags >= WarningFlags.EntityNotSpecified; bool hover; if (isError) { hover = gui.BuildRedButton(Icon.Error) == ImGuiUtils.Event.MouseOver; } else { using (gui.EnterGroup(ImGuiUtils.DefaultIconPadding)) gui.BuildIcon(Icon.Help); hover = gui.BuildButton(gui.lastRect, SchemeColor.None, SchemeColor.Grey) == ImGuiUtils.Event.MouseOver; } if (hover) { gui.ShowTooltip(g => { if (isError) { g.boxColor = SchemeColor.Error; g.textColor = SchemeColor.ErrorText; } foreach (var(flag, text) in WarningsMeaning) { if ((row.parameters.warningFlags & flag) != 0) { g.BuildText(text, wrap: true); } } }); } } else { //gui.BuildText((index+1).ToString()); TODO } }
private void ElementDrawer(ImGui gui, FactorioObject element, int index) { if (element == null) { if (gui.BuildRedButton(Icon.Close) == ImGuiUtils.Event.Click) { CloseWithResult(null); } } else { if (gui.BuildFactorioObjectButton(element, display: MilestoneDisplay.Contained, extendHeader: extendHeader)) { CloseWithResult(element); } } }
public override void Build(ImGui gui) { gui.spacing = 3f; BuildHeader(gui, editingPage == null ? "Create new page" : "Edit page icon and name"); Build(gui, ref name, icon, s => { icon = s; Rebuild(); }); using (gui.EnterRow(0.5f, RectAllocator.RightRow)) { if (editingPage == null && gui.BuildButton("Create", active: !string.IsNullOrEmpty(name))) { callback?.Invoke(name, icon); Close(); } if (editingPage != null && gui.BuildButton("OK", active: !string.IsNullOrEmpty(name))) { if (editingPage.name != name || editingPage.icon != icon) { editingPage.RecordUndo(true).name = name; editingPage.icon = icon; } Close(); } if (gui.BuildButton("Cancel", SchemeColor.Grey)) { Close(); } if (editingPage != null && gui.BuildButton("Other tools", SchemeColor.Grey, active: !string.IsNullOrEmpty(name))) { gui.ShowDropDown(OtherToolsDropdown); } gui.allocator = RectAllocator.LeftRow; if (editingPage != null && gui.BuildRedButton("Delete page") == ImGuiUtils.Event.Click) { Project.current.RecordUndo().pages.Remove(editingPage); Close(); } } }
private void BuildRecipePad(ImGui gui, RecipeRow row) { gui.allocator = RectAllocator.Center; gui.spacing = 0f; if (row.subgroup != null) { if (gui.BuildButton(row.subgroup.expanded ? Icon.ShevronDown : Icon.ShevronRight)) { row.subgroup.RecordUndo(true).expanded = !row.subgroup.expanded; flatHierarchyBuilder.SetData(model); } } if (row.parameters.warningFlags != 0) { if (gui.BuildRedButton(Icon.Error) == ImGuiUtils.Event.MouseOver) { gui.ShowTooltip(g => { g.boxColor = SchemeColor.Error; g.textColor = SchemeColor.ErrorText; foreach (var(flag, text) in WarningsMeaning) { if ((row.parameters.warningFlags & flag) != 0) { g.BuildText(text, wrap: true); } } }); } } else { //gui.BuildText((index+1).ToString()); TODO } }
public override void Build(ImGui gui) { BuildHeader(gui, "Module customisation"); if (recipe.modules == null) { if (gui.BuildButton("Enable custom modules")) { recipe.RecordUndo().modules = new CustomModules(recipe); } } else { var effects = new ModuleEffects(); if (recipe.entity?.moduleSlots > 0) { gui.BuildText("Internal modules:", Font.subheader); gui.BuildText("Leave zero amount to fill the remainings slots"); DrawRecipeModules(gui, null, ref effects); } else { gui.BuildText("This building doesn't have module slots, but can be affected by beacons"); } gui.BuildText("Beacon modules:", Font.subheader); if (recipe.modules.beacon == null) { gui.BuildText("Use default parameters"); if (gui.BuildButton("Override beacons as well")) { SelectBeacon(gui); } var defaultFiller = recipe.GetModuleFiller(); if (defaultFiller != null && defaultFiller.beacon != null && defaultFiller.beaconModule != null) { effects.AddModules(defaultFiller.beaconModule.module, defaultFiller.beacon.beaconEfficiency * defaultFiller.beacon.moduleSlots * defaultFiller.beaconsPerBuilding); } } else { if (gui.BuildFactorioObjectButtonWithText(recipe.modules.beacon)) { SelectBeacon(gui); } gui.BuildText("Input the amount of modules, not the amount of beacons. Single beacon can hold " + recipe.modules.beacon.moduleSlots + " modules.", wrap: true); DrawRecipeModules(gui, recipe.modules.beacon, ref effects); } gui.BuildText("Current effects:", Font.subheader); gui.BuildText("Productivity bonus: " + DataUtils.FormatAmount(effects.productivity, UnitOfMeasure.Percent)); gui.BuildText("Speed bonus: " + DataUtils.FormatAmount(effects.speedMod, UnitOfMeasure.Percent) + " (Crafting speed: " + DataUtils.FormatAmount((recipe.entity?.craftingSpeed ?? 1f) * (1f + effects.speedMod), UnitOfMeasure.None) + ")"); var energyUsageLine = "Energy usage: " + DataUtils.FormatAmount(effects.energyUsageMod, UnitOfMeasure.Percent); if (!recipe.recipe.flags.HasFlagAny(RecipeFlags.UsesFluidTemperature | RecipeFlags.ScaleProductionWithPower) && recipe.entity != null) { energyUsageLine += " (" + DataUtils.FormatAmount(effects.energyUsageMod * recipe.entity.power / recipe.entity.energy.effectivity, UnitOfMeasure.Megawatt) + " per building)"; } gui.BuildText(energyUsageLine); } gui.AllocateSpacing(3f); using (gui.EnterRow(allocator: RectAllocator.RightRow)) { if (gui.BuildButton("Done")) { Close(); } if (recipe.modules != null && gui.BuildButton("Copy settings", SchemeColor.Grey)) { if (copiedModuleSettings == null) { MessageBox.Show("Info", "Use ctrl+click on module slot to paste settings", "Ok"); } copiedModuleSettings = JsonUtils.SaveToJson(recipe.modules); } gui.allocator = RectAllocator.LeftRow; if (recipe.modules != null && gui.BuildRedButton("Remove module customisation") == ImGuiUtils.Event.Click) { recipe.RecordUndo().modules = null; Close(); } } }
public override void Build(ImGui gui) { gui.spacing = 3f; BuildHeader(gui, editingPage == null ? "Create new page" : "Edit page icon and name"); Build(gui, ref name, icon, s => { icon = s; Rebuild(); }); using (gui.EnterRow(0.5f, RectAllocator.RightRow)) { if (editingPage == null && gui.BuildButton("Create", active: !string.IsNullOrEmpty(name))) { callback?.Invoke(name, icon); Close(); } if (editingPage != null && gui.BuildButton("OK", active: !string.IsNullOrEmpty(name))) { if (editingPage.name != name || editingPage.icon != icon) { editingPage.RecordUndo(true).name = name; editingPage.icon = icon; } Close(); } if (gui.BuildButton("Cancel", SchemeColor.Grey)) { Close(); } if (editingPage != null && gui.BuildButton("Duplicate page", SchemeColor.Grey, active: !string.IsNullOrEmpty(name))) { var project = editingPage.owner; var collector = new ErrorCollector(); var serializedCopy = JsonUtils.Copy(editingPage, project, collector); if (collector.severity > ErrorSeverity.None) { ErrorListPanel.Show(collector); } if (serializedCopy != null) { serializedCopy.GenerateNewGuid(); serializedCopy.icon = icon; serializedCopy.name = name; project.RecordUndo().pages.Add(serializedCopy); MainScreen.Instance.SetActivePage(serializedCopy); Close(); } } gui.allocator = RectAllocator.LeftRow; if (editingPage != null && gui.BuildRedButton("Delete page") == ImGuiUtils.Event.Click) { Project.current.RecordUndo().pages.Remove(editingPage); Close(); } } }