Mattery widgets panels test

This commit is contained in:
DBotThePony 2021-08-20 18:29:27 +07:00
parent 483b26449b
commit c35c99b73c
Signed by: DBot
GPG Key ID: DCC23B5715498507
9 changed files with 59 additions and 34 deletions

View File

@ -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();
}

View File

@ -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);
}

View File

@ -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)),

View File

@ -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());

View File

@ -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)),

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}