Better research screen

This commit is contained in:
DBotThePony 2021-08-24 22:28:44 +07:00
parent f388639fc6
commit e5f81569f9
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 51 additions and 10 deletions

View File

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

View File

@ -122,7 +122,7 @@ public class AndroidStationScreen extends MatteryScreen<AndroidStationMenu> 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<AndroidStationMenu> 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<AndroidStationMenu> 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<AndroidStationMenu> 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;
}

View File

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