diff options
author | Mary <33456283+FourIsTheNumber@users.noreply.github.com> | 2024-07-19 12:27:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-19 23:27:40 +0700 |
commit | 1842f59eeb837edecfc31dae8a2b35fcda471b38 (patch) | |
tree | 826ae5a141706145ed48ec415c57b3bf93a3fc88 /src/main/java/gregtech/api/interfaces/modularui | |
parent | e4b0d5d1e0f6080d4896c6ceec649d16fe68369f (diff) | |
download | GT5-Unofficial-1842f59eeb837edecfc31dae8a2b35fcda471b38.tar.gz GT5-Unofficial-1842f59eeb837edecfc31dae8a2b35fcda471b38.tar.bz2 GT5-Unofficial-1842f59eeb837edecfc31dae8a2b35fcda471b38.zip |
Mode switch button (#2730)
* Button textures. Once again I am manually pulling changes from a different branch... sorry. If you want to read the full commit history, the modeswitchgui branch has it.
* Texture enums
* Implementation in ControllerWithOptionalFeatures
* Implementation in GT_MetaTileEntity_MultiBlockBase
* Implemented into all multi-machines
* Lang changes
* Added documentation
* Added missing clear
* Quick polish changes - button base texture is standard instead of pressed, and the click noise works.
* MFE compatibility
* TurboCan compatibility
* Fix misordered icons in canner
* Removed redundant code in button
* Attempted to refactor with MachineMode enum. Also moved loadNBT and saveNBT logic to base class
* sa
* fix
(cherry picked from commit 1f14a7abf460ad114f10e8ba58b6be44b7b18d48)
* Rework machineMode into enum of IMachineMode completely
* Fixed breaking typo
* Made it stop crashing on normal multis that don't support mode switch
* Revert
* Finished revert and re-addressed changes from original review
* spotless
* Load nbt tags in correct order. Fixes backwards compat
* Check nbt key on load instead
* Run super last and make all MACHINEMODE static
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/api/interfaces/modularui')
-rw-r--r-- | src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java index 22694cdafd..a877492907 100644 --- a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java +++ b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java @@ -33,6 +33,7 @@ import gregtech.api.interfaces.tileentity.IVoidable; * <li>Separated input buses</li> * <li>Batch mode</li> * <li>Recipe locking</li> + * <li>Multiple machine modes</li> * </ul> */ public interface ControllerWithOptionalFeatures extends IVoidable, IRecipeLockable { @@ -118,6 +119,76 @@ public interface ControllerWithOptionalFeatures extends IVoidable, IRecipeLockab } /** + * @return if the multi has more than 1 mode + */ + default boolean supportsMachineModeSwitch() { + return false; + } + + /** + * @return the current mode number. This is a getter is used for displaying the icon in the GUI + */ + default int getMachineMode() { + return 0; + } + + /** + * @param index Index of machineModeIcons to pull from + * @return UITexture associated with that machineMode + */ + default UITexture getMachineModeIcon(int index) { + return null; + } + + /** + * @param index Number to set machineMode to + */ + default void setMachineMode(int index) {} + + /** + * @return Returns the next machineMode number in the sequence + */ + default int nextMachineMode() { + return 0; + } + + /** + * @return Returns whether machine supports mode switch by default + */ + default boolean getDefaultModeSwitch() { + return supportsMachineModeSwitch(); + } + + Pos2d getMachineModeSwitchButtonPos(); + + default void onMachineModeSwitchClick() {} + + default ButtonWidget createModeSwitchButton(IWidgetBuilder<?> builder) { + if (!supportsMachineModeSwitch()) return null; + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (supportsMachineModeSwitch()) { + onMachineModeSwitchClick(); + setMachineMode(nextMachineMode()); + } + }) + .setPlayClickSound(supportsMachineModeSwitch()) + .setBackground(() -> { + List<UITexture> ret = new ArrayList<>(); + if (supportsMachineModeSwitch()) { + ret.add(GT_UITextures.BUTTON_STANDARD); + ret.add(getMachineModeIcon(getMachineMode())); + } else return null; + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getMachineMode, this::setMachineMode), builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.mode_switch")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getMachineModeSwitchButtonPos()) + .setSize(16, 16); + return (ButtonWidget) button; + } + + /** * @return if the multi supports input separation. */ boolean supportsInputSeparation(); |