Mattery widgets panels test
This commit is contained in:
parent
483b26449b
commit
c35c99b73c
@ -22,7 +22,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
protected Inventory inventory;
|
||||
protected Player ply;
|
||||
|
||||
public final ArrayList<AbstractWidget<?>> widget_list = new ArrayList<>();
|
||||
public final ArrayList<AbstractWidget<?>> mattery_widgets = new ArrayList<>();
|
||||
public final ArrayList<MatterySlot> inventory_slots = new ArrayList<>();
|
||||
|
||||
protected MatteryMenu(@Nullable MenuType<?> p_38851_, int p_38852_, Inventory inventory) {
|
||||
@ -37,10 +37,10 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
}
|
||||
|
||||
public void addWidget(AbstractWidget<?> widget, Consumer<Consumer<ContainerData>> consumer) {
|
||||
if (widget_list.contains(widget))
|
||||
if (mattery_widgets.contains(widget))
|
||||
return;
|
||||
|
||||
widget_list.add(widget);
|
||||
mattery_widgets.add(widget);
|
||||
consumer.accept(this::addDataSlots);
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
|
||||
@Override
|
||||
public void broadcastChanges() {
|
||||
for (AbstractWidget<?> widget : this.widget_list) {
|
||||
for (AbstractWidget<?> widget : this.mattery_widgets) {
|
||||
widget.updateServer();
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
|
||||
@Override
|
||||
public void broadcastFullState() {
|
||||
for (AbstractWidget<?> widget : this.widget_list) {
|
||||
for (AbstractWidget<?> widget : this.mattery_widgets) {
|
||||
widget.updateServer();
|
||||
}
|
||||
|
||||
|
@ -50,15 +50,19 @@ public abstract class AbstractWidget<T extends MatteryMenu> {
|
||||
is_hovered = mouse_x >= x + local_x && mouse_y >= y + local_y && x + local_x + getImageWidth() >= mouse_x && y + local_y + getImageHeight() >= mouse_y;
|
||||
}
|
||||
|
||||
public void setIsHovered(boolean value) {
|
||||
is_hovered = value;
|
||||
}
|
||||
|
||||
public boolean isHovered() {
|
||||
return is_hovered;
|
||||
}
|
||||
|
||||
abstract public void updateServer();
|
||||
|
||||
abstract public void renderBackground(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y);
|
||||
abstract public void renderBackground(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y);
|
||||
|
||||
// true - rendered a tooltip, break the loop
|
||||
// false - pass
|
||||
abstract public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y);
|
||||
abstract public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int mouse_x, int mouse_y);
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ public class BatteryLevelWidget<T extends MatteryMenu> extends StorageGaugeWidge
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) {
|
||||
public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int mouse_x, int mouse_y) {
|
||||
if (is_hovered) {
|
||||
List<Component> text = List.of(
|
||||
new TranslatableComponent("otm.gui.power.percentage_level", String.format("%.2f", getLevel() * 100d)),
|
||||
|
@ -29,7 +29,7 @@ abstract public class GaugeWidget<T extends MatteryMenu> extends AbstractWidget<
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderBackground(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) {
|
||||
public void renderBackground(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y) {
|
||||
setupGaugeDrawing();
|
||||
|
||||
screen.blit(pose, local_x + x, local_y + y, getImageX(), getImageY(), getImageWidth(), getImageHeight());
|
||||
|
@ -46,7 +46,7 @@ public class MatterLevelWidget<T extends MatteryMenu> extends StorageGaugeWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) {
|
||||
public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int mouse_x, int mouse_y) {
|
||||
if (is_hovered) {
|
||||
List<Component> text = List.of(
|
||||
new TranslatableComponent("otm.gui.matter.percentage_level", String.format("%.2f", getLevel() * 100d)),
|
||||
|
@ -96,7 +96,7 @@ public class ProgressGaugeWidget<T extends MatteryMenu> extends GaugeWidget<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int local_x, int local_y, int mouse_x, int mouse_y) {
|
||||
public boolean renderTooltip(MatteryScreen<T> screen, PoseStack pose, int mouse_x, int mouse_y) {
|
||||
if (is_hovered) {
|
||||
List<Component> text;
|
||||
|
||||
|
@ -22,9 +22,9 @@ import net.minecraft.world.item.ItemStack;
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
||||
import ru.dbotthepony.mc.otm.menu.slot.MatterySlot;
|
||||
import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget;
|
||||
import ru.dbotthepony.mc.otm.screen.panels.EditablePanel;
|
||||
import ru.dbotthepony.mc.otm.screen.panels.FramePanel;
|
||||
import ru.dbotthepony.mc.otm.screen.panels.MatteryWidgetPanel;
|
||||
import ru.dbotthepony.mc.otm.screen.panels.SlotPanel;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -128,9 +128,14 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
|
||||
main_frame = makeMainFrame();
|
||||
|
||||
if (main_frame != null)
|
||||
if (main_frame != null) {
|
||||
addPanel(main_frame);
|
||||
|
||||
for (var widget : menu.mattery_widgets) {
|
||||
new MatteryWidgetPanel(this, main_frame, widget);
|
||||
}
|
||||
}
|
||||
|
||||
movePanels();
|
||||
}
|
||||
|
||||
@ -141,7 +146,7 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
|
||||
@Nullable
|
||||
protected FramePanel makeMainFrame() {
|
||||
return new FramePanel(this, null, 0, 0, 200, 100, getTitle());
|
||||
return new FramePanel(this, null, 0, 0, 18 * 9 + 16, 100, getTitle());
|
||||
}
|
||||
|
||||
public ItemRenderer getItemRenderer() {
|
||||
@ -285,16 +290,6 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
return super.keyPressed(p_97765_, p_97766_, p_97767_);
|
||||
}
|
||||
|
||||
protected void renderTooltip(PoseStack pose, int mouseX, int mouseY) {
|
||||
if (this.hoveredSlot == null && menu.getCarried().isEmpty()) {
|
||||
for (AbstractWidget widget : menu.widget_list) {
|
||||
if (widget.renderTooltip(this, pose, leftPos, topPos, mouseX, mouseY)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void renderFloatingItem(ItemStack p_97783_, int p_97784_, int p_97785_, String p_97786_) {
|
||||
PoseStack posestack = RenderSystem.getModelViewStack();
|
||||
posestack.translate(0.0D, 0.0D, 32.0D);
|
||||
@ -328,11 +323,6 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
|
||||
hoveredSlot = null;
|
||||
|
||||
// renderBg
|
||||
for (AbstractWidget widget : menu.widget_list) {
|
||||
widget.renderBackground(this, pose, leftPos, topPos, mouse_x, mouse_y);
|
||||
}
|
||||
|
||||
var hovered = false;
|
||||
|
||||
for (int i = panels.size() - 1; i >= 0; i--) {
|
||||
@ -389,7 +379,7 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
this.renderTooltip(pose, this.hoveredSlot.getItem(), mouse_x, mouse_y);
|
||||
} else {
|
||||
for (var panel : panels) {
|
||||
panel.renderPost(pose, mouse_x, mouse_y, flag);
|
||||
panel.renderTooltips(pose, mouse_x, mouse_y, flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ public class EditablePanel implements GuiEventListener {
|
||||
|
||||
}
|
||||
|
||||
protected void innerRenderPost(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
protected void innerRenderTooltips(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
|
||||
}
|
||||
|
||||
@ -167,16 +167,16 @@ public class EditablePanel implements GuiEventListener {
|
||||
* @param mouse_y
|
||||
* @param flag
|
||||
*/
|
||||
public void renderPost(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
public void renderTooltips(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
if (!getVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
innerRenderPost(stack, mouse_x, mouse_y, flag);
|
||||
innerRenderTooltips(stack, mouse_x, mouse_y, flag);
|
||||
|
||||
for (var child : children) {
|
||||
if (child.getVisible()) {
|
||||
child.innerRenderPost(stack, mouse_x, mouse_y, flag);
|
||||
child.innerRenderTooltips(stack, mouse_x, mouse_y, flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
package ru.dbotthepony.mc.otm.screen.panels;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
||||
import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget;
|
||||
import ru.dbotthepony.mc.otm.screen.MatteryScreen;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class MatteryWidgetPanel<T extends MatteryMenu> extends EditablePanel {
|
||||
public final AbstractWidget<T> widget;
|
||||
|
||||
public MatteryWidgetPanel(@Nonnull MatteryScreen<T> screen, @Nullable EditablePanel parent, AbstractWidget<T> widget) {
|
||||
super(screen, parent, widget.x, widget.y, widget.getImageWidth(), widget.getImageHeight());
|
||||
widget.x = 0;
|
||||
widget.y = 0;
|
||||
this.widget = widget;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
widget.setIsHovered(is_hovered);
|
||||
widget.renderBackground((MatteryScreen<T>) screen, stack, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerRenderTooltips(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
widget.renderTooltip((MatteryScreen<T>) screen, stack, (int) mouse_x, (int) mouse_y);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user