Skip to content

Commit 2b5ea3e

Browse files
committed
port digital interface
1 parent e5a779c commit 2b5ea3e

File tree

2 files changed

+140
-56
lines changed

2 files changed

+140
-56
lines changed

src/main/java/gregtech/api/mui/GTGuiTextures.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,22 @@ private static String id(String path) {
392392
public static final UITexture RESEARCH_STATION_OVERLAY = fullImage(
393393
"textures/gui/overlay/research_station_overlay.png", true);
394394

395+
// Texture Areas
396+
public static final UITexture[] BUTTON_FLUID = slice("textures/blocks/cover/cover_interface_fluid_button.png", 18,
397+
36, false);
398+
public static final UITexture[] BUTTON_ITEM = slice("textures/blocks/cover/cover_interface_item_button.png", 18, 36,
399+
false);
400+
public static final UITexture[] BUTTON_ENERGY = slice("textures/blocks/cover/cover_interface_energy_button.png", 18,
401+
36, false);
402+
public static final UITexture[] BUTTON_MACHINE = slice("textures/blocks/cover/cover_interface_machine_button.png",
403+
18, 36, false);
404+
public static final UITexture[] BUTTON_INTERFACE = slice(
405+
"textures/blocks/cover/cover_interface_computer_button.png", 18, 36, false);
406+
public static final UITexture COVER_INTERFACE_MACHINE_ON_PROXY = fullImage(
407+
"textures/blocks/cover/cover_interface_machine_on_proxy.png");
408+
public static final UITexture COVER_INTERFACE_MACHINE_OFF_PROXY = fullImage(
409+
"textures/blocks/cover/cover_interface_machine_off_proxy.png");
410+
395411
// BUTTONS
396412

397413
public static final UITexture BUTTON = new UITexture.Builder()

src/main/java/gregtech/common/covers/CoverDigitalInterface.java

Lines changed: 124 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
import gregtech.api.cover.CoverWithUI;
88
import gregtech.api.cover.CoverableView;
99
import gregtech.api.gui.GuiTextures;
10-
import gregtech.api.gui.ModularUI;
11-
import gregtech.api.gui.widgets.*;
1210
import gregtech.api.metatileentity.IFastRenderMetaTileEntity;
1311
import gregtech.api.metatileentity.MetaTileEntity;
1412
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
1513
import gregtech.api.metatileentity.multiblock.MultiblockAbility;
1614
import gregtech.api.metatileentity.multiblock.MultiblockControllerBase;
15+
import gregtech.api.mui.GTGuiTextures;
16+
import gregtech.api.mui.GTGuis;
1717
import gregtech.api.util.GTLog;
18-
import gregtech.api.util.Position;
1918
import gregtech.api.util.TextFormattingUtil;
2019
import gregtech.client.renderer.texture.Textures;
2120
import gregtech.client.utils.RenderUtil;
@@ -25,6 +24,7 @@
2524
import net.minecraft.client.Minecraft;
2625
import net.minecraft.client.renderer.GlStateManager;
2726
import net.minecraft.client.renderer.OpenGlHelper;
27+
import net.minecraft.client.renderer.RenderHelper;
2828
import net.minecraft.entity.item.EntityItem;
2929
import net.minecraft.entity.player.EntityPlayer;
3030
import net.minecraft.entity.player.EntityPlayerMP;
@@ -60,6 +60,19 @@
6060
import codechicken.lib.vec.Cuboid6;
6161
import codechicken.lib.vec.Matrix4;
6262
import codechicken.lib.vec.Rotation;
63+
import com.cleanroommc.modularui.api.drawable.IDrawable;
64+
import com.cleanroommc.modularui.api.drawable.IKey;
65+
import com.cleanroommc.modularui.api.widget.Interactable;
66+
import com.cleanroommc.modularui.drawable.DynamicDrawable;
67+
import com.cleanroommc.modularui.factory.SidedPosGuiData;
68+
import com.cleanroommc.modularui.screen.ModularPanel;
69+
import com.cleanroommc.modularui.utils.Alignment;
70+
import com.cleanroommc.modularui.utils.Color;
71+
import com.cleanroommc.modularui.value.sync.EnumSyncValue;
72+
import com.cleanroommc.modularui.value.sync.IntSyncValue;
73+
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
74+
import com.cleanroommc.modularui.widgets.ButtonWidget;
75+
import com.cleanroommc.modularui.widgets.layout.Flow;
6376
import org.apache.commons.lang3.ArrayUtils;
6477
import org.jetbrains.annotations.NotNull;
6578
import org.jetbrains.annotations.Nullable;
@@ -86,11 +99,27 @@ public enum MODE {
8699
MACHINE,
87100
PROXY;
88101

89-
public static MODE[] VALUES;
102+
public static final MODE[] VALUES;
90103

91104
static {
92105
VALUES = MODE.values();
93106
}
107+
108+
public IKey getLangKey(boolean selected) {
109+
return IKey.lang(
110+
"metaitem.cover.digital.mode." + name().toLowerCase() + "." + (selected ? "enabled" : "disabled"));
111+
}
112+
113+
public IDrawable getOverlay(boolean selected) {
114+
final int i = selected ? 1 : 0;
115+
return switch (this) {
116+
case FLUID -> GTGuiTextures.BUTTON_FLUID[i];
117+
case ITEM -> GTGuiTextures.BUTTON_ITEM[i];
118+
case ENERGY -> GTGuiTextures.BUTTON_ENERGY[i];
119+
case MACHINE -> GTGuiTextures.BUTTON_MACHINE[i];
120+
case PROXY -> GTGuiTextures.BUTTON_INTERFACE[i];
121+
};
122+
}
94123
}
95124

96125
// run-time data
@@ -450,55 +479,94 @@ public boolean modeLeftClick(EntityPlayer entityPlayer, MODE mode, int slot) {
450479
return false;
451480
}
452481

453-
// todo port this to mui2 unless that's already done in some other pr
482+
@Override
483+
public boolean usesMui2() {
484+
return true;
485+
}
454486

455487
@Override
456-
public ModularUI createUI(EntityPlayer player) {
457-
WidgetGroup primaryGroup = new WidgetGroup(new Position(0, 10));
458-
primaryGroup.addWidget(new LabelWidget(10, 5, "metaitem.cover.digital.name", 0));
459-
ToggleButtonWidget[] buttons = new ToggleButtonWidget[5];
460-
buttons[0] = new ToggleButtonWidget(40, 20, 20, 20, GuiTextures.BUTTON_FLUID, () -> this.mode == MODE.FLUID,
461-
(pressed) -> {
462-
if (pressed) setMode(MODE.FLUID);
463-
}).setTooltipText("metaitem.cover.digital.mode.fluid");
464-
buttons[1] = new ToggleButtonWidget(60, 20, 20, 20, GuiTextures.BUTTON_ITEM, () -> this.mode == MODE.ITEM,
465-
(pressed) -> {
466-
if (pressed) setMode(MODE.ITEM);
467-
}).setTooltipText("metaitem.cover.digital.mode.item");
468-
buttons[2] = new ToggleButtonWidget(80, 20, 20, 20, GuiTextures.BUTTON_ENERGY, () -> this.mode == MODE.ENERGY,
469-
(pressed) -> {
470-
if (pressed) setMode(MODE.ENERGY);
471-
}).setTooltipText("metaitem.cover.digital.mode.energy");
472-
buttons[3] = new ToggleButtonWidget(100, 20, 20, 20, GuiTextures.BUTTON_MACHINE,
473-
() -> this.mode == MODE.MACHINE, (pressed) -> {
474-
if (pressed) setMode(MODE.MACHINE);
475-
}).setTooltipText("metaitem.cover.digital.mode.machine");
476-
buttons[4] = new ToggleButtonWidget(140, 20, 20, 20, GuiTextures.BUTTON_INTERFACE,
477-
() -> this.mode == MODE.PROXY, (pressed) -> {
478-
if (pressed) setMode(MODE.PROXY);
479-
}).setTooltipText("metaitem.cover.digital.mode.proxy");
480-
primaryGroup.addWidget(new LabelWidget(10, 25, "metaitem.cover.digital.title.mode", 0));
481-
primaryGroup.addWidget(buttons[0]);
482-
primaryGroup.addWidget(buttons[1]);
483-
primaryGroup.addWidget(buttons[2]);
484-
primaryGroup.addWidget(buttons[3]);
485-
primaryGroup.addWidget(buttons[4]);
486-
487-
primaryGroup.addWidget(new LabelWidget(10, 50, "monitor.gui.title.slot", 0));
488-
primaryGroup.addWidget(
489-
new ClickButtonWidget(40, 45, 20, 20, "-1", (data) -> setMode(slot - (data.isShiftClick ? 10 : 1))));
490-
primaryGroup.addWidget(
491-
new ClickButtonWidget(140, 45, 20, 20, "+1", (data) -> setMode(slot + (data.isShiftClick ? 10 : 1))));
492-
primaryGroup.addWidget(new ImageWidget(60, 45, 80, 20, GuiTextures.DISPLAY));
493-
primaryGroup.addWidget(new SimpleTextWidget(100, 55, "", 16777215, () -> Integer.toString(this.slot)));
494-
495-
primaryGroup.addWidget(new LabelWidget(10, 75, "metaitem.cover.digital.title.spin", 0));
496-
primaryGroup.addWidget(new ClickButtonWidget(40, 70, 20, 20, "R", (data) -> setMode(this.spin.rotateY())));
497-
primaryGroup.addWidget(new ImageWidget(60, 70, 80, 20, GuiTextures.DISPLAY));
498-
primaryGroup.addWidget(new SimpleTextWidget(100, 80, "", 16777215, () -> this.spin.toString()));
499-
ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 202).widget(primaryGroup)
500-
.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 8, 120);
501-
return builder.build(this, player);
488+
public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) {
489+
Flow row = Flow.row()
490+
.pos(10, 20)
491+
.coverChildren()
492+
.child(IKey.lang("metaitem.cover.digital.title.mode").asWidget()
493+
.size(30, 20));
494+
495+
IntSyncValue slotValue = new IntSyncValue(() -> this.slot, this::setMode);
496+
EnumSyncValue<MODE> modeValue = new EnumSyncValue<>(MODE.class, this::getMode, this::setMode);
497+
EnumSyncValue<EnumFacing> spinValue = new EnumSyncValue<>(EnumFacing.class, () -> this.spin, this::setMode);
498+
guiSyncManager.syncValue("slot", slotValue);
499+
guiSyncManager.syncValue("mode", modeValue);
500+
guiSyncManager.syncValue("spin", spinValue);
501+
502+
for (MODE mode : MODE.VALUES) {
503+
row.child(new ButtonWidget<>()
504+
.size(20)
505+
.onMousePressed(m -> {
506+
modeValue.setValue(mode);
507+
return true;
508+
})
509+
.tooltipAutoUpdate(true)
510+
.tooltipBuilder(tooltip -> tooltip.add(mode.getLangKey(getMode() == mode)))
511+
.disableHoverBackground()
512+
.background(new DynamicDrawable(() -> mode.getOverlay(getMode() == mode))));
513+
}
514+
515+
return GTGuis.createPanel(this, 176, 202)
516+
.child(CoverWithUI.createTitleRow(getPickItem())
517+
.pos(5, 5))
518+
.child(row)
519+
.child(Flow.row()
520+
.pos(10, 45)
521+
.coverChildren()
522+
.child(IKey.lang("monitor.gui.title.slot").asWidget()
523+
.size(30, 20))
524+
.child(new ButtonWidget<>()
525+
.size(20)
526+
.overlay(IKey.str("-")
527+
.color(Color.WHITE.main))
528+
.onMousePressed(m -> {
529+
int s = slotValue.getIntValue();
530+
s -= Interactable.hasShiftDown() ? 10 : 1;
531+
slotValue.setIntValue(s);
532+
return true;
533+
}))
534+
.child(IKey.dynamic(() -> Integer.toString(this.slot)).asWidget()
535+
.size(80, 20)
536+
.paddingLeft(4)
537+
.color(0xffffff)
538+
.alignment(Alignment.CenterLeft)
539+
.background(GTGuiTextures.DISPLAY))
540+
.child(new ButtonWidget<>()
541+
.size(20)
542+
.overlay(IKey.str("+")
543+
.color(Color.WHITE.main))
544+
.onMousePressed(m -> {
545+
int s = slotValue.getIntValue();
546+
s += Interactable.hasShiftDown() ? 10 : 1;
547+
slotValue.setIntValue(s);
548+
return true;
549+
})))
550+
.child(Flow.row()
551+
.pos(10, 75)
552+
.coverChildren()
553+
.child(IKey.lang("metaitem.cover.digital.title.spin").asWidget()
554+
.size(30, 20))
555+
.child(new ButtonWidget<>()
556+
.size(20)
557+
.overlay(IKey.str("R")
558+
.color(Color.WHITE.main))
559+
.onMousePressed(m -> {
560+
spinValue.setValue(spinValue.getValue().rotateY());
561+
return true;
562+
}))
563+
.child(IKey.dynamic(() -> spinValue.getValue().toString()).asWidget()
564+
.alignment(Alignment.CenterLeft)
565+
.paddingLeft(4)
566+
.size(80, 20)
567+
.color(0xffffff)
568+
.background(GTGuiTextures.DISPLAY)))
569+
.bindPlayerInventory();
502570
}
503571

504572
private void syncAllInfo() {
@@ -916,14 +984,14 @@ public <T> T getCapability(@NotNull Capability<T> capability, T defaultValue) {
916984
@Override
917985
public void renderCover(CCRenderState ccRenderState, Matrix4 translation, IVertexOperation[] ops, Cuboid6 cuboid6,
918986
BlockRenderLayer blockRenderLayer) {
919-
codechicken.lib.vec.Rotation rotation = new codechicken.lib.vec.Rotation(0, 0, 1, 0);
987+
Rotation rotation = new Rotation(0, 0, 1, 0);
920988
if (this.getAttachedSide().getAxis().isVertical()) {
921989
if (this.spin == EnumFacing.WEST) {
922990
translation.translate(0, 0, 1);
923-
rotation = new codechicken.lib.vec.Rotation(Math.PI / 2, 0, 1, 0);
991+
rotation = new Rotation(Math.PI / 2, 0, 1, 0);
924992
} else if (this.spin == EnumFacing.EAST) {
925993
translation.translate(1, 0, 0);
926-
rotation = new codechicken.lib.vec.Rotation(-Math.PI / 2, 0, 1, 0);
994+
rotation = new Rotation(-Math.PI / 2, 0, 1, 0);
927995
} else if (this.spin == EnumFacing.SOUTH) {
928996
translation.translate(1, 0, 1);
929997
rotation = new Rotation(Math.PI, 0, 1, 0);
@@ -963,7 +1031,7 @@ public void renderMetaTileEntityFast(CCRenderState renderState, Matrix4 translat
9631031
public void renderMetaTileEntity(double x, double y, double z, float partialTicks) {
9641032
GlStateManager.pushMatrix();
9651033
/* hack the lightmap */
966-
net.minecraft.client.renderer.RenderHelper.disableStandardItemLighting();
1034+
RenderHelper.disableStandardItemLighting();
9671035
float lastBrightnessX = OpenGlHelper.lastBrightnessX;
9681036
float lastBrightnessY = OpenGlHelper.lastBrightnessY;
9691037
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F);
@@ -978,7 +1046,7 @@ public void renderMetaTileEntity(double x, double y, double z, float partialTick
9781046

9791047
/* restore the lightmap */
9801048
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lastBrightnessX, lastBrightnessY);
981-
net.minecraft.client.renderer.RenderHelper.enableStandardItemLighting();
1049+
RenderHelper.enableStandardItemLighting();
9821050
GlStateManager.popMatrix();
9831051
}
9841052

0 commit comments

Comments
 (0)