/* * This file is part of ComputerCraft - http://www.computercraft.info * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. * Send enquiries to dratcliffe@gmail.com */ package dan200.computercraft.client.gui; import dan200.computercraft.client.gui.widgets.ComputerSidebar; import dan200.computercraft.client.gui.widgets.WidgetTerminal; import dan200.computercraft.shared.computer.core.ClientComputer; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import net.minecraft.client.gui.screen.inventory.ContainerScreen; import net.minecraft.client.gui.widget.Widget; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; import org.lwjgl.glfw.GLFW; public abstract class ComputerScreenBase extends ContainerScreen { protected WidgetTerminal terminal; protected final ClientComputer computer; protected final ComputerFamily family; protected final int sidebarYOffset; public ComputerScreenBase( T container, PlayerInventory player, ITextComponent title, int sidebarYOffset ) { super( container, player, title ); computer = (ClientComputer) container.getComputer(); family = container.getFamily(); this.sidebarYOffset = sidebarYOffset; } protected abstract WidgetTerminal createTerminal(); @Override protected final void init() { super.init(); minecraft.keyboardHandler.setSendRepeatsToGui( true ); terminal = addButton( createTerminal() ); ComputerSidebar.addButtons( this, computer, this::addButton, leftPos, topPos + sidebarYOffset ); setFocused( terminal ); } @Override public final void removed() { super.removed(); minecraft.keyboardHandler.setSendRepeatsToGui( false ); } @Override public final void tick() { super.tick(); terminal.update(); } @Override public final boolean keyPressed( int key, int scancode, int modifiers ) { // Forward the tab key to the terminal, rather than moving between controls. if( key == GLFW.GLFW_KEY_TAB && getFocused() != null && getFocused() == terminal ) { return getFocused().keyPressed( key, scancode, modifiers ); } return super.keyPressed( key, scancode, modifiers ); } @Override public final void render( int mouseX, int mouseY, float partialTicks ) { renderBackground(); super.render( mouseX, mouseY, partialTicks ); renderTooltip( mouseX, mouseY ); for( Widget widget : buttons ) { if( widget.isHovered() ) widget.renderToolTip( mouseX, mouseY ); } } @Override public final boolean mouseDragged( double x, double y, int button, double deltaX, double deltaY ) { return (getFocused() != null && getFocused().mouseDragged( x, y, button, deltaX, deltaY )) || super.mouseDragged( x, y, button, deltaX, deltaY ); } }