From 1067aa0bd512ccb0c046af57e6951a4041e9df62 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 14 Aug 2021 00:36:29 +0700 Subject: [PATCH] Matter level widget --- .../mc/otm/menu/BatteryBankMenu.java | 25 +---- .../mc/otm/menu/MatterDecomposerMenu.java | 28 ++--- .../mc/otm/menu/PoweredMatteryMenu.java | 29 ----- .../otm/menu/widget/BatteryLevelWidget.java | 30 +----- .../mc/otm/menu/widget/MatterLevelWidget.java | 64 +++++++++++ .../widget/StorageVerticalGaugeWidget.java | 45 ++++++++ .../mc/otm/screen/BatteryBankScreen.java | 5 - .../mc/otm/screen/MatterDecomposerScreen.java | 4 - .../mc/otm/screen/MatteryScreen.java | 102 +----------------- .../mc/otm/screen/PoweredMachineScreen.java | 2 - 10 files changed, 125 insertions(+), 209 deletions(-) create mode 100644 src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java create mode 100644 src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageVerticalGaugeWidget.java diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/BatteryBankMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/BatteryBankMenu.java index eb9800e27..c648dec85 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/BatteryBankMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/BatteryBankMenu.java @@ -12,14 +12,14 @@ import ru.dbotthepony.mc.otm.capability.IMatteryEnergyStorage; import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.menu.data.BigDecimalDataContainer; import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; +import ru.dbotthepony.mc.otm.menu.widget.BatteryLevelWidget; import javax.annotation.Nullable; public class BatteryBankMenu extends MatteryMenu { protected BlockEntityBatteryBank tile; - public BigDecimalDataContainer energy; - public BigDecimalDataContainer max_energy; + public BatteryLevelWidget battery_widget; public BatteryBankMenu(int p_38852_, Inventory inventory) { this(p_38852_, inventory, null, new SimpleContainer(5 * 3)); @@ -29,27 +29,12 @@ public class BatteryBankMenu extends MatteryMenu { super(Registry.Menus.BATTERY_BANK, p_38852_, inventory, tile); this.tile = tile; - if (tile == null) { - energy = new BigDecimalDataContainer(); - max_energy = new BigDecimalDataContainer(); + if (tile == null || tile.getCapability(MatteryCapability.ENERGY).resolve().isEmpty()) { + battery_widget = new BatteryLevelWidget(this, 13, 14); } else { - energy = new BigDecimalDataContainer() { - @Override - protected void updateValue() { - setDecimal(tile.energy.getBatteryLevel()); - } - }; - max_energy = new BigDecimalDataContainer() { - @Override - protected void updateValue() { - setDecimal(tile.energy.getMaxBatteryLevel()); - } - }; + battery_widget = new BatteryLevelWidget(this, 13, 14, tile.getCapability(MatteryCapability.ENERGY).resolve().get()); } - this.addDataSlots(energy); - this.addDataSlots(max_energy); - for (int row = 0; row < 3; row++) for (int column = 0; column < 5; column++) this.addSlot(new BatterySlot(batteries, row * 5 + column, 62 + column * 18, 24 + row * 18)); diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java index 6dafeb658..653723b97 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/MatterDecomposerMenu.java @@ -11,9 +11,12 @@ import ru.dbotthepony.mc.otm.MatterRegistry; import ru.dbotthepony.mc.otm.Registry; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterDecomposer; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatteryPoweredMachine; +import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.menu.data.BigDecimalDataContainer; import ru.dbotthepony.mc.otm.menu.slot.MachineInputSlot; import ru.dbotthepony.mc.otm.menu.slot.MachineOutputSlot; +import ru.dbotthepony.mc.otm.menu.widget.BatteryLevelWidget; +import ru.dbotthepony.mc.otm.menu.widget.MatterLevelWidget; import javax.annotation.Nullable; @@ -22,8 +25,7 @@ public class MatterDecomposerMenu extends PoweredMatteryMenu { this(containerID, inventory, null); } - public BigDecimalDataContainer matter; - public BigDecimalDataContainer max_matter; + public MatterLevelWidget matter_widget; public ContainerData progress; @@ -64,32 +66,16 @@ public class MatterDecomposerMenu extends PoweredMatteryMenu { // Выход addSlot(new MachineOutputSlot(container, 1, 61 + 18 + 10 + 3 + 22, 36, true, true)); - if (tile == null) { - matter = new BigDecimalDataContainer(); - max_matter = new BigDecimalDataContainer(); + if (tile == null || tile.getCapability(MatteryCapability.MATTER).resolve().isEmpty()) { + matter_widget = new MatterLevelWidget<>(this, 22, 14); } else { - matter = new BigDecimalDataContainer() { - @Override - protected void updateValue() { - setDecimal(tile.matter.getStoredMatter()); - } - }; - - max_matter = new BigDecimalDataContainer() { - @Override - protected void updateValue() { - setDecimal(tile.matter.getMaxStoredMatter()); - } - }; + matter_widget = new MatterLevelWidget<>(this, 22, 14, tile.getCapability(MatteryCapability.MATTER).resolve().get()); } addBatterySlot(14); addInventorySlots(); - this.addDataSlots(matter); - this.addDataSlots(max_matter); - this.addDataSlots(progress); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java b/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java index e74248a1b..d2b35e226 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/PoweredMatteryMenu.java @@ -19,9 +19,6 @@ import javax.annotation.Nullable; abstract public class PoweredMatteryMenu extends MatteryMenu { protected BlockEntityMatteryPoweredMachine tile; - public BigDecimalDataContainer energy; - public BigDecimalDataContainer max_energy; - public BatteryLevelWidget battery_widget; protected PoweredMatteryMenu( @@ -34,36 +31,10 @@ abstract public class PoweredMatteryMenu extends MatteryMenu { this.tile = tile; if (tile == null || tile.getCapability(MatteryCapability.ENERGY).resolve().isEmpty()) { - energy = new BigDecimalDataContainer(); - max_energy = new BigDecimalDataContainer(); - battery_widget = new BatteryLevelWidget<>(this, 13, 14); } else { - energy = new BigDecimalDataContainer() { - @Override - protected void updateValue() { - LazyOptional capability = tile.getCapability(MatteryCapability.ENERGY); - - if (capability.isPresent()) - setDecimal(capability.resolve().get().getBatteryLevel()); - } - }; - - max_energy = new BigDecimalDataContainer() { - @Override - protected void updateValue() { - LazyOptional capability = tile.getCapability(MatteryCapability.ENERGY); - - if (capability.isPresent()) - setDecimal(capability.resolve().get().getMaxBatteryLevel()); - } - }; - battery_widget = new BatteryLevelWidget<>(this, 13, 14, tile.getCapability(MatteryCapability.ENERGY).resolve().get()); } - - this.addDataSlots(energy); - this.addDataSlots(max_energy); } protected void addBatterySlot() { diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java index 1db9ba7b4..6016c0ca5 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/BatteryLevelWidget.java @@ -19,36 +19,17 @@ import java.util.concurrent.Callable; import java.util.function.Consumer; import java.util.function.Supplier; -public class BatteryLevelWidget extends VerticalGaugeWidget { - protected Supplier value_supplier; - protected Supplier max_value_supplier; - - protected final BigDecimalDataContainer value_container = new BigDecimalDataContainer(); - protected final BigDecimalDataContainer max_value_container = new BigDecimalDataContainer(); - +public class BatteryLevelWidget extends StorageVerticalGaugeWidget { public BatteryLevelWidget(T menu, int x, int y, IMatteryEnergyStorage capability) { - this(menu, x, y, capability::getBatteryLevel, capability::getMaxBatteryLevel); + super(menu, x, y, capability::getBatteryLevel, capability::getMaxBatteryLevel); } public BatteryLevelWidget(T menu, int x, int y) { super(menu, x, y); - addDataSlots(value_container); - addDataSlots(max_value_container); } public BatteryLevelWidget(T menu, int x, int y, Supplier value_supplier, Supplier max_value_supplier) { - this(menu, x, y); - this.value_supplier = value_supplier; - this.max_value_supplier = max_value_supplier; - } - - @Override - public void updateServer() { - if (value_supplier == null || max_value_supplier == null) - return; - - value_container.setDecimal(value_supplier.get()); - max_value_container.setDecimal(max_value_supplier.get()); + super(menu, x, y, value_supplier, max_value_supplier); } @Override @@ -86,9 +67,4 @@ public class BatteryLevelWidget extends VerticalGaugeWidg return false; } - - @Override - float getLevel() { - return max_value_container.getDecimal().compareTo(BigDecimal.ZERO) == 0 ? 0f : value_container.getDecimal().divide(max_value_container.getDecimal(), MatteryCapability.ROUND_RULES).floatValue(); - } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java new file mode 100644 index 000000000..127285360 --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/MatterLevelWidget.java @@ -0,0 +1,64 @@ +package ru.dbotthepony.mc.otm.menu.widget; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import ru.dbotthepony.mc.otm.capability.IMatterHandler; +import ru.dbotthepony.mc.otm.capability.IMatteryEnergyStorage; +import ru.dbotthepony.mc.otm.menu.FormattingHelper; +import ru.dbotthepony.mc.otm.menu.MatteryMenu; +import ru.dbotthepony.mc.otm.screen.MatteryScreen; + +import java.math.BigDecimal; +import java.util.List; +import java.util.function.Supplier; + +public class MatterLevelWidget extends StorageVerticalGaugeWidget { + public MatterLevelWidget(T menu, int x, int y, IMatterHandler capability) { + super(menu, x, y, capability::getStoredMatter, capability::getMaxStoredMatter); + } + + public MatterLevelWidget(T menu, int x, int y) { + super(menu, x, y); + } + + public MatterLevelWidget(T menu, int x, int y, Supplier value_supplier, Supplier max_value_supplier) { + super(menu, x, y, value_supplier, max_value_supplier); + } + + @Override + public int getImageWidth() { + return 9; + } + + @Override + public int getImageHeight() { + return 48; + } + + @Override + public int getImageX() { + return 0; + } + + @Override + public int getImageY() { + return 0; + } + + @Override + public boolean renderTooltip(MatteryScreen screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) { + if (is_hovered) { + List text = List.of( + new TranslatableComponent("otm.gui.matter.percentage_level", String.format("%.2f", getLevel() * 100d)), + FormattingHelper.formatMatterLevel(value_container.getDecimal(), max_value_container.getDecimal()) + ); + + screen.renderComponentTooltip(pose, text, mouse_x, mouse_y); + + return true; + } + + return false; + } +} diff --git a/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageVerticalGaugeWidget.java b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageVerticalGaugeWidget.java new file mode 100644 index 000000000..1e0526615 --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/menu/widget/StorageVerticalGaugeWidget.java @@ -0,0 +1,45 @@ +package ru.dbotthepony.mc.otm.menu.widget; + +import com.mojang.blaze3d.vertex.PoseStack; +import ru.dbotthepony.mc.otm.capability.MatteryCapability; +import ru.dbotthepony.mc.otm.menu.MatteryMenu; +import ru.dbotthepony.mc.otm.menu.data.BigDecimalDataContainer; +import ru.dbotthepony.mc.otm.screen.MatteryScreen; + +import java.math.BigDecimal; +import java.util.function.Supplier; + +abstract public class StorageVerticalGaugeWidget extends VerticalGaugeWidget { + protected Supplier value_supplier; + protected Supplier max_value_supplier; + + protected final BigDecimalDataContainer value_container = new BigDecimalDataContainer(); + protected final BigDecimalDataContainer max_value_container = new BigDecimalDataContainer(); + + public StorageVerticalGaugeWidget(T menu, int x, int y) { + this(menu, x, y, null, null); + } + + public StorageVerticalGaugeWidget(T menu, int x, int y, Supplier value_supplier, Supplier max_value_supplier) { + super(menu, x, y); + this.value_supplier = value_supplier; + this.max_value_supplier = max_value_supplier; + + addDataSlots(value_container); + addDataSlots(max_value_container); + } + + @Override + public void updateServer() { + if (value_supplier == null || max_value_supplier == null) + return; + + value_container.setDecimal(value_supplier.get()); + max_value_container.setDecimal(max_value_supplier.get()); + } + + @Override + float getLevel() { + return max_value_container.getDecimal().compareTo(BigDecimal.ZERO) == 0 ? 0f : value_container.getDecimal().divide(max_value_container.getDecimal(), MatteryCapability.ROUND_RULES).floatValue(); + } +} diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java index 29bfd755d..48aa2ef12 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/BatteryBankScreen.java @@ -12,10 +12,5 @@ import ru.dbotthepony.mc.otm.menu.MatteryMenu; public class BatteryBankScreen extends MatteryScreen { public BatteryBankScreen(BatteryBankMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); - power_supplier = () -> menu.energy.getDecimal(); - max_matter_supplier = () -> menu.max_energy.getDecimal(); - - power_gauge_x = 15; - power_gauge_y = 24; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java index 70aac663e..09940831f 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatterDecomposerScreen.java @@ -8,9 +8,5 @@ import ru.dbotthepony.mc.otm.menu.MatterDecomposerMenu; public class MatterDecomposerScreen extends PoweredMachineScreen { public MatterDecomposerScreen(MatterDecomposerMenu p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); - matter_supplier = () -> menu.matter.getDecimal(); - max_matter_supplier = () -> menu.max_matter.getDecimal(); - - progress_supplier = () -> p_97741_.progress.get(0) / 100f; } } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java index e023bb377..21b5a75d1 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/MatteryScreen.java @@ -31,23 +31,6 @@ public class MatteryScreen extends AbstractContainerScree return CONTAINER_BASE; } - protected Supplier power_supplier; - protected Supplier max_power_supplier; - - protected int power_gauge_x = 13; - protected int power_gauge_y = 14; - - protected Supplier matter_supplier; - protected Supplier max_matter_supplier; - - protected Supplier progress_supplier; - - protected int matter_gauge_x = 22; - protected int matter_gauge_y = 14; - - protected boolean hovering_power_gauge = false; - protected boolean hovering_matter_gauge = false; - protected int render_x; protected int render_y; @@ -71,55 +54,9 @@ public class MatteryScreen extends AbstractContainerScree return; } } - - if (hovering_power_gauge) { - List text = getFormattedPowerLevel(); - - if (text.size() != 0) - this.renderComponentToolTip(pose, text, mouseX, mouseY, font); - } else if (hovering_matter_gauge) { - List text = getFormattedMatterLevel(); - - if (text.size() != 0) - this.renderComponentToolTip(pose, text, mouseX, mouseY, font); - } } } - protected List getFormattedPowerLevel() { - if (power_supplier != null && max_power_supplier != null) - return getFormattedPowerLevel(power_supplier.get(), max_power_supplier.get()); - - return List.of(); - } - - protected List getFormattedMatterLevel() { - if (matter_supplier != null && max_matter_supplier != null) - return getFormattedMatterLevel(matter_supplier.get(), max_matter_supplier.get()); - - return List.of(); - } - - protected List getFormattedPowerLevel(BigDecimal current, BigDecimal max) { - if (current == null || max == null) - return List.of(); - - return List.of( - new TranslatableComponent("otm.gui.power.percentage_level", String.format("%.2f", level(current, max) * 100d)), - FormattingHelper.formatPowerLevel(current, max) - ); - } - - protected List getFormattedMatterLevel(BigDecimal current, BigDecimal max) { - if (current == null || max == null) - return List.of(); - - return List.of( - new TranslatableComponent("otm.gui.matter.percentage_level", String.format("%.2f", level(current, max) * 100d)), - FormattingHelper.formatMatterLevel(current, max) - ); - } - protected void renderVerticalGauge(PoseStack pose, int x, int y, float level, int image_x, int image_y, int width, int max_height) { RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); @@ -155,7 +92,7 @@ public class MatteryScreen extends AbstractContainerScree } protected boolean renderHorizontalGauge(PoseStack pose, int x, int y, int mouseX, int mouseY, float level, int image_x, int image_y, int width, int max_height) { - renderVerticalGauge(pose, x, y, level, image_x, image_y, width, max_height); + renderHorizontalGauge(pose, x, y, level, image_x, image_y, width, max_height); x += leftPos; y += topPos; @@ -181,36 +118,6 @@ public class MatteryScreen extends AbstractContainerScree return level(a, b, true); } - protected boolean renderMatterGauge(PoseStack pose, int mouseX, int mouseY) { - if (matter_supplier != null && max_matter_supplier != null) - return renderMatterGauge(pose, mouseX, mouseY, matter_supplier.get(), max_matter_supplier.get()); - - return false; - } - - protected boolean renderPowerGauge(PoseStack pose, int mouseX, int mouseY) { - if (power_supplier != null && max_power_supplier != null) - return renderPowerGauge(pose, mouseX, mouseY, power_supplier.get(), max_power_supplier.get()); - - return false; - } - - protected boolean renderMatterGauge(PoseStack pose, int mouseX, int mouseY, BigDecimal current_value, BigDecimal max_value) { - return renderMatterGauge(pose, matter_gauge_x, matter_gauge_y, mouseX, mouseY, current_value, max_value); - } - - protected boolean renderPowerGauge(PoseStack pose, int mouseX, int mouseY, BigDecimal current_value, BigDecimal max_value) { - return renderPowerGauge(pose, power_gauge_x, power_gauge_y, mouseX, mouseY, current_value, max_value); - } - - protected boolean renderPowerGauge(PoseStack pose, int x, int y, int mouseX, int mouseY, BigDecimal current_value, BigDecimal max_value) { - return hovering_power_gauge = renderVerticalGauge(pose, x, y, mouseX, mouseY, level(current_value, max_value), 0, 48, 9, 48); - } - - protected boolean renderMatterGauge(PoseStack pose, int x, int y, int mouseX, int mouseY, BigDecimal current_value, BigDecimal max_value) { - return hovering_matter_gauge = renderVerticalGauge(pose, x, y, mouseX, mouseY, level(current_value, max_value), 0, 0, 9, 48); - } - protected void renderProgressGauge(PoseStack pose, int x, int y, float level) { renderHorizontalGauge(pose, x, y, level, 0, 132, 22, 16); } @@ -254,9 +161,6 @@ public class MatteryScreen extends AbstractContainerScree // PoseStack, x, y, image_start_x, image_start_y, rect_size_x, rect_size_y this.blit(pose, render_x, render_y, 0, 0, this.imageWidth, this.imageHeight); - renderPowerGauge(pose, mouseX, mouseY); - renderMatterGauge(pose, mouseX, mouseY); - RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShaderTexture(0, WIDGETS); @@ -267,10 +171,6 @@ public class MatteryScreen extends AbstractContainerScree } else if (slot instanceof MachineOutputSlot slot1 && slot1.auto_bg) { if (slot1.is_main_output) { renderOutputSlot(pose, slot1.x, slot1.y); - - if (progress_supplier != null) { - renderProgressGaugeLeft(pose, slot1.x - 8, slot1.y, progress_supplier.get()); - } } else { renderRegularSlot(pose, slot1.x, slot1.y); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/PoweredMachineScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/PoweredMachineScreen.java index 79ae43350..7a09a0333 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/PoweredMachineScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/PoweredMachineScreen.java @@ -11,7 +11,5 @@ import java.util.List; public class PoweredMachineScreen extends MatteryScreen { public PoweredMachineScreen(T p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); - // power_supplier = () -> menu.energy.getDecimal(); - // max_power_supplier = () -> menu.max_energy.getDecimal(); } }