From e5f81569f9dfd2150cbf4995026630ce318fc8b3 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Tue, 24 Aug 2021 22:28:44 +0700 Subject: [PATCH] Better research screen --- .../android/AndroidResearchRequestPacket.java | 4 +- .../mc/otm/screen/AndroidStationScreen.java | 55 ++++++++++++++++--- .../overdrive_that_matters/lang/en_us.json | 2 + 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/main/java/ru/dbotthepony/mc/otm/network/android/AndroidResearchRequestPacket.java b/src/main/java/ru/dbotthepony/mc/otm/network/android/AndroidResearchRequestPacket.java index 1fae6aa6a..3ca48ff60 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/network/android/AndroidResearchRequestPacket.java +++ b/src/main/java/ru/dbotthepony/mc/otm/network/android/AndroidResearchRequestPacket.java @@ -8,6 +8,7 @@ import ru.dbotthepony.mc.otm.android.AndroidResearch; import ru.dbotthepony.mc.otm.android.AndroidResearchType; import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.capability.AndroidCapabilityPlayer; +import ru.dbotthepony.mc.otm.menu.AndroidStationMenu; import java.util.Objects; import java.util.function.Supplier; @@ -34,7 +35,8 @@ public record AndroidResearchRequestPacket(AndroidResearchType research) { if (!cap.isAndroid()) return; - cap.getResearch(research).research(); + if (ply.containerMenu instanceof AndroidStationMenu) + cap.getResearch(research).research(); } public static AndroidResearchRequestPacket read(FriendlyByteBuf buffer) { diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java index f33b24e2d..2cb3c49fe 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java @@ -122,7 +122,7 @@ public class AndroidStationScreen extends MatteryScreen impl seen.add(research); if (rows[level] == null) { - rows[level] = new EditablePanel(this, canvas, 0, level * 22, 1000, 22) { + rows[level] = new EditablePanel(this, canvas, 0, level * 22, 10000, 22) { @Override protected boolean mouseClickedInner(double mouse_x, double mouse_y, int flag) { return false; @@ -160,15 +160,13 @@ public class AndroidStationScreen extends MatteryScreen impl } private DraggableCanvasPanel canvas; + private FramePanel research; - @Nullable - @Override - protected FramePanel makeMainFrame() { - var frame = new FramePanel(this, null, 0, 0, FRAME_WIDTH, FRAME_HEIGHT, getTitle()); + private void openResearchTree() { + var window = this.minecraft.getWindow(); + research = new FramePanel(this, null, 0, 0, window.getGuiScaledWidth() * 0.8f, window.getGuiScaledHeight() * 0.8f, new TranslatableComponent("otm.gui.android_research")); - autoAttachToFrame(frame); - - canvas = new DraggableCanvasPanel(this, frame, 0, 0, GRID_WIDTH * 22, 0) { + canvas = new DraggableCanvasPanel(this, research, 0, 0, GRID_WIDTH * 22, 0) { @Override protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) { RenderHelper.setDrawColor(RGBAColor.BLACK); @@ -178,6 +176,9 @@ public class AndroidStationScreen extends MatteryScreen impl minecraft.player.getCapability(MatteryCapability.ANDROID).ifPresent(_cap -> { if (_cap instanceof AndroidCapabilityPlayer cap) { + Arrays.fill(rows, null); + next_x = 0; + for (var research : Registry.ANDROID_RESEARCH().getValues()) { if (research.getPrerequisites().size() == 0) { dive(cap, research, 0); @@ -219,7 +220,43 @@ public class AndroidStationScreen extends MatteryScreen impl } }); - canvas.setDock(Dock.RIGHT); + canvas.setDock(Dock.FILL); + + var bottom = new EditablePanel(this, research, 0, 0, 0, 20); + var close = new ButtonPanel(this, bottom, 0, 0, 90, 20, new TranslatableComponent("otm.container.matter_panel.close")); + bottom.setDock(Dock.BOTTOM); + close.setDock(Dock.RIGHT); + close.bindOnPress(research::remove); + bottom.setDockMargin(0, 0, 4, 4); + + canvas.setDockMargin(4, 4, 4, 4); + + research.toScreenCenter(); + addPanel(research); + } + + @Override + public void resize(Minecraft minecraft, int p_96576_, int p_96577_) { + super.resize(minecraft, p_96576_, p_96577_); + + if (research != null) { + var window = minecraft.getWindow(); + research.setSize(window.getGuiScaledWidth() * 0.8f, window.getGuiScaledHeight() * 0.8f); + research.toScreenCenter(); + } + } + + @Nullable + @Override + protected FramePanel makeMainFrame() { + var frame = new FramePanel(this, null, 0, 0, FRAME_WIDTH, FRAME_HEIGHT, getTitle()); + + autoAttachToFrame(frame); + + var button = new ButtonPanel(this, frame, 0, 0, 90, 20, new TranslatableComponent("otm.gui.android_research")); + button.setDock(Dock.BOTTOM); + button.bindOnPress(this::openResearchTree); + button.setDockMargin(10, 0, 10, 0); return frame; } diff --git a/src/main/resources/assets/overdrive_that_matters/lang/en_us.json b/src/main/resources/assets/overdrive_that_matters/lang/en_us.json index 9fb0b6331..b93dad647 100644 --- a/src/main/resources/assets/overdrive_that_matters/lang/en_us.json +++ b/src/main/resources/assets/overdrive_that_matters/lang/en_us.json @@ -15,6 +15,8 @@ "otm.gui.matter.format": "Matter: %s", "otm.gui.matter.name": "MtU", + "otm.gui.android_research": "Android research tree", + "otm.gui.pattern.percentage_level": "Fill level: %s%%", "otm.gui.pattern.format": "Stored patterns: %s / %s",