diff options
author | Abdiel Kavash <19243993+AbdielKavash@users.noreply.github.com> | 2024-03-12 19:00:02 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-13 02:00:02 +0100 |
commit | 26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45 (patch) | |
tree | ed601445c225fc184a76cf7a0fa8b6d80113c2e0 /src/main/java/gregtech/common/gui | |
parent | 056eb3667f76e260d99b9ad72ea83253be162543 (diff) | |
download | GT5-Unofficial-26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45.tar.gz GT5-Unofficial-26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45.tar.bz2 GT5-Unofficial-26c8407b9d22dbe4e3b98b4e08acfcdbfdd89f45.zip |
Numeric widget and localized number formatting. (#2532)
* Cover widgets
* Volumetric flask
* Misc textfields
* Update GT_MetaTileEntity_MultiBlockBase.java
* Update GT_MetaTileEntity_MultiBlockBase.java
* Fixes decimal digits
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/common/gui')
3 files changed, 96 insertions, 4 deletions
diff --git a/src/main/java/gregtech/common/gui/MachineGUIProvider.java b/src/main/java/gregtech/common/gui/MachineGUIProvider.java index 91d14c209a..3cc889f000 100644 --- a/src/main/java/gregtech/common/gui/MachineGUIProvider.java +++ b/src/main/java/gregtech/common/gui/MachineGUIProvider.java @@ -13,6 +13,7 @@ import javax.annotation.Nonnull; import net.minecraft.util.StatCollector; import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; import com.gtnewhorizons.modularui.api.drawable.UITexture; @@ -59,6 +60,8 @@ public class MachineGUIProvider<T extends GUIHost & ProcessingLogicHost<? extend @Nonnull protected static final Pos2d RECIPE_LOCKING_BUTTON_DEFAULT_POS = new Pos2d(0, 0); + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + public MachineGUIProvider(@Nonnull T host) { super(host); } @@ -252,10 +255,19 @@ public class MachineGUIProvider<T extends GUIHost & ProcessingLogicHost<? extend @Nonnull UIBuildContext uiBuildContext) { PowerLogic power = host.getPowerLogic(); tab.addChild( - TextWidget.dynamicString(() -> power.getStoredEnergy() + "/" + power.getCapacity() + " EU") + new TextWidget() + .setStringSupplier( + () -> numberFormat.format(power.getStoredEnergy()) + "/" + + numberFormat.format(power.getCapacity()) + + " EU") .setPos(10, 30)) .addChild( - TextWidget.dynamicString(() -> power.getVoltage() + " EU/t" + "(" + power.getMaxAmperage() + " A)") + new TextWidget() + .setStringSupplier( + () -> numberFormat.format(power.getVoltage()) + " EU/t" + + "(" + + numberFormat.format(power.getMaxAmperage()) + + " A)") .setPos(10, 60)); } diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java new file mode 100644 index 0000000000..f641ed090b --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java @@ -0,0 +1,60 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +public class CoverDataFollower_NumericWidget<T extends ISerializableObject> extends NumericWidget + implements IDataFollowerWidget<T, Double> { + + private Function<T, Double> dataToStateGetter; + + public CoverDataFollower_NumericWidget() { + super(); + setGetter(() -> 0); // fake getter; used only for init + setSynced(false, false); + setTextColor(Color.WHITE.dark(1)); + setTextAlignment(Alignment.CenterLeft); + setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)); + } + + @Override + public void onPostInit() { + // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit, + // so we make sure cursor is set after text is set + super.onPostInit(); + + // On first call #handler does not contain text. + // On second call, it contains correct text to update #lastText, + // but #shouldGetFocus call is skipped by Cursor#updateFocused, + // so we need to manually call this. + if (focusOnGuiOpen) { + shouldGetFocus(); + } + } + + @Override + public CoverDataFollower_NumericWidget<T> setDataToStateGetter(Function<T, Double> dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollower_NumericWidget<T> setStateSetter(Consumer<Double> setter) { + super.setSetter(setter::accept); + return this; + } + + @Override + public void updateState(T data) { + setValue(dataToStateGetter.apply(data)); + } + +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java index df2dfa48f7..1907aaf22f 100644 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java @@ -5,9 +5,9 @@ import java.util.function.Function; import net.minecraft.client.gui.GuiScreen; +import com.gtnewhorizon.gtnhlib.util.parsing.MathExpressionParser; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MathExpression; import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; import gregtech.api.gui.modularui.GT_UITextures; @@ -60,6 +60,10 @@ public class CoverDataFollower_TextFieldWidget<T extends ISerializableObject> ex setText(dataToStateGetter.apply(data)); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbers(int baseStep, int ctrlStep, int shiftStep) { setOnScrollNumbers((val, direction) -> { int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) @@ -74,13 +78,21 @@ public class CoverDataFollower_TextFieldWidget<T extends ISerializableObject> ex return this; } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbers() { return setOnScrollNumbers(1, 50, 1000); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollText(int baseStep, int ctrlStep, int shiftStep) { setOnScroll((text, direction) -> { - int val = (int) MathExpression.parseMathExpression(text, -1); + int val = (int) MathExpressionParser.parse(text); int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) * direction; try { @@ -94,10 +106,18 @@ public class CoverDataFollower_TextFieldWidget<T extends ISerializableObject> ex return this; } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollText() { return setOnScrollText(1, 5, 50); } + /** + * @deprecated Use {@link CoverDataFollower_NumericWidget} + */ + @Deprecated public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbersLong(long baseStep, long ctrlStep, long shiftStep) { setOnScrollNumbersLong((val, direction) -> { long step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) |