Skip to content

Commit 60bbd20

Browse files
[MUI2] Turbo Charger (#4331)
1 parent c22fe63 commit 60bbd20

File tree

1 file changed

+59
-40
lines changed

1 file changed

+59
-40
lines changed

src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,36 @@
33
import com.gregtechceu.gtceu.api.GTValues;
44
import com.gregtechceu.gtceu.api.capability.*;
55
import com.gregtechceu.gtceu.api.capability.compat.FeCompat;
6-
import com.gregtechceu.gtceu.api.gui.GuiTextures;
7-
import com.gregtechceu.gtceu.api.gui.widget.SlotWidget;
86
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
97
import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine;
10-
import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine;
118
import com.gregtechceu.gtceu.api.machine.feature.IMachineLife;
9+
import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine;
1210
import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties;
1311
import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer;
12+
import com.gregtechceu.gtceu.api.mui.base.drawable.IKey;
13+
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
14+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
15+
import com.gregtechceu.gtceu.api.mui.widgets.ProgressWidget;
16+
import com.gregtechceu.gtceu.api.mui.widgets.layout.Column;
17+
import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow;
1418
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
19+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
20+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
21+
import com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil;
22+
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
23+
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
1524
import com.gregtechceu.gtceu.config.ConfigHolder;
25+
import com.gregtechceu.gtceu.utils.GTStringUtils;
1626
import com.gregtechceu.gtceu.utils.GTUtil;
1727

18-
import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup;
19-
import com.lowdragmc.lowdraglib.gui.widget.Widget;
20-
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
2128
import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced;
2229
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
2330
import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender;
2431
import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder;
25-
import com.lowdragmc.lowdraglib.utils.Position;
2632

2733
import net.minecraft.MethodsReturnNonnullByDefault;
2834
import net.minecraft.core.Direction;
35+
import net.minecraft.network.chat.Component;
2936
import net.minecraft.util.StringRepresentable;
3037
import net.minecraft.world.level.block.state.properties.EnumProperty;
3138
import net.minecraftforge.energy.IEnergyStorage;
@@ -41,7 +48,7 @@
4148

4249
@ParametersAreNonnullByDefault
4350
@MethodsReturnNonnullByDefault
44-
public class ChargerMachine extends TieredEnergyMachine implements IControllable, IFancyUIMachine, IMachineLife {
51+
public class ChargerMachine extends TieredEnergyMachine implements IControllable, IMuiMachine, IMachineLife {
4552

4653
public static final long AMPS_PER_ITEM = 4L;
4754

@@ -132,39 +139,51 @@ public void onMachineRemoved() {
132139
//////////////////////////////////////
133140

134141
@Override
135-
public Widget createUIWidget() {
136-
int rowSize = (int) Math.sqrt(inventorySize);
137-
int colSize = rowSize;
138-
if (inventorySize == 8) {
139-
rowSize = 4;
140-
colSize = 2;
141-
}
142-
var template = new WidgetGroup(0, 0, 18 * rowSize + 8, 18 * colSize + 8);
143-
template.setBackground(GuiTextures.BACKGROUND_INVERSE);
144-
int index = 0;
145-
for (int y = 0; y < colSize; y++) {
146-
for (int x = 0; x < rowSize; x++) {
147-
template.addWidget(new SlotWidget(chargerInventory, index++, 4 + x * 18, 4 + y * 18, true, true)
148-
.setBackgroundTexture(new GuiTextureGroup(GuiTextures.SLOT, GuiTextures.CHARGER_OVERLAY)));
149-
}
150-
}
142+
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
143+
String[] matrix = GTMuiMachineUtil.createSquareMatrix(inventorySize, 'B');
144+
return new ModularPanel(getDefinition().getName())
145+
.child(GTMuiWidgets.createTitleBar(getDefinition(), 172))
146+
.child(Flow.row()
147+
.height(90)
148+
.margin(6)
149+
.marginLeft(7)
150+
.marginTop(2)
151+
.height(80)
152+
.child(new ProgressWidget()
153+
.texture(GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_STEEL,
154+
GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, 60)
155+
.direction(ProgressWidget.Direction.UP)
156+
.progress(this::getEnergyPercentage)
157+
.marginRight(50)
158+
.size(18, 60)
159+
.verticalCenter()
160+
.addTooltipLine(IKey.dynamic(() -> Component.literal(
161+
"%s/%s EU".formatted(
162+
GTStringUtils.formatInt(energyContainer.getEnergyStored()),
163+
GTStringUtils.formatInt(energyContainer.getEnergyCapacity()))))))
164+
.child(GTMuiMachineUtil.createSlotGroupFromInventory(
165+
chargerInventory, "charger_inv",
166+
inventorySize, 'B',
167+
slot -> slot.background(GTGuiTextures.SLOT, GTGuiTextures.CHARGER_OVERLAY),
168+
syncManager,
169+
matrix)
170+
.center()))
171+
.child(new Column()
172+
.coverChildren()
173+
.leftRel(1.0f)
174+
.reverseLayout(true)
175+
.bottom(16)
176+
.padding(0, 8, 4, 4)
177+
.childPadding(2)
178+
.excludeAreaInXei()
179+
.background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f))
180+
.child(GTMuiWidgets.createPowerButton(this::isWorkingEnabled, this::setWorkingEnabled,
181+
syncManager)))
182+
.bindPlayerInventory();
183+
}
151184

152-
var editableUI = createEnergyBar();
153-
var energyBar = editableUI.createDefault();
154-
155-
var group = new WidgetGroup(0, 0,
156-
Math.max(energyBar.getSize().width + template.getSize().width + 4 + 8, 172),
157-
Math.max(template.getSize().height + 8, energyBar.getSize().height + 8));
158-
var size = group.getSize();
159-
energyBar.setSelfPosition(new Position(3, (size.height - energyBar.getSize().height) / 2));
160-
template.setSelfPosition(new Position(
161-
(size.width - energyBar.getSize().width - 4 - template.getSize().width) / 2 + 2 +
162-
energyBar.getSize().width + 2,
163-
(size.height - template.getSize().height) / 2));
164-
group.addWidget(energyBar);
165-
group.addWidget(template);
166-
editableUI.setupUI(group, this);
167-
return group;
185+
private double getEnergyPercentage() {
186+
return (double) this.energyContainer.getEnergyStored() / this.energyContainer.getEnergyCapacity();
168187
}
169188

170189
//////////////////////////////////////

0 commit comments

Comments
 (0)