Make scrolling work

This commit is contained in:
DBotThePony 2021-08-22 17:11:53 +07:00
parent 05a0b196c4
commit b7026c50b0
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 29 additions and 13 deletions

View File

@ -15,6 +15,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.capability.MatterTask;
import ru.dbotthepony.mc.otm.capability.PatternState;
@ -27,6 +28,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
import static org.lwjgl.opengl.GL11.GL_LESS;
@ -48,6 +50,12 @@ public class MatterPanelScreen extends MatteryScreen<MatterPanelMenu> {
imageHeight = 187;
titleLabelY = 5;
for (int i = 0; i < 100; i++) {
menu.patterns.add(new PatternState(UUID.randomUUID(), Items.COOKED_BEEF, 0.4));
menu.patterns.add(new PatternState(UUID.randomUUID(), Items.DIAMOND, 0.6));
menu.patterns.add(new PatternState(UUID.randomUUID(), Items.COBBLESTONE, 0.1));
}
}
public static final int GRID_WIDTH = 8;
@ -95,10 +103,10 @@ public class MatterPanelScreen extends MatteryScreen<MatterPanelMenu> {
scroll_panel.setDocking(Dock.RIGHT);
scroll_panel.setupRowMultiplier(() -> {
if (tasks_tab.isActive()) {
return menu.tasks.size() / 9;
return menu.tasks.size() / GRID_WIDTH;
}
return menu.patterns.size() / 9;
return menu.patterns.size() / GRID_WIDTH;
});
var grid = new GridPanel(this, frame, 0, 0, GRID_WIDTH * AbstractSlotPanel.REGULAR_DIMENSIONS, 0, GRID_WIDTH, GRID_HEIGHT) {
@ -118,20 +126,24 @@ public class MatterPanelScreen extends MatteryScreen<MatterPanelMenu> {
@Nonnull
@Override
protected ItemStack getItemStack() {
if (slot >= menu.patterns.size()) {
var slot1 = slot + scroll_panel.getScroll(menu.patterns.size() / GRID_WIDTH) * GRID_WIDTH;
if (slot1 >= menu.patterns.size()) {
return ItemStack.EMPTY;
}
return menu.patterns.get(slot).stack();
return menu.patterns.get(slot1).stack();
}
@Override
protected List<Component> getItemStackTooltip(ItemStack stack) {
if (slot >= menu.patterns.size()) {
var slot1 = slot + scroll_panel.getScroll(menu.patterns.size() / GRID_WIDTH) * GRID_WIDTH;
if (slot1 >= menu.patterns.size()) {
return List.of();
}
return getPatternTooltip(super.getItemStackTooltip(stack), menu.patterns.get(slot));
return getPatternTooltip(super.getItemStackTooltip(stack), menu.patterns.get(slot1));
}
@Override
@ -155,22 +167,25 @@ public class MatterPanelScreen extends MatteryScreen<MatterPanelMenu> {
@Nonnull
@Override
protected ItemStack getItemStack() {
if (slot >= menu.tasks.size()) {
var slot1 = slot + scroll_panel.getScroll(menu.tasks.size() / GRID_WIDTH) * GRID_WIDTH;
if (slot1 >= menu.tasks.size()) {
return ItemStack.EMPTY;
}
var task = menu.tasks.get(slot);
var task = menu.tasks.get(slot1);
return task.stack(Math.max(task.required(), 1));
}
@Override
protected List<Component> getItemStackTooltip(ItemStack stack) {
if (slot >= menu.tasks.size()) {
var slot1 = slot + scroll_panel.getScroll(menu.tasks.size() / GRID_WIDTH) * GRID_WIDTH;
if (slot1 >= menu.tasks.size()) {
return List.of();
}
return getTaskTooltip(super.getItemStackTooltip(stack), menu.tasks.get(slot));
return getTaskTooltip(super.getItemStackTooltip(stack), menu.tasks.get(slot1));
}
@Override

View File

@ -152,13 +152,14 @@ public class ScrollBarPanel extends EditablePanel {
return 0;
}
return (int) Math.floor(getScroll() * (max_rows - 1) + 0.5);
return (int) Math.floor(getScroll() * max_rows + 0.5);
}
// public is for emulating input from outside
@Override
public boolean mouseScrolledInner(double mouse_x, double mouse_y, double scroll) {
setScrollInternal((float) (this.scroll + scroll * scroll_multiplier.get()));
setScrollInternal((float) (this.scroll - scroll * scroll_multiplier.get()));
updateScrollBarPosition();
return true;
}