95 lines
3.1 KiB
Java
95 lines
3.1 KiB
Java
/*
|
|
* 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<T extends ContainerComputerBase> extends ContainerScreen<T>
|
|
{
|
|
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 );
|
|
}
|
|
}
|