Skip to content

Commit

Permalink
resize upgrade panel depending on available space
Browse files Browse the repository at this point in the history
  • Loading branch information
Mari023 committed Jul 4, 2024
1 parent 9fdbb3e commit 1fc9921
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 17 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
- fix upgrade panel tooltip being larger than the panel
- move singularity into the upgrade panel
- move singularity into the upgrade panel
- resize upgrade panel to make it use the available space
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
public class ScrollingUpgradesPanel implements ICompositeWidget {
private static final int SLOT_SIZE = 18;
private static final int PADDING = 5;
private static final int MAX_ROWS = 8;
private static final int SCROLLBAR_WIDTH = 5;

private final List<Slot> slots;
Expand All @@ -40,7 +39,7 @@ public class ScrollingUpgradesPanel implements ICompositeWidget {
private int x;
private int y;

private int maxRows = MAX_ROWS;
private int maxRows = 2;
private final Scrollbar scrollbar;

private final List<Component> tooltips;
Expand Down Expand Up @@ -70,6 +69,11 @@ private boolean isDisabledSlotEmpty(AppEngSlot slot) {
return stack.isEmpty();
}

public void setMaxRows(int rows) {
maxRows = rows;
setScrollbarRange();
}

@Override
public void setPosition(Point position) {
x = position.getX();
Expand All @@ -80,11 +84,7 @@ public void setPosition(Point position) {
* Changes where the panel is positioned. Coordinates are relative to the current screen's origin.
*/
@Override
public void setSize(int width, int height) {
maxRows = (height - PADDING * 2) / SLOT_SIZE;
setScrollbarRange();
scrollbar.setVisible(scrolling());
}
public void setSize(int width, int height) {}

/**
* The overall bounding box in screen coordinates.
Expand All @@ -98,7 +98,7 @@ public Rect2i getBounds() {

@Override
public void populateScreen(Consumer<AbstractWidget> addWidget, Rect2i bounds, AEBaseScreen<?> screen) {
this.screenOrigin = Point.fromTopLeft(bounds);
screenOrigin = Point.fromTopLeft(bounds);
}

@Override
Expand Down Expand Up @@ -182,6 +182,7 @@ private int getUpgradeSlotCount() {
private void setScrollbarRange() {
// The scrollbar ranges from 0 to the number of rows not visible
scrollbar.setRange(0, getUpgradeSlotCount() - getVisibleSlotCount(), 1);
scrollbar.setVisible(scrolling());
}

private int getVisibleSlotCount() {
Expand Down
16 changes: 15 additions & 1 deletion src/main/java/de/mari_023/ae2wtlib/wat/WATScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,34 @@
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.ToolboxPanel;

import de.mari_023.ae2wtlib.terminal.ScrollingUpgradesPanel;
import de.mari_023.ae2wtlib.terminal.WTMenuHost;
import de.mari_023.ae2wtlib.wut.IUniversalTerminalCapable;

public class WATScreen extends PatternAccessTermScreen<WATMenu> implements IUniversalTerminalCapable {
private final ScrollingUpgradesPanel upgradesPanel;

public WATScreen(WATMenu container, Inventory playerInventory, Component title, ScreenStyle style) {
super(container, playerInventory, title, style);
if (getMenu().isWUT())
addToLeftToolbar(cycleTerminalButton());

addUpgradePanel(widgets, getMenu());
upgradesPanel = addUpgradePanel(widgets, getMenu());
if (getMenu().getToolbox().isPresent())
widgets.add("toolbox", new ToolboxPanel(style, getMenu().getToolbox().getName()));
}

@Override
public void init() {
super.init();
upgradesPanel.setMaxRows(Math.max(2, getVisibleRows()));
}

@Override
public int getVisibleRows() {
return 2;
}

@Override
public WTMenuHost getHost() {
return (WTMenuHost) getMenu().getHost();
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/de/mari_023/ae2wtlib/wct/WCTScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
public class WCTScreen extends CraftingTermScreen<WCTMenu> implements IUniversalTerminalCapable {
private final IconButton magnetCardToggleButton;
private final IconButton magnetCardMenuButton;
private final ScrollingUpgradesPanel upgradesPanel;

public WCTScreen(WCTMenu container, Inventory playerInventory, Component title, ScreenStyle style) {
super(container, playerInventory, title, style);
Expand All @@ -37,7 +38,13 @@ public WCTScreen(WCTMenu container, Inventory playerInventory, Component title,
trashButton.setMessage(TextConstants.TRASH);

widgets.add("player", new PlayerEntityWidget(Objects.requireNonNull(Minecraft.getInstance().player)));
addUpgradePanel(widgets, getMenu());
upgradesPanel = addUpgradePanel(widgets, getMenu());
}

@Override
public void init() {
super.init();
upgradesPanel.setMaxRows(Math.max(2, getVisibleRows()));
}

private void setMagnetMode() {
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/de/mari_023/ae2wtlib/wet/WETScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,24 @@
import appeng.client.gui.me.items.PatternEncodingTermScreen;
import appeng.client.gui.style.ScreenStyle;

import de.mari_023.ae2wtlib.terminal.ScrollingUpgradesPanel;
import de.mari_023.ae2wtlib.terminal.WTMenuHost;
import de.mari_023.ae2wtlib.wut.IUniversalTerminalCapable;

public class WETScreen extends PatternEncodingTermScreen<WETMenu> implements IUniversalTerminalCapable {
private final ScrollingUpgradesPanel upgradesPanel;

public WETScreen(WETMenu container, Inventory playerInventory, Component title, ScreenStyle style) {
super(container, playerInventory, title, style);
if (getMenu().isWUT())
addToLeftToolbar(cycleTerminalButton());
addUpgradePanel(widgets, getMenu());
upgradesPanel = addUpgradePanel(widgets, getMenu());
}

@Override
public void init() {
super.init();
upgradesPanel.setMaxRows(Math.max(2, getVisibleRows()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.UnknownNullability;

import net.minecraft.client.gui.navigation.ScreenRectangle;
import net.neoforged.neoforge.network.PacketDistributor;

import appeng.client.Hotkeys;
import appeng.client.gui.WidgetContainer;
import appeng.client.gui.style.ScreenStyle;
import appeng.core.AEConfig;
import appeng.core.network.serverbound.HotkeyPacket;
import appeng.menu.AEBaseMenu;
import appeng.menu.SlotSemantics;
Expand Down Expand Up @@ -65,10 +70,22 @@ default IconButton cycleTerminalButton() {
* @param widgets the WidgetContainer where the widget will be added
* @param menu the menu corresponding to this screen
*/
default void addUpgradePanel(WidgetContainer widgets, AEBaseMenu menu) {
default ScrollingUpgradesPanel addUpgradePanel(WidgetContainer widgets, AEBaseMenu menu) {
var upgrades = new ArrayList<>(menu.getSlots(AE2wtlibSlotSemantics.SINGULARITY));
upgrades.addAll(menu.getSlots(SlotSemantics.UPGRADE));
widgets.add("scrollingUpgrades",
new ScrollingUpgradesPanel(upgrades, getHost(), widgets, () -> getHost().getUpgrades()));
var panel = new ScrollingUpgradesPanel(upgrades, getHost(), widgets, () -> getHost().getUpgrades());
widgets.add("scrollingUpgrades", panel);
return panel;
}

default int getVisibleRows() {
int availableHeight = getRectangle().height() - 2 * AEConfig.instance().getTerminalMargin();
var style = Objects.requireNonNull(getStyle().getTerminalStyle());
return AEConfig.instance().getTerminalStyle().getRows(style.getPossibleRows(availableHeight));
}

@UnknownNullability
ScreenStyle getStyle();

ScreenRectangle getRectangle();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
"widgets": {
"scrollingUpgrades": {
"right": 2,
"top": 0,
"height": 46
"top": 0
},
"upgradeScrollbar": {
"right": -17,
Expand Down

0 comments on commit 1fc9921

Please sign in to comment.