Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public Widget<?> getMainTextPanel(PanelSyncManager syncManager, int width, int h
listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(workableElectricMachine, syncManager));
listWidget.child(GTMultiblockTextUtil.addEnergyUsageLine(workableElectricMachine, syncManager));
}

listWidget.child(GTMultiblockTextUtil.addWorkingStatusLine(rlMachine, syncManager));
listWidget.child(GTMultiblockTextUtil.addParallelLine(rlMachine, syncManager));
listWidget.child(GTMultiblockTextUtil.addBatchModeLine(rlMachine, syncManager));
listWidget.child(GTMultiblockTextUtil.addSubtickParallelsLine(rlMachine, syncManager));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import net.minecraftforge.fluids.FluidStack;

import java.util.Optional;
import java.util.function.Supplier;

public class GTMultiblockTextUtil {

Expand Down Expand Up @@ -107,6 +108,24 @@ public static TextWidget<?> addProgressLine(WorkableMultiblockMachine rlMachine,
.setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue());
}

public static TextWidget<?> addProgressLinePercentOnly(WorkableMultiblockMachine rlMachine,
PanelSyncManager syncManager) {
BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class,
() -> new BooleanSyncValue(rlMachine::isFormed));
BooleanSyncValue isActive = syncManager.getOrCreateSyncHandler("isActive", BooleanSyncValue.class,
() -> new BooleanSyncValue(() -> rlMachine.getRecipeLogic().isActive()));
DoubleSyncValue progressPercent = syncManager.getOrCreateSyncHandler("progressPercent", DoubleSyncValue.class,
() -> new DoubleSyncValue(() -> rlMachine.getRecipeLogic().getProgressPercent()));

return IKey.dynamic(() -> {
int currentProgress = (int) (progressPercent.getDoubleValue() * 100);
return Component.translatable("gtceu.multiblock.progress_percent", currentProgress);
})
.color(Color.WHITE.main)
.asWidget()
.setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue());
}

public static TextWidget<?> addEnergyTierLine(WorkableElectricMultiblockMachine rlMachine,
PanelSyncManager syncManager) {
BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class,
Expand Down Expand Up @@ -222,6 +241,41 @@ public static TextWidget<?> addSteamUsageLine(SteamEnergyRecipeHandler steamRH,
.setEnabledIf((w) -> hasSteamHandler.getBoolValue());
}

public static TextWidget<?> addWorkingStatusLine(WorkableMultiblockMachine rlMachine,
PanelSyncManager syncManager) {
return addWorkingStatusLine(rlMachine, syncManager,
() -> Component.translatable("gtceu.multiblock.work_paused").withStyle(ChatFormatting.GOLD),
() -> Component.translatable("gtceu.multiblock.running").withStyle(ChatFormatting.GREEN),
() -> Component.translatable("gtceu.multiblock.idling").withStyle(ChatFormatting.GRAY));
}

public static TextWidget<?> addWorkingStatusLine(WorkableMultiblockMachine rlMachine, PanelSyncManager syncManager,
Supplier<Component> workPaused,
Supplier<Component> runningPerfectly,
Supplier<Component> idling) {
BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class,
() -> new BooleanSyncValue(rlMachine::isFormed));
BooleanSyncValue isActive = syncManager.getOrCreateSyncHandler("isActive", BooleanSyncValue.class,
() -> new BooleanSyncValue(() -> rlMachine.getRecipeLogic().isActive()));
BooleanSyncValue isWorkingEnabled = syncManager.getOrCreateSyncHandler("isWorkingEnabled",
BooleanSyncValue.class,
() -> new BooleanSyncValue(() -> rlMachine.getRecipeLogic().isWorkingEnabled()));

return IKey
.dynamic(() -> {
if (!isFormed.getBoolValue()) return Component.empty();
if (!isWorkingEnabled.getBoolValue()) {
return workPaused.get();
}
if (isActive.getBoolValue()) {
return runningPerfectly.get();
}
return idling.get();
})
.asWidget()
.setEnabledIf((w) -> isFormed.getBoolValue());
}

public static DynamicSyncedWidget<?> addOutputLines(WorkableMultiblockMachine rlmachine,
PanelSyncManager syncManager) {
GenericSyncValue<GTRecipe> recipeSyncValue = syncManager.getOrCreateSyncHandler("GTRecipe",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,31 @@
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart;
import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine;
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
import com.gregtechceu.gtceu.api.mui.drawable.Icon;
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
import com.gregtechceu.gtceu.api.mui.utils.Alignment;
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
import com.gregtechceu.gtceu.api.mui.widget.ParentWidget;
import com.gregtechceu.gtceu.api.mui.widget.Widget;
import com.gregtechceu.gtceu.api.mui.widgets.ListWidget;
import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Column;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Row;
import com.gregtechceu.gtceu.api.recipe.ActionResult;
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
import com.gregtechceu.gtceu.api.recipe.RecipeHelper;
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
import com.gregtechceu.gtceu.common.data.mui.GTMultiblockPanelUtil;
import com.gregtechceu.gtceu.common.data.mui.GTMultiblockTextUtil;
import com.gregtechceu.gtceu.common.machine.multiblock.part.ObjectHolderMachine;
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
import com.gregtechceu.gtceu.common.mui.GTGuis;

import net.minecraft.ChatFormatting;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;

import lombok.Getter;
Expand Down Expand Up @@ -96,18 +115,58 @@ public boolean regressWhenWaiting() {
return false;
}

// @Override
// public void addDisplayText(List<Component> textList) {
// MultiblockDisplayText.builder(textList, isFormed())
// .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive())
// .setWorkingStatusKeys("gtceu.multiblock.idling", "gtceu.multiblock.work_paused",
// "gtceu.multiblock.research_station.researching")
// .addEnergyUsageLine(energyContainer)
// .addEnergyTierLine(tier)
// .addWorkingStatusLine()
// // .addComputationUsageExactLine(computationProvider.getMaxCWUt()) // TODO: (Onion)
// .addProgressLineOnlyPercent(recipeLogic.getProgressPercent());
// }
@Override
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
var panel = GTGuis.createPanel(this, 176, 164);

var panelUtil = new GTMultiblockPanelUtil(this);

panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176))
.child(new ParentWidget<>()
.widthRel(0.95f)
.heightRel(.45f)
.margin(4, 0)
.left(3).top(5)
.child(new Row()
.child(getMainTextPanel(syncManager, 170, 70))))
.child(new Column()
.coverChildren()
.leftRel(1.0f)
.reverseLayout(true)
.bottom(16)
.padding(0, 8, 4, 4)
.childPadding(2)
.background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f))
.child(GTMuiWidgets.createPowerButton(this, syncManager))
.child(GTMuiWidgets.createVoidingButton(this, syncManager)))
.child(SlotGroupWidget.playerInventory(false).left(7).bottom(7));

return panel;
}

public Widget<?> getMainTextPanel(PanelSyncManager syncManager, int width, int height) {
var parentWidget = new ParentWidget<>();
var listWidget = new ListWidget<>()
.width(width - 6)
.height(height - 6)
.childSeparator(Icon.EMPTY_2PX)
.crossAxisAlignment(Alignment.CrossAxis.START)
.alignX(Alignment.CenterLeft);
parentWidget.size(width, height)
.background(GTGuiTextures.MUI_DISPLAY);

listWidget.child(GTMultiblockTextUtil.addWorkingStatusLine(this, syncManager,
() -> Component.translatable("gtceu.multiblock.work_paused").withStyle(ChatFormatting.GOLD),
() -> Component.translatable("gtceu.multiblock.research_station.researching")
.withStyle(ChatFormatting.GREEN),
() -> Component.translatable("gtceu.multiblock.idling").withStyle(ChatFormatting.GRAY)));
listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(this, syncManager));
listWidget.child(GTMultiblockTextUtil.addEnergyUsageLine(this, syncManager));
listWidget.child(GTMultiblockTextUtil.addOutputLines(this, syncManager));
listWidget.child(GTMultiblockTextUtil.addProgressLinePercentOnly(this, syncManager));
parentWidget.child(listWidget.left(3).top(3));
return parentWidget;
}

public static class ResearchStationRecipeLogic extends RecipeLogic {

Expand Down