Automate things with FlexGridPanel
This commit is contained in:
parent
ae7629548a
commit
4f2fede296
@ -14,7 +14,7 @@ public class MatterCapacitorBankMenu extends MatteryMenu {
|
|||||||
this(p_38852_, inventory, null);
|
this(p_38852_, inventory, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MatterLevelWidget matter;
|
public MatterLevelWidget matter_widget;
|
||||||
|
|
||||||
public MatterContainerInputSlot[] container_slots = new MatterContainerInputSlot[2 * 6];
|
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);
|
super(Registry.Menus.MATTER_CAPACITOR_BANK, p_38852_, inventory, tile);
|
||||||
|
|
||||||
if (tile == null) {
|
if (tile == null) {
|
||||||
matter = new MatterLevelWidget(this, 14, 20);
|
matter_widget = new MatterLevelWidget(this, 14, 20);
|
||||||
} else {
|
} 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);
|
Container container = tile != null ? tile.matter_container : new SimpleContainer(2 * 6);
|
||||||
|
@ -23,6 +23,7 @@ public class MatterDecomposerMenu extends PoweredMatteryMenu {
|
|||||||
public MatterySlot input;
|
public MatterySlot input;
|
||||||
public MachineOutputSlot output;
|
public MachineOutputSlot output;
|
||||||
public ProgressGaugeWidget progress;
|
public ProgressGaugeWidget progress;
|
||||||
|
public MatterLevelWidget matter_widget;
|
||||||
|
|
||||||
public MatterDecomposerMenu(int containerID, Inventory inventory, @Nullable BlockEntityMatterDecomposer tile) {
|
public MatterDecomposerMenu(int containerID, Inventory inventory, @Nullable BlockEntityMatterDecomposer tile) {
|
||||||
super(Registry.Menus.MATTER_DECOMPOSER, containerID, inventory, tile);
|
super(Registry.Menus.MATTER_DECOMPOSER, containerID, inventory, tile);
|
||||||
@ -43,15 +44,13 @@ public class MatterDecomposerMenu extends PoweredMatteryMenu {
|
|||||||
addSlot(output);
|
addSlot(output);
|
||||||
|
|
||||||
if (tile == null || tile.getCapability(MatteryCapability.MATTER).resolve().isEmpty()) {
|
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);
|
progress = new ProgressGaugeWidget(this, 61 + 18 + 3, 36);
|
||||||
} else {
|
} 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 = new ProgressGaugeWidget(this, 61 + 18 + 3, 36, () -> (float) tile.getWorkProgress(), tile::cantProcessJob);
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.noAutoParent();
|
|
||||||
|
|
||||||
addBatterySlot(14);
|
addBatterySlot(14);
|
||||||
addInventorySlots();
|
addInventorySlots();
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ public class MatterReplicatorMenu extends PoweredMatteryMenu {
|
|||||||
this(p_38852_, inventory, null);
|
this(p_38852_, inventory, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MatterLevelWidget matter_widget;
|
||||||
public ProgressGaugeWidget progress;
|
public ProgressGaugeWidget progress;
|
||||||
public MachineOutputSlot[] output_slots = new MachineOutputSlot[3];
|
public MachineOutputSlot[] output_slots = new MachineOutputSlot[3];
|
||||||
|
|
||||||
@ -28,15 +29,13 @@ public class MatterReplicatorMenu extends PoweredMatteryMenu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tile != null) {
|
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);
|
progress = new ProgressGaugeWidget(this, 38, 38, () -> (float) tile.getWorkProgress(), tile::cantProcessJob);
|
||||||
} else {
|
} else {
|
||||||
new MatterLevelWidget(this, 22, 14);
|
matter_widget = new MatterLevelWidget(this, 22, 14);
|
||||||
progress = new ProgressGaugeWidget(this, 38, 38);
|
progress = new ProgressGaugeWidget(this, 38, 38);
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.noAutoParent();
|
|
||||||
|
|
||||||
addBatterySlot(14);
|
addBatterySlot(14);
|
||||||
addInventorySlots();
|
addInventorySlots();
|
||||||
}
|
}
|
||||||
|
@ -38,8 +38,6 @@ public class MatterScannerMenu extends PoweredMatteryMenu {
|
|||||||
progress = new ProgressGaugeWidget(this, 88, 38);
|
progress = new ProgressGaugeWidget(this, 88, 38);
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.noAutoParent();
|
|
||||||
|
|
||||||
addBatterySlot();
|
addBatterySlot();
|
||||||
|
|
||||||
addInventorySlots();
|
addInventorySlots();
|
||||||
|
@ -15,6 +15,7 @@ abstract public class PoweredMatteryMenu extends MatteryMenu {
|
|||||||
protected BlockEntityMatteryPowered tile;
|
protected BlockEntityMatteryPowered tile;
|
||||||
|
|
||||||
public BatteryLevelWidget battery_widget;
|
public BatteryLevelWidget battery_widget;
|
||||||
|
public BatterySlot battery_slot;
|
||||||
|
|
||||||
protected PoweredMatteryMenu(
|
protected PoweredMatteryMenu(
|
||||||
@Nullable MenuType<?> menuType,
|
@Nullable MenuType<?> menuType,
|
||||||
@ -42,6 +43,7 @@ abstract public class PoweredMatteryMenu extends MatteryMenu {
|
|||||||
|
|
||||||
protected void addBatterySlot(int x, int y) {
|
protected void addBatterySlot(int x, int y) {
|
||||||
Container battery_container = tile != null ? tile.battery_container : new SimpleContainer(1);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ public abstract class AbstractWidget {
|
|||||||
public int y;
|
public int y;
|
||||||
protected Consumer<ContainerData> register_data;
|
protected Consumer<ContainerData> register_data;
|
||||||
|
|
||||||
public boolean auto_parent = true;
|
public boolean auto_parent = false;
|
||||||
|
|
||||||
public abstract int getImageWidth();
|
public abstract int getImageWidth();
|
||||||
public abstract int getImageHeight();
|
public abstract int getImageHeight();
|
||||||
@ -44,8 +44,12 @@ public abstract class AbstractWidget {
|
|||||||
menu.addWidget(this, (consumer) -> register_data = consumer);
|
menu.addWidget(this, (consumer) -> register_data = consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractWidget noAutoParent() {
|
public AbstractWidget(@Nonnull MatteryMenu menu) {
|
||||||
auto_parent = false;
|
this(menu, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractWidget autoParent() {
|
||||||
|
auto_parent = true;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,10 @@ abstract public class GaugeWidget extends AbstractWidget {
|
|||||||
super(menu, x, y);
|
super(menu, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GaugeWidget(MatteryMenu menu) {
|
||||||
|
super(menu);
|
||||||
|
}
|
||||||
|
|
||||||
public GaugeDirection fill_order = GaugeDirection.BOTTOM_TO_TOP;
|
public GaugeDirection fill_order = GaugeDirection.BOTTOM_TO_TOP;
|
||||||
|
|
||||||
abstract public float getLevel();
|
abstract public float getLevel();
|
||||||
|
@ -18,6 +18,10 @@ abstract public class StorageGaugeWidget extends GaugeWidget {
|
|||||||
this(menu, x, y, null, null);
|
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<BigDecimal> value_supplier, Supplier<BigDecimal> max_value_supplier) {
|
public StorageGaugeWidget(MatteryMenu menu, int x, int y, Supplier<BigDecimal> value_supplier, Supplier<BigDecimal> max_value_supplier) {
|
||||||
super(menu, x, y);
|
super(menu, x, y);
|
||||||
this.value_supplier = value_supplier;
|
this.value_supplier = value_supplier;
|
||||||
@ -27,6 +31,10 @@ abstract public class StorageGaugeWidget extends GaugeWidget {
|
|||||||
addDataSlots(max_value_container);
|
addDataSlots(max_value_container);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StorageGaugeWidget(MatteryMenu menu, Supplier<BigDecimal> value_supplier, Supplier<BigDecimal> max_value_supplier) {
|
||||||
|
this(menu, 0, 0, value_supplier, max_value_supplier);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateServer() {
|
public void updateServer() {
|
||||||
if (value_supplier == null || max_value_supplier == null)
|
if (value_supplier == null || max_value_supplier == null)
|
||||||
|
@ -11,12 +11,15 @@ import ru.dbotthepony.mc.otm.android.AndroidResearch;
|
|||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
||||||
import ru.dbotthepony.mc.otm.capability.AndroidCapabilityPlayer;
|
import ru.dbotthepony.mc.otm.capability.AndroidCapabilityPlayer;
|
||||||
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
|
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 ru.dbotthepony.mc.otm.screen.panels.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class AndroidStationScreen extends MatteryScreen<AndroidStationMenu> {
|
public class AndroidStationScreen extends MatteryScreen<AndroidStationMenu> implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter {
|
||||||
class AndroidResearchButton extends EditablePanel {
|
class AndroidResearchButton extends EditablePanel {
|
||||||
public static final int BUTTON_SIZE = 18;
|
public static final int BUTTON_SIZE = 18;
|
||||||
private final AndroidResearch node;
|
private final AndroidResearch node;
|
||||||
@ -95,6 +98,16 @@ public class AndroidStationScreen extends MatteryScreen<AndroidStationMenu> {
|
|||||||
super(p_97741_, p_97742_, p_97743_);
|
super(p_97741_, p_97742_, p_97743_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<GaugeWidget> getGauges() {
|
||||||
|
return List.of(menu.battery_widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BatterySlot> getBatterySlots() {
|
||||||
|
return List.of(menu.battery_slot);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected FramePanel makeMainFrame() {
|
protected FramePanel makeMainFrame() {
|
||||||
|
@ -8,30 +8,29 @@ import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
|||||||
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
|
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
|
||||||
import ru.dbotthepony.mc.otm.menu.BatteryBankMenu;
|
import ru.dbotthepony.mc.otm.menu.BatteryBankMenu;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
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.Dock;
|
||||||
import ru.dbotthepony.mc.otm.screen.panels.FlexGridPanel;
|
import ru.dbotthepony.mc.otm.screen.panels.FlexGridPanel;
|
||||||
import ru.dbotthepony.mc.otm.screen.panels.FramePanel;
|
import ru.dbotthepony.mc.otm.screen.panels.FramePanel;
|
||||||
import ru.dbotthepony.mc.otm.screen.panels.SlotPanel;
|
import ru.dbotthepony.mc.otm.screen.panels.SlotPanel;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BatteryBankScreen extends MatteryScreen<BatteryBankMenu> {
|
public class BatteryBankScreen extends MatteryScreen<BatteryBankMenu> implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenGridBased {
|
||||||
public BatteryBankScreen(BatteryBankMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
public BatteryBankScreen(BatteryBankMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
||||||
super(p_97741_, p_97742_, p_97743_);
|
super(p_97741_, p_97742_, p_97743_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
protected FramePanel makeMainFrame() {
|
public List<GaugeWidget> getGauges() {
|
||||||
var frame = super.makeMainFrame();
|
return List.of(menu.battery_widget);
|
||||||
|
}
|
||||||
var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0);
|
|
||||||
grid.setDock(Dock.FILL);
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createGridPanels(FlexGridPanel grid) {
|
||||||
for (var slot : menu.battery_slots) {
|
for (var slot : menu.battery_slots) {
|
||||||
new SlotPanel(this, grid, 0, 0, slot);
|
new SlotPanel(this, grid, 0, 0, slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
return frame;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,27 +3,27 @@ package ru.dbotthepony.mc.otm.screen;
|
|||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatterCapacitorBankMenu;
|
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 ru.dbotthepony.mc.otm.screen.panels.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MatterCapacitorBankScreen extends MatteryScreen<MatterCapacitorBankMenu> {
|
public class MatterCapacitorBankScreen extends MatteryScreen<MatterCapacitorBankMenu> implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenGridBased {
|
||||||
public MatterCapacitorBankScreen(MatterCapacitorBankMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
public MatterCapacitorBankScreen(MatterCapacitorBankMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
||||||
super(p_97741_, p_97742_, p_97743_);
|
super(p_97741_, p_97742_, p_97743_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
protected FramePanel makeMainFrame() {
|
public List<GaugeWidget> getGauges() {
|
||||||
var frame = super.makeMainFrame();
|
return List.of(menu.matter_widget);
|
||||||
|
}
|
||||||
var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0);
|
|
||||||
grid.setDock(Dock.FILL);
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createGridPanels(FlexGridPanel grid) {
|
||||||
for (var slot : menu.container_slots) {
|
for (var slot : menu.container_slots) {
|
||||||
new SlotPanel(this, grid, 0, 0, slot);
|
new SlotPanel(this, grid, 0, 0, slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
return frame;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,28 +4,32 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatterDecomposerMenu;
|
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 ru.dbotthepony.mc.otm.screen.panels.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MatterDecomposerScreen extends MatteryScreen<MatterDecomposerMenu> {
|
public class MatterDecomposerScreen extends MatteryScreen<MatterDecomposerMenu> implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter, MatteryScreen.IMatteryScreenGridBased {
|
||||||
public MatterDecomposerScreen(MatterDecomposerMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
public MatterDecomposerScreen(MatterDecomposerMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
||||||
super(p_97741_, p_97742_, p_97743_);
|
super(p_97741_, p_97742_, p_97743_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
protected FramePanel makeMainFrame() {
|
public List<GaugeWidget> getGauges() {
|
||||||
var frame = super.makeMainFrame();
|
return List.of(menu.battery_widget, menu.matter_widget);
|
||||||
|
}
|
||||||
|
|
||||||
var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0);
|
@Override
|
||||||
grid.setDock(Dock.FILL);
|
public List<BatterySlot> getBatterySlots() {
|
||||||
grid.setDockPadding(0, 0, 40, 12);
|
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 SlotPanel(this, grid, 0, 0, menu.input).setDockMargin(2, 0, 2, 0);
|
||||||
new MatteryWidgetPanel(this, grid, menu.progress).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);
|
new SlotPanel(this, grid, 0, 0, menu.output).setDockMargin(2, 0, 2, 0);
|
||||||
|
|
||||||
return frame;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,30 +3,34 @@ package ru.dbotthepony.mc.otm.screen;
|
|||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatterReplicatorMenu;
|
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 ru.dbotthepony.mc.otm.screen.panels.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MatterReplicatorScreen extends MatteryScreen<MatterReplicatorMenu> {
|
public class MatterReplicatorScreen extends MatteryScreen<MatterReplicatorMenu> implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter, MatteryScreen.IMatteryScreenGridBased {
|
||||||
public MatterReplicatorScreen(MatterReplicatorMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
public MatterReplicatorScreen(MatterReplicatorMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
||||||
super(p_97741_, p_97742_, p_97743_);
|
super(p_97741_, p_97742_, p_97743_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
protected FramePanel makeMainFrame() {
|
public List<GaugeWidget> getGauges() {
|
||||||
var frame = super.makeMainFrame();
|
return List.of(menu.battery_widget, menu.matter_widget);
|
||||||
|
}
|
||||||
|
|
||||||
var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0);
|
@Override
|
||||||
grid.setDock(Dock.FILL);
|
public List<BatterySlot> getBatterySlots() {
|
||||||
grid.setDockPadding(0, 0, 40, 12);
|
return List.of(menu.battery_slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createGridPanels(FlexGridPanel grid) {
|
||||||
new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0);
|
new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0);
|
||||||
|
|
||||||
for (var slot : menu.output_slots) {
|
for (var slot : menu.output_slots) {
|
||||||
new SlotPanel(this, grid, 0, 0, slot);
|
new SlotPanel(this, grid, 0, 0, slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
return frame;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,27 +3,31 @@ package ru.dbotthepony.mc.otm.screen;
|
|||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatterScannerMenu;
|
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 ru.dbotthepony.mc.otm.screen.panels.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MatterScannerScreen extends MatteryScreen<MatterScannerMenu> {
|
public class MatterScannerScreen extends MatteryScreen<MatterScannerMenu> implements MatteryScreen.IMatteryScreenGaugeGetter, MatteryScreen.IMatteryScreenBatteryGetter, MatteryScreen.IMatteryScreenGridBased {
|
||||||
public MatterScannerScreen(MatterScannerMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
public MatterScannerScreen(MatterScannerMenu p_97741_, Inventory p_97742_, Component p_97743_) {
|
||||||
super(p_97741_, p_97742_, p_97743_);
|
super(p_97741_, p_97742_, p_97743_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
@Override
|
||||||
protected FramePanel makeMainFrame() {
|
public List<GaugeWidget> getGauges() {
|
||||||
var frame = super.makeMainFrame();
|
return List.of(menu.battery_widget);
|
||||||
|
}
|
||||||
|
|
||||||
var grid = new FlexGridPanel(this, frame, 0, 0, 0, 0);
|
@Override
|
||||||
grid.setDock(Dock.FILL);
|
public List<BatterySlot> getBatterySlots() {
|
||||||
grid.setDockPadding(0, 0, 40, 12);
|
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 SlotPanel(this, grid, 0, 0, menu.input).setDockMargin(2, 0, 2, 0);
|
||||||
new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0);
|
new MatteryWidgetPanel(this, grid, menu.progress).setDockMargin(2, 0, 2, 0);
|
||||||
|
|
||||||
return frame;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,15 @@ import net.minecraft.world.item.ItemStack;
|
|||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
||||||
import ru.dbotthepony.mc.otm.menu.PoweredMatteryMenu;
|
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.slot.MatterySlot;
|
||||||
|
import ru.dbotthepony.mc.otm.menu.widget.GaugeWidget;
|
||||||
import ru.dbotthepony.mc.otm.screen.panels.*;
|
import ru.dbotthepony.mc.otm.screen.panels.*;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,6 +46,20 @@ import java.util.Set;
|
|||||||
* @param <T> type of menu, which extends MatteryMenu
|
* @param <T> type of menu, which extends MatteryMenu
|
||||||
*/
|
*/
|
||||||
public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractContainerScreen<T> {
|
public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractContainerScreen<T> {
|
||||||
|
public interface IMatteryScreenLeftPanel {}
|
||||||
|
|
||||||
|
public interface IMatteryScreenGaugeGetter extends IMatteryScreenLeftPanel {
|
||||||
|
List<GaugeWidget> getGauges();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IMatteryScreenBatteryGetter extends IMatteryScreenLeftPanel {
|
||||||
|
List<BatterySlot> getBatterySlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IMatteryScreenGridBased {
|
||||||
|
void createGridPanels(FlexGridPanel grid);
|
||||||
|
}
|
||||||
|
|
||||||
public static final float SNAPBACK_SPEED = 100.0F;
|
public static final float SNAPBACK_SPEED = 100.0F;
|
||||||
public static final int QUICKDROP_DELAY = 500;
|
public static final int QUICKDROP_DELAY = 500;
|
||||||
public static final int DOUBLECLICK_SPEED = 250;
|
public static final int DOUBLECLICK_SPEED = 250;
|
||||||
@ -128,14 +145,73 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
|||||||
panels.remove(panel);
|
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
|
@Nullable
|
||||||
protected FramePanel makeMainFrame() {
|
protected FramePanel makeMainFrame() {
|
||||||
var frame = new FramePanel(this, null, 0, 0, 18 * 9 + 16, 100, getTitle());
|
var frame = new FramePanel(this, null, 0, 0, 18 * 9 + 16, 100, getTitle());
|
||||||
|
|
||||||
if (menu instanceof PoweredMatteryMenu) {
|
if (this instanceof IMatteryScreenLeftPanel) {
|
||||||
// reserve 30 pixels on left
|
var reserve = new EditablePanel(this, frame, 0, 0, 0, 0);
|
||||||
var reserve = new EditablePanel(this, frame, 0, 0, 30, 0);
|
|
||||||
reserve.setDock(Dock.LEFT);
|
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;
|
return frame;
|
||||||
|
Loading…
Reference in New Issue
Block a user