diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterCapacitorBankMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterCapacitorBankMenu.java index b8e068ef4..e7f30eb79 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterCapacitorBankMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterCapacitorBankMenu.java @@ -14,7 +14,7 @@ public class MatterCapacitorBankMenu extends MatteryMenu { this(p_38852_, inventory, null); } - public MatterLevelWidget matter; + public MatterLevelWidget matter_widget; public MatterContainerInputSlot[] container_slots = new MatterContainerInputSlot[2 * 6]; @@ -22,9 +22,9 @@ public class MatterCapacitorBankMenu extends MatteryMenu { super(Registry.Menus.MATTER_CAPACITOR_BANK, p_38852_, inventory, tile); if (tile == null) { - matter = new MatterLevelWidget(this, 14, 20); + matter_widget = new MatterLevelWidget(this, 14, 20); } else { - matter = new MatterLevelWidget(this, 14, 20, tile.matter); + matter_widget = new MatterLevelWidget(this, 14, 20, tile.matter); } Container container = tile != null ? tile.matter_container : new SimpleContainer(2 * 6); diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java index 6674deb7c..1595cf60d 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java @@ -23,6 +23,7 @@ public class MatterDecomposerMenu extends PoweredMatteryMenu { public MatterySlot input; public MachineOutputSlot output; public ProgressGaugeWidget progress; + public MatterLevelWidget matter_widget; public MatterDecomposerMenu(int containerID, Inventory inventory, @Nullable BlockEntityMatterDecomposer tile) { super(Registry.Menus.MATTER_DECOMPOSER, containerID, inventory, tile); @@ -43,15 +44,13 @@ public class MatterDecomposerMenu extends PoweredMatteryMenu { addSlot(output); if (tile == null || tile.getCapability(MatteryCapability.MATTER).resolve().isEmpty()) { - new MatterLevelWidget(this, 22, 14); + matter_widget = new MatterLevelWidget(this, 22, 14); progress = new ProgressGaugeWidget(this, 61 + 18 + 3, 36); } else { - new MatterLevelWidget(this, 22, 14, tile.getCapability(MatteryCapability.MATTER).resolve().get()); + matter_widget = new MatterLevelWidget(this, 22, 14, tile.getCapability(MatteryCapability.MATTER).resolve().get()); progress = new ProgressGaugeWidget(this, 61 + 18 + 3, 36, () -> (float) tile.getWorkProgress(), tile::cantProcessJob); } - progress.noAutoParent(); - addBatterySlot(14); addInventorySlots(); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterReplicatorMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterReplicatorMenu.java index 771ff9f6b..32f3f8a54 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterReplicatorMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterReplicatorMenu.java @@ -14,6 +14,7 @@ public class MatterReplicatorMenu extends PoweredMatteryMenu { this(p_38852_, inventory, null); } + public MatterLevelWidget matter_widget; public ProgressGaugeWidget progress; public MachineOutputSlot[] output_slots = new MachineOutputSlot[3]; @@ -28,15 +29,13 @@ public class MatterReplicatorMenu extends PoweredMatteryMenu { } if (tile != null) { - new MatterLevelWidget(this, 22, 14, tile.matter); + matter_widget = new MatterLevelWidget(this, 22, 14, tile.matter); progress = new ProgressGaugeWidget(this, 38, 38, () -> (float) tile.getWorkProgress(), tile::cantProcessJob); } else { - new MatterLevelWidget(this, 22, 14); + matter_widget = new MatterLevelWidget(this, 22, 14); progress = new ProgressGaugeWidget(this, 38, 38); } - progress.noAutoParent(); - addBatterySlot(14); addInventorySlots(); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterScannerMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterScannerMenu.java index 4f96a1a2f..d3038bea7 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterScannerMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterScannerMenu.java @@ -38,8 +38,6 @@ public class MatterScannerMenu extends PoweredMatteryMenu { progress = new ProgressGaugeWidget(this, 88, 38); } - progress.noAutoParent(); - addBatterySlot(); addInventorySlots(); diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java index 5513eda8e..bb8b40ac2 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java @@ -15,6 +15,7 @@ abstract public class PoweredMatteryMenu extends MatteryMenu { protected BlockEntityMatteryPowered tile; public BatteryLevelWidget battery_widget; + public BatterySlot battery_slot; protected PoweredMatteryMenu( @Nullable MenuType menuType, @@ -42,6 +43,7 @@ abstract public class PoweredMatteryMenu extends MatteryMenu { protected void addBatterySlot(int x, int y) { Container battery_container = tile != null ? tile.battery_container : new SimpleContainer(1); - addMainSlot(new BatterySlot(battery_container, 0, x, y, true)); + battery_slot = new BatterySlot(battery_container, 0, x, y, true); + addSlot(battery_slot); } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java index cee67cab5..5658504c5 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/AbstractWidget.java @@ -29,7 +29,7 @@ public abstract class AbstractWidget { public int y; protected Consumer register_data; - public boolean auto_parent = true; + public boolean auto_parent = false; public abstract int getImageWidth(); public abstract int getImageHeight(); @@ -44,8 +44,12 @@ public abstract class AbstractWidget { menu.addWidget(this, (consumer) -> register_data = consumer); } - public AbstractWidget noAutoParent() { - auto_parent = false; + public AbstractWidget(@Nonnull MatteryMenu menu) { + this(menu, 0, 0); + } + + public AbstractWidget autoParent() { + auto_parent = true; return this; } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java index 3119ff64c..b1491a1ee 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/GaugeWidget.java @@ -19,6 +19,10 @@ abstract public class GaugeWidget extends AbstractWidget { super(menu, x, y); } + public GaugeWidget(MatteryMenu menu) { + super(menu); + } + public GaugeDirection fill_order = GaugeDirection.BOTTOM_TO_TOP; abstract public float getLevel(); diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageGaugeWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageGaugeWidget.java index 3c04980f8..b3d9da5fd 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageGaugeWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageGaugeWidget.java @@ -18,6 +18,10 @@ abstract public class StorageGaugeWidget extends GaugeWidget { this(menu, x, y, null, null); } + public StorageGaugeWidget(MatteryMenu menu) { + this(menu, 0, 0, null, null); + } + public StorageGaugeWidget(MatteryMenu menu, int x, int y, Supplier value_supplier, Supplier max_value_supplier) { super(menu, x, y); this.value_supplier = value_supplier; @@ -27,6 +31,10 @@ abstract public class StorageGaugeWidget extends GaugeWidget { addDataSlots(max_value_container); } + public StorageGaugeWidget(MatteryMenu menu, Supplier value_supplier, Supplier max_value_supplier) { + this(menu, 0, 0, value_supplier, max_value_supplier); + } + @Override public void updateServer() { if (value_supplier == null || max_value_supplier == null) diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java index 3b126fb07..0e733775b 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java @@ -11,12 +11,15 @@ import ru.dbotthepony.mc.otm.android.AndroidResearch; import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.capability.AndroidCapabilityPlayer; import ru.dbotthepony.mc.otm.menu.AndroidStationMenu; +import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.*; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.List; -public class AndroidStationScreen extends MatteryScreen { +public class AndroidStationScreen extends MatteryScreen implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter { class AndroidResearchButton extends EditablePanel { public static final int BUTTON_SIZE = 18; private final AndroidResearch node; @@ -95,6 +98,16 @@ public class AndroidStationScreen extends MatteryScreen { super(p_97741_, p_97742_, p_97743_); } + @Override + public List getGauges() { + return List.of(menu.battery_widget); + } + + @Override + public List getBatterySlots() { + return List.of(menu.battery_slot); + } + @Nullable @Override protected FramePanel makeMainFrame() { diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java index ea1c1bf24..efc8c161a 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java @@ -8,30 +8,29 @@ import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.menu.AndroidStationMenu; import ru.dbotthepony.mc.otm.menu.BatteryBankMenu; import ru.dbotthepony.mc.otm.menu.MatteryMenu; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.Dock; import ru.dbotthepony.mc.otm.screen.panels.FlexGridPanel; import ru.dbotthepony.mc.otm.screen.panels.FramePanel; import ru.dbotthepony.mc.otm.screen.panels.SlotPanel; import javax.annotation.Nullable; +import java.util.List; -public class BatteryBankScreen extends MatteryScreen { +public class BatteryBankScreen extends MatteryScreen implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenGridBased { public BatteryBankScreen(BatteryBankMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); } - @Nullable @Override - protected FramePanel makeMainFrame() { - var frame = super.makeMainFrame(); - - var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0); - grid.setDock(Dock.FILL); + public List getGauges() { + return List.of(menu.battery_widget); + } + @Override + public void createGridPanels(FlexGridPanel grid) { for (var slot : menu.battery_slots) { new SlotPanel(this, grid, 0, 0, slot); } - - return frame; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterCapacitorBankScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterCapacitorBankScreen.java index 8cf313d31..371d79762 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterCapacitorBankScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterCapacitorBankScreen.java @@ -3,27 +3,27 @@ package ru.dbotthepony.mc.otm.screen; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import ru.dbotthepony.mc.otm.menu.MatterCapacitorBankMenu; +import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.*; import javax.annotation.Nullable; +import java.util.List; -public class MatterCapacitorBankScreen extends MatteryScreen { +public class MatterCapacitorBankScreen extends MatteryScreen implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenGridBased { public MatterCapacitorBankScreen(MatterCapacitorBankMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); } - @Nullable @Override - protected FramePanel makeMainFrame() { - var frame = super.makeMainFrame(); - - var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0); - grid.setDock(Dock.FILL); + public List getGauges() { + return List.of(menu.matter_widget); + } + @Override + public void createGridPanels(FlexGridPanel grid) { for (var slot : menu.container_slots) { new SlotPanel(this, grid, 0, 0, slot); } - - return frame; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java index 835a2b4cd..9005cb374 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java @@ -4,28 +4,32 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import ru.dbotthepony.mc.otm.menu.MatterDecomposerMenu; +import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.*; import javax.annotation.Nullable; +import java.util.List; -public class MatterDecomposerScreen extends MatteryScreen { +public class MatterDecomposerScreen extends MatteryScreen implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter, MatteryScreen.IMatteryScreenGridBased { public MatterDecomposerScreen(MatterDecomposerMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); } - @Nullable @Override - protected FramePanel makeMainFrame() { - var frame = super.makeMainFrame(); + public List getGauges() { + return List.of(menu.battery_widget, menu.matter_widget); + } - var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0); - grid.setDock(Dock.FILL); - grid.setDockPadding(0, 0, 40, 12); + @Override + public List getBatterySlots() { + return List.of(menu.battery_slot); + } + @Override + public void createGridPanels(FlexGridPanel grid) { new SlotPanel(this, grid, 0, 0, menu.input).setDockMargin(2, 0, 2, 0); new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0); new SlotPanel(this, grid, 0, 0, menu.output).setDockMargin(2, 0, 2, 0); - - return frame; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterReplicatorScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterReplicatorScreen.java index 43ce9bad0..5b6df0ed9 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterReplicatorScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterReplicatorScreen.java @@ -3,30 +3,34 @@ package ru.dbotthepony.mc.otm.screen; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import ru.dbotthepony.mc.otm.menu.MatterReplicatorMenu; +import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.*; import javax.annotation.Nullable; +import java.util.List; -public class MatterReplicatorScreen extends MatteryScreen { +public class MatterReplicatorScreen extends MatteryScreen implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter, MatteryScreen.IMatteryScreenGridBased { public MatterReplicatorScreen(MatterReplicatorMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); } - @Nullable @Override - protected FramePanel makeMainFrame() { - var frame = super.makeMainFrame(); + public List getGauges() { + return List.of(menu.battery_widget, menu.matter_widget); + } - var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0); - grid.setDock(Dock.FILL); - grid.setDockPadding(0, 0, 40, 12); + @Override + public List getBatterySlots() { + return List.of(menu.battery_slot); + } + @Override + public void createGridPanels(FlexGridPanel grid) { new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0); for (var slot : menu.output_slots) { new SlotPanel(this, grid, 0, 0, slot); } - - return frame; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterScannerScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterScannerScreen.java index 9442e3cb6..06cd2479e 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterScannerScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterScannerScreen.java @@ -3,27 +3,31 @@ package ru.dbotthepony.mc.otm.screen; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import ru.dbotthepony.mc.otm.menu.MatterScannerMenu; +import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.*; import javax.annotation.Nullable; +import java.util.List; -public class MatterScannerScreen extends MatteryScreen { +public class MatterScannerScreen extends MatteryScreen implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter, MatteryScreen.IMatteryScreenGridBased { public MatterScannerScreen(MatterScannerMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); } - @Nullable @Override - protected FramePanel makeMainFrame() { - var frame = super.makeMainFrame(); + public List getGauges() { + return List.of(menu.battery_widget); + } - var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0); - grid.setDock(Dock.FILL); - grid.setDockPadding(0, 0, 40, 12); + @Override + public List getBatterySlots() { + return List.of(menu.battery_slot); + } + @Override + public void createGridPanels(FlexGridPanel grid) { new SlotPanel(this, grid, 0, 0, menu.input).setDockMargin(2, 0, 2, 0); new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0); - - return frame; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java index d68e44f21..5120dba0c 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java @@ -22,12 +22,15 @@ import net.minecraft.world.item.ItemStack; import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.menu.MatteryMenu; import ru.dbotthepony.mc.otm.menu.PoweredMatteryMenu; +import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; import ru.dbotthepony.mc.otm.menu.slot.MatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget; import ru.dbotthepony.mc.otm.screen.panels.*; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.List; import java.util.Set; /** @@ -43,6 +46,20 @@ import java.util.Set; * @param type of menu, which extends MatteryMenu */ public abstract class MatteryScreen extends AbstractContainerScreen { + public interface IMatteryScreenLeftPanel {} + + public interface IMatteryScreenGaugeGetter extends IMatteryScreenLeftPanel { + List getGauges(); + } + + public interface IMatteryScreenBatteryGetter extends IMatteryScreenLeftPanel { + List getBatterySlots(); + } + + public interface IMatteryScreenGridBased { + void createGridPanels(FlexGridPanel grid); + } + public static final float SNAPBACK_SPEED = 100.0F; public static final int QUICKDROP_DELAY = 500; public static final int DOUBLECLICK_SPEED = 250; @@ -128,14 +145,73 @@ public abstract class MatteryScreen extends AbstractConta panels.remove(panel); } + /** + * Default implementation allows for builder-like creation of main frame panel + * achieved by this implementing specific interfaces + * + * can be freely overridden by child classes + * + * @return FramePanel created, or null + */ @Nullable protected FramePanel makeMainFrame() { var frame = new FramePanel(this, null, 0, 0, 18 * 9 + 16, 100, getTitle()); - if (menu instanceof PoweredMatteryMenu) { - // reserve 30 pixels on left - var reserve = new EditablePanel(this, frame, 0, 0, 30, 0); + if (this instanceof IMatteryScreenLeftPanel) { + var reserve = new EditablePanel(this, frame, 0, 0, 0, 0); reserve.setDock(Dock.LEFT); + + float available_height = 90; + + if (this instanceof IMatteryScreenGaugeGetter gauges) { + float width = 0; + float height = 0; + + for (var gauge : gauges.getGauges()) { + width += gauge.getImageWidth(); + height = Math.max(height, gauge.getImageHeight()); + } + + width += 2; + + var grid_gauges = new FlexGridPanel(this, reserve, 0, 0, width, height); + + if (!(this instanceof IMatteryScreenBatteryGetter)) + grid_gauges.setDock(Dock.FILL); + else + grid_gauges.setDock(Dock.TOP); + + for (var gauge : gauges.getGauges()) { + new MatteryWidgetPanel(this, grid_gauges, gauge); + } + + reserve.setWidth(Math.max(width, reserve.getWidth())); + available_height -= height; + } + + if (this instanceof IMatteryScreenBatteryGetter batteries) { + var get = batteries.getBatterySlots(); + int capacity = Math.max(1, ((int) available_height) / 18); + + reserve.setWidth(Math.max((float) Math.ceil(get.size() / (float) capacity) * 18, reserve.getWidth())); + + var grid = new FlexGridPanel(this, reserve, 0, 0, width, height); + grid.setDock(Dock.FILL); + + for (var slot : get) { + new SlotPanel<>(this, grid, slot); + } + } + + reserve.setWidth(reserve.getWidth() + 4); + reserve.setDockPadding(4, 0, 0, 0); + } + + if (this instanceof IMatteryScreenGridBased grid_based) { + var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0); + grid.setDock(Dock.FILL); + + grid_based.createGridPanels(grid); } return frame;