Pull common UI logic from robot and computer into base class.
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package li.cil.oc2.client.gui;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import li.cil.oc2.common.container.AbstractMachineTerminalContainer;
|
||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||
import net.minecraft.client.gui.widget.Widget;
|
||||
import net.minecraft.client.util.InputMappings;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
|
||||
public abstract class AbstractMachineTerminalScreen<T extends AbstractMachineTerminalContainer> extends ContainerScreen<T> {
|
||||
private final AbstractMachineTerminalWidget terminalWidget;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
protected AbstractMachineTerminalScreen(final T container, final PlayerInventory playerInventory, final ITextComponent title) {
|
||||
super(container, playerInventory, title);
|
||||
this.terminalWidget = new AbstractMachineTerminalWidget(this, container) {
|
||||
@Override
|
||||
protected void addButton(final Widget widget) {
|
||||
AbstractMachineTerminalScreen.this.addButton(widget);
|
||||
}
|
||||
};
|
||||
imageWidth = Sprites.TERMINAL_SCREEN.width;
|
||||
imageHeight = Sprites.TERMINAL_SCREEN.height;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) {
|
||||
terminalWidget.renderBackground(matrixStack, mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderLabels(final MatrixStack matrixStack, final int mouseX, final int mouseY) {
|
||||
// This is required to prevent the labels from being rendered
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) {
|
||||
renderBackground(matrixStack);
|
||||
super.render(matrixStack, mouseX, mouseY, partialTicks);
|
||||
terminalWidget.render(matrixStack, mouseX, mouseY, menu.getVirtualMachine().getBootError());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
terminalWidget.tick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean charTyped(final char ch, final int modifiers) {
|
||||
return terminalWidget.charTyped(ch, modifiers) ||
|
||||
super.charTyped(ch, modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) {
|
||||
if (terminalWidget.keyPressed(keyCode, scanCode, modifiers)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Don't close with inventory binding since we usually want to use that as terminal input
|
||||
// even without input capture enabled.
|
||||
final InputMappings.Input input = InputMappings.getKey(keyCode, scanCode);
|
||||
if (this.minecraft.options.keyInventory.isActiveAndMatches(input)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
super.init();
|
||||
terminalWidget.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose() {
|
||||
super.onClose();
|
||||
terminalWidget.onClose();
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,10 @@ package li.cil.oc2.client.gui;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import li.cil.oc2.client.gui.terminal.TerminalInput;
|
||||
import li.cil.oc2.client.gui.widget.ImageButton;
|
||||
import li.cil.oc2.client.gui.widget.ToggleImageButton;
|
||||
import li.cil.oc2.common.Constants;
|
||||
import li.cil.oc2.common.container.AbstractMachineTerminalContainer;
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.AbstractGui;
|
||||
@@ -25,7 +27,7 @@ import java.util.List;
|
||||
|
||||
import static li.cil.oc2.common.util.TooltipUtils.withColor;
|
||||
|
||||
public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
public abstract class AbstractMachineTerminalWidget extends AbstractGui {
|
||||
public static final int TERMINAL_WIDTH = Terminal.WIDTH * Terminal.CHAR_WIDTH / 2;
|
||||
public static final int TERMINAL_HEIGHT = Terminal.HEIGHT * Terminal.CHAR_HEIGHT / 2;
|
||||
|
||||
@@ -33,34 +35,28 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
public static final int TERMINAL_X = MARGIN_SIZE;
|
||||
public static final int TERMINAL_Y = MARGIN_SIZE;
|
||||
|
||||
public static final int WIDTH = TERMINAL_WIDTH + MARGIN_SIZE * 2;
|
||||
public static final int HEIGHT = TERMINAL_HEIGHT + MARGIN_SIZE * 2;
|
||||
public static final int WIDTH = Sprites.TERMINAL_SCREEN.width;
|
||||
public static final int HEIGHT = Sprites.TERMINAL_SCREEN.height;
|
||||
|
||||
private static final int CONTROLS_TOP = 8;
|
||||
private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_2.height + 4;
|
||||
private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_3.height + 4;
|
||||
|
||||
private static boolean isInputCaptureEnabled;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
private final Screen parent;
|
||||
private final AbstractMachineTerminalContainer container;
|
||||
private final Terminal terminal;
|
||||
private int windowLeft, windowTop;
|
||||
private boolean isMouseOverTerminal;
|
||||
|
||||
private int currentEnergy, maxEnergy, energyConsumption;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
protected AbstractTerminalWidget(final Screen parent, final Terminal terminal) {
|
||||
protected AbstractMachineTerminalWidget(final Screen parent, final AbstractMachineTerminalContainer container) {
|
||||
this.parent = parent;
|
||||
this.terminal = terminal;
|
||||
}
|
||||
|
||||
public void setEnergyInfo(final int current, final int capacity, final int consumption) {
|
||||
this.currentEnergy = current;
|
||||
this.maxEnergy = capacity;
|
||||
this.energyConsumption = consumption;
|
||||
this.container = container;
|
||||
this.terminal = container.getTerminal();
|
||||
}
|
||||
|
||||
public void renderBackground(final MatrixStack matrixStack, final int mouseX, final int mouseY) {
|
||||
@@ -68,9 +64,9 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
|
||||
isMouseOverTerminal = isMouseOverTerminal(mouseX, mouseY);
|
||||
|
||||
Sprites.SIDEBAR_2.draw(matrixStack, windowLeft - Sprites.SIDEBAR_2.width, windowTop + CONTROLS_TOP);
|
||||
Sprites.SIDEBAR_3.draw(matrixStack, windowLeft - Sprites.SIDEBAR_2.width, windowTop + CONTROLS_TOP);
|
||||
|
||||
if (maxEnergy > 0) {
|
||||
if (container.getEnergyCapacity() > 0) {
|
||||
final int x = windowLeft - Sprites.SIDEBAR_2.width;
|
||||
final int y = windowTop + ENERGY_TOP;
|
||||
Sprites.SIDEBAR_2.draw(matrixStack, x, y);
|
||||
@@ -85,7 +81,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
}
|
||||
|
||||
public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, @Nullable final ITextComponent error) {
|
||||
if (isRunning()) {
|
||||
if (container.getVirtualMachine().isRunning()) {
|
||||
final MatrixStack stack = new MatrixStack();
|
||||
stack.translate(windowLeft + TERMINAL_X, windowTop + TERMINAL_Y, getClient().getItemRenderer().blitOffset);
|
||||
stack.scale(TERMINAL_WIDTH / (float) terminal.getWidth(), TERMINAL_HEIGHT / (float) terminal.getHeight(), 1f);
|
||||
@@ -104,12 +100,16 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
}
|
||||
}
|
||||
|
||||
if (maxEnergy > 0) {
|
||||
Sprites.ENERGY_BAR.drawFillY(matrixStack, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + ENERGY_TOP + 4, currentEnergy / (float) maxEnergy);
|
||||
final int energyCapacity = container.getEnergyCapacity();
|
||||
if (energyCapacity > 0) {
|
||||
final int energyStored = container.getEnergy();
|
||||
final int energyConsumption = container.getEnergyConsumption();
|
||||
|
||||
Sprites.ENERGY_BAR.drawFillY(matrixStack, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + ENERGY_TOP + 4, energyStored / (float) energyCapacity);
|
||||
|
||||
if (isMouseOver(mouseX, mouseY, -Sprites.SIDEBAR_2.width + 4, ENERGY_TOP + 4, Sprites.ENERGY_BAR.width, Sprites.ENERGY_BAR.height)) {
|
||||
final List<? extends ITextProperties> tooltip = Arrays.asList(
|
||||
new TranslationTextComponent(Constants.TOOLTIP_ENERGY, withColor(currentEnergy + "/" + maxEnergy, TextFormatting.GREEN)),
|
||||
new TranslationTextComponent(Constants.TOOLTIP_ENERGY, withColor(energyStored + "/" + energyCapacity, TextFormatting.GREEN)),
|
||||
new TranslationTextComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, withColor(String.valueOf(energyConsumption), TextFormatting.GREEN))
|
||||
);
|
||||
GuiUtils.drawHoveringText(matrixStack, tooltip, mouseX, mouseY, parent.width, parent.height, 200, getClient().font);
|
||||
@@ -120,7 +120,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
public void tick() {
|
||||
final ByteBuffer input = terminal.getInput();
|
||||
if (input != null) {
|
||||
sendTerminalInputToServer(input);
|
||||
container.sendTerminalInputToServer(input);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
getClient().keyboardHandler.setSendRepeatsToGui(true);
|
||||
|
||||
addButton(new ToggleImageButton(
|
||||
parent, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + CONTROLS_TOP + 4,
|
||||
parent, windowLeft - Sprites.SIDEBAR_3.width + 4, windowTop + CONTROLS_TOP + 4,
|
||||
12, 12,
|
||||
new TranslationTextComponent(Constants.COMPUTER_SCREEN_POWER_CAPTION),
|
||||
new TranslationTextComponent(Constants.COMPUTER_SCREEN_POWER_DESCRIPTION),
|
||||
@@ -169,17 +169,17 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
@Override
|
||||
public void onPress() {
|
||||
super.onPress();
|
||||
sendPowerStateToServer(!isRunning());
|
||||
container.sendPowerStateToServer(!container.getVirtualMachine().isRunning());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isToggled() {
|
||||
return isRunning();
|
||||
return container.getVirtualMachine().isRunning();
|
||||
}
|
||||
});
|
||||
|
||||
addButton(new ToggleImageButton(
|
||||
parent, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + CONTROLS_TOP + 18,
|
||||
parent, windowLeft - Sprites.SIDEBAR_3.width + 4, windowTop + CONTROLS_TOP + 4 + 14,
|
||||
12, 12,
|
||||
new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION),
|
||||
new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION),
|
||||
@@ -198,6 +198,20 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
return isInputCaptureEnabled;
|
||||
}
|
||||
});
|
||||
|
||||
addButton(new ImageButton(
|
||||
parent, windowLeft - Sprites.SIDEBAR_3.width + 4, windowTop + CONTROLS_TOP + 4 + 14 + 14,
|
||||
12, 12,
|
||||
new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION),
|
||||
new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION),
|
||||
Sprites.INVENTORY_BUTTON_INACTIVE,
|
||||
Sprites.INVENTORY_BUTTON_ACTIVE
|
||||
) {
|
||||
@Override
|
||||
public void onPress() {
|
||||
// todo switch to container
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onClose() {
|
||||
@@ -206,14 +220,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
protected abstract boolean isRunning();
|
||||
|
||||
protected void addButton(final Widget widget) {
|
||||
}
|
||||
|
||||
protected abstract void sendPowerStateToServer(boolean value);
|
||||
|
||||
protected abstract void sendTerminalInputToServer(final ByteBuffer input);
|
||||
protected abstract void addButton(final Widget widget);
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -222,13 +229,13 @@ public abstract class AbstractTerminalWidget extends AbstractGui {
|
||||
}
|
||||
|
||||
private boolean shouldCaptureInput() {
|
||||
return isMouseOverTerminal && isInputCaptureEnabled && isRunning();
|
||||
return isMouseOverTerminal && isInputCaptureEnabled && container.getVirtualMachine().isRunning();
|
||||
}
|
||||
|
||||
private boolean isMouseOverTerminal(final int mouseX, final int mouseY) {
|
||||
return isMouseOver(mouseX, mouseY,
|
||||
AbstractTerminalWidget.TERMINAL_X, AbstractTerminalWidget.TERMINAL_Y,
|
||||
AbstractTerminalWidget.TERMINAL_WIDTH, AbstractTerminalWidget.TERMINAL_HEIGHT);
|
||||
AbstractMachineTerminalWidget.TERMINAL_X, AbstractMachineTerminalWidget.TERMINAL_Y,
|
||||
AbstractMachineTerminalWidget.TERMINAL_WIDTH, AbstractMachineTerminalWidget.TERMINAL_HEIGHT);
|
||||
}
|
||||
|
||||
private boolean isMouseOver(final int mouseX, final int mouseY, final int x, final int y, final int width, final int height) {
|
||||
@@ -1,118 +1,11 @@
|
||||
package li.cil.oc2.client.gui;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import li.cil.oc2.common.container.ComputerTerminalContainer;
|
||||
import li.cil.oc2.common.network.Network;
|
||||
import li.cil.oc2.common.network.message.ComputerPowerMessage;
|
||||
import li.cil.oc2.common.network.message.ComputerTerminalInputMessage;
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||
import net.minecraft.client.gui.widget.Widget;
|
||||
import net.minecraft.client.util.InputMappings;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public final class ComputerTerminalScreen extends ContainerScreen<ComputerTerminalContainer> {
|
||||
private final ComputerTerminalWidget terminalWidget;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public final class ComputerTerminalScreen extends AbstractMachineTerminalScreen<ComputerTerminalContainer> {
|
||||
public ComputerTerminalScreen(final ComputerTerminalContainer container, final PlayerInventory playerInventory, final ITextComponent title) {
|
||||
super(container, playerInventory, title);
|
||||
this.terminalWidget = new ComputerTerminalWidget(container.getComputer().getTerminal());
|
||||
imageWidth = AbstractTerminalWidget.WIDTH;
|
||||
imageHeight = AbstractTerminalWidget.HEIGHT;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) {
|
||||
terminalWidget.renderBackground(matrixStack, mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderLabels(final MatrixStack matrixStack, final int mouseX, final int mouseY) {
|
||||
// This is required to prevent the labels from being rendered
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) {
|
||||
terminalWidget.setEnergyInfo(menu.getEnergy(), menu.getEnergyCapacity(), menu.getEnergyConsumption());
|
||||
|
||||
renderBackground(matrixStack);
|
||||
super.render(matrixStack, mouseX, mouseY, partialTicks);
|
||||
terminalWidget.render(matrixStack, mouseX, mouseY, menu.getComputer().getVirtualMachine().getBootError());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
terminalWidget.tick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean charTyped(final char ch, final int modifiers) {
|
||||
return terminalWidget.charTyped(ch, modifiers) ||
|
||||
super.charTyped(ch, modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) {
|
||||
if (terminalWidget.keyPressed(keyCode, scanCode, modifiers)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Don't close with inventory binding since we usually want to use that as terminal input
|
||||
// even without input capture enabled.
|
||||
final InputMappings.Input input = InputMappings.getKey(keyCode, scanCode);
|
||||
if (this.minecraft.options.keyInventory.isActiveAndMatches(input)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
super.init();
|
||||
terminalWidget.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose() {
|
||||
super.onClose();
|
||||
terminalWidget.onClose();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
private final class ComputerTerminalWidget extends AbstractTerminalWidget {
|
||||
public ComputerTerminalWidget(final Terminal terminal) {
|
||||
super(ComputerTerminalScreen.this, terminal);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isRunning() {
|
||||
return menu.getComputer().getVirtualMachine().isRunning();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addButton(final Widget widget) {
|
||||
ComputerTerminalScreen.this.addButton(widget);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendPowerStateToServer(final boolean value) {
|
||||
Network.INSTANCE.sendToServer(new ComputerPowerMessage(menu.getComputer(), value));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendTerminalInputToServer(final ByteBuffer input) {
|
||||
Network.INSTANCE.sendToServer(new ComputerTerminalInputMessage(menu.getComputer(), input));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,121 +2,29 @@ package li.cil.oc2.client.gui;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import li.cil.oc2.common.container.RobotTerminalContainer;
|
||||
import li.cil.oc2.common.network.Network;
|
||||
import li.cil.oc2.common.network.message.RobotPowerMessage;
|
||||
import li.cil.oc2.common.network.message.RobotTerminalInputMessage;
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||
import net.minecraft.client.gui.widget.Widget;
|
||||
import net.minecraft.client.util.InputMappings;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public final class RobotTerminalScreen extends ContainerScreen<RobotTerminalContainer> {
|
||||
private static final int SLOTS_X = (AbstractTerminalWidget.WIDTH - Sprites.HOTBAR.width) / 2;
|
||||
private static final int SLOTS_Y = AbstractTerminalWidget.HEIGHT - 1;
|
||||
|
||||
private final RobotTerminalWidget terminalWidget;
|
||||
public final class RobotTerminalScreen extends AbstractMachineTerminalScreen<RobotTerminalContainer> {
|
||||
private static final int SLOTS_X = (AbstractMachineTerminalWidget.WIDTH - Sprites.HOTBAR.width) / 2;
|
||||
private static final int SLOTS_Y = AbstractMachineTerminalWidget.HEIGHT - 1;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public RobotTerminalScreen(final RobotTerminalContainer container, final PlayerInventory playerInventory, final ITextComponent title) {
|
||||
super(container, playerInventory, title);
|
||||
this.terminalWidget = new RobotTerminalWidget(container.getRobot().getTerminal());
|
||||
imageWidth = AbstractTerminalWidget.WIDTH;
|
||||
imageHeight = AbstractTerminalWidget.HEIGHT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) {
|
||||
Sprites.HOTBAR.draw(matrixStack, leftPos + SLOTS_X, topPos + SLOTS_Y);
|
||||
terminalWidget.renderBackground(matrixStack, mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderLabels(final MatrixStack matrixStack, final int mouseX, final int mouseY) {
|
||||
|
||||
super.renderBg(matrixStack, partialTicks, mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) {
|
||||
terminalWidget.setEnergyInfo(menu.getEnergy(), menu.getEnergyCapacity(), menu.getEnergyConsumption());
|
||||
|
||||
renderBackground(matrixStack);
|
||||
super.render(matrixStack, mouseX, mouseY, partialTicks);
|
||||
terminalWidget.render(matrixStack, mouseX, mouseY, menu.getRobot().getVirtualMachine().getBootError());
|
||||
RobotContainerScreen.renderSelection(matrixStack, menu.getRobot().getSelectedSlot(), leftPos + SLOTS_X + 4, topPos + SLOTS_Y + 4, 12);
|
||||
renderTooltip(matrixStack, mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
terminalWidget.tick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean charTyped(final char ch, final int modifiers) {
|
||||
return terminalWidget.charTyped(ch, modifiers) ||
|
||||
super.charTyped(ch, modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) {
|
||||
if (terminalWidget.keyPressed(keyCode, scanCode, modifiers)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Don't close with inventory binding since we usually want to use that as terminal input
|
||||
// even without input capture enabled.
|
||||
final InputMappings.Input input = InputMappings.getKey(keyCode, scanCode);
|
||||
if (this.minecraft.options.keyInventory.isActiveAndMatches(input)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
super.init();
|
||||
terminalWidget.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose() {
|
||||
super.onClose();
|
||||
terminalWidget.onClose();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
private final class RobotTerminalWidget extends AbstractTerminalWidget {
|
||||
public RobotTerminalWidget(final Terminal terminal) {
|
||||
super(RobotTerminalScreen.this, terminal);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isRunning() {
|
||||
return menu.getRobot().getVirtualMachine().isRunning();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addButton(final Widget widget) {
|
||||
RobotTerminalScreen.this.addButton(widget);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendPowerStateToServer(final boolean value) {
|
||||
Network.INSTANCE.sendToServer(new RobotPowerMessage(menu.getRobot(), value));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void sendTerminalInputToServer(final ByteBuffer input) {
|
||||
Network.INSTANCE.sendToServer(new RobotTerminalInputMessage(menu.getRobot(), input));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,9 +30,8 @@ public final class Sprites {
|
||||
public static final Sprite POWER_BUTTON_BASE = new Sprite(POWER_BUTTON_TEXTURE, 12, 12, 15, 1);
|
||||
public static final Sprite POWER_BUTTON_PRESSED = new Sprite(POWER_BUTTON_TEXTURE, 12, 12, 29, 1);
|
||||
|
||||
public static final Sprite INVENTORY_BUTTON_ACTIVE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 1, 1);
|
||||
public static final Sprite INVENTORY_BUTTON_BASE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 15, 1);
|
||||
public static final Sprite INVENTORY_BUTTON_PRESSED = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 29, 1);
|
||||
public static final Sprite INVENTORY_BUTTON_INACTIVE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 1, 1);
|
||||
public static final Sprite INVENTORY_BUTTON_ACTIVE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 15, 1);
|
||||
|
||||
public static final Sprite CONFIRM_PRESSED = new Sprite(CONFIRM_BUTTON_TEXTURE, 12, 12, 14, 1);
|
||||
public static final Sprite CONFIRM_BASE = new Sprite(CONFIRM_BUTTON_TEXTURE, 12, 12, 1, 1);
|
||||
|
||||
@@ -22,5 +22,5 @@ public final class Textures {
|
||||
public static final Texture ENERGY_TEXTURE = new Texture("textures/gui/widget/energy.png", 24, 26);
|
||||
public static final Texture POWER_BUTTON_TEXTURE = new Texture("textures/gui/widget/power_button.png", 42, 14);
|
||||
public static final Texture INPUT_BUTTON_TEXTURE = new Texture("textures/gui/widget/input_button.png", 42, 14);
|
||||
public static final Texture INVENTORY_BUTTON_TEXTURE = new Texture("textures/gui/widget/inventory_button.png", 42, 14);
|
||||
public static final Texture INVENTORY_BUTTON_TEXTURE = new Texture("textures/gui/widget/inventory_button.png", 28, 14);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package li.cil.oc2.common.container;
|
||||
|
||||
import li.cil.oc2.common.vm.VirtualMachine;
|
||||
import net.minecraft.inventory.container.ContainerType;
|
||||
import net.minecraft.util.IIntArray;
|
||||
import net.minecraft.util.IntArray;
|
||||
|
||||
public abstract class AbstractMachineContainer extends AbstractContainer {
|
||||
private static final int ENERGY_INFO_SIZE = 3;
|
||||
|
||||
public static final int ENERGY_STORED_INDEX = 0;
|
||||
public static final int ENERGY_CAPACITY_INDEX = 1;
|
||||
public static final int ENERGY_CONSUMPTION_INDEX = 2;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
private final IIntArray energyInfo;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
protected AbstractMachineContainer(final ContainerType<?> type, final int id, final IIntArray energyInfo) {
|
||||
super(type, id);
|
||||
this.energyInfo = energyInfo;
|
||||
|
||||
checkContainerDataCount(energyInfo, ENERGY_INFO_SIZE);
|
||||
addDataSlots(energyInfo);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public abstract VirtualMachine getVirtualMachine();
|
||||
|
||||
public abstract void sendPowerStateToServer(final boolean value);
|
||||
|
||||
public int getEnergy() {
|
||||
return energyInfo.get(ENERGY_STORED_INDEX);
|
||||
}
|
||||
|
||||
public int getEnergyCapacity() {
|
||||
return energyInfo.get(ENERGY_CAPACITY_INDEX);
|
||||
}
|
||||
|
||||
public int getEnergyConsumption() {
|
||||
return energyInfo.get(ENERGY_CONSUMPTION_INDEX);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
protected static IIntArray createEnergyInfo() {
|
||||
return new IntArray(ENERGY_INFO_SIZE);
|
||||
}
|
||||
}
|
||||
@@ -1,47 +1,19 @@
|
||||
package li.cil.oc2.common.container;
|
||||
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import net.minecraft.inventory.container.ContainerType;
|
||||
import net.minecraft.util.IIntArray;
|
||||
import net.minecraft.util.IntArray;
|
||||
|
||||
public abstract class AbstractMachineTerminalContainer extends AbstractContainer {
|
||||
private static final int ENERGY_INFO_SIZE = 3;
|
||||
|
||||
public static final int ENERGY_STORED_INDEX = 0;
|
||||
public static final int ENERGY_CAPACITY_INDEX = 1;
|
||||
public static final int ENERGY_CONSUMPTION_INDEX = 2;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
private final IIntArray energyInfo;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public abstract class AbstractMachineTerminalContainer extends AbstractMachineContainer {
|
||||
protected AbstractMachineTerminalContainer(final ContainerType<?> type, final int id, final IIntArray energyInfo) {
|
||||
super(type, id);
|
||||
this.energyInfo = energyInfo;
|
||||
|
||||
checkContainerDataCount(energyInfo, ENERGY_INFO_SIZE);
|
||||
addDataSlots(energyInfo);
|
||||
super(type, id, energyInfo);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public int getEnergy() {
|
||||
return energyInfo.get(ENERGY_STORED_INDEX);
|
||||
}
|
||||
public abstract Terminal getTerminal();
|
||||
|
||||
public int getEnergyCapacity() {
|
||||
return energyInfo.get(ENERGY_CAPACITY_INDEX);
|
||||
}
|
||||
|
||||
public int getEnergyConsumption() {
|
||||
return energyInfo.get(ENERGY_CONSUMPTION_INDEX);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
protected static IIntArray createEnergyInfo() {
|
||||
return new IntArray(3);
|
||||
}
|
||||
public abstract void sendTerminalInputToServer(final ByteBuffer input);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package li.cil.oc2.common.container;
|
||||
|
||||
import li.cil.oc2.common.block.Blocks;
|
||||
import li.cil.oc2.common.network.Network;
|
||||
import li.cil.oc2.common.network.message.ComputerPowerMessage;
|
||||
import li.cil.oc2.common.network.message.ComputerTerminalInputMessage;
|
||||
import li.cil.oc2.common.tileentity.ComputerTileEntity;
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import li.cil.oc2.common.vm.VirtualMachine;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
@@ -11,6 +16,7 @@ import net.minecraft.util.IWorldPosCallable;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public final class ComputerTerminalContainer extends AbstractMachineTerminalContainer {
|
||||
@Nullable
|
||||
@@ -38,8 +44,24 @@ public final class ComputerTerminalContainer extends AbstractMachineTerminalCont
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public ComputerTileEntity getComputer() {
|
||||
return computer;
|
||||
@Override
|
||||
public VirtualMachine getVirtualMachine() {
|
||||
return computer.getVirtualMachine();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPowerStateToServer(final boolean value) {
|
||||
Network.INSTANCE.sendToServer(new ComputerPowerMessage(computer, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Terminal getTerminal() {
|
||||
return computer.getTerminal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendTerminalInputToServer(final ByteBuffer input) {
|
||||
Network.INSTANCE.sendToServer(new ComputerTerminalInputMessage(computer, input));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package li.cil.oc2.common.container;
|
||||
|
||||
import li.cil.oc2.client.gui.AbstractTerminalWidget;
|
||||
import li.cil.oc2.client.gui.AbstractMachineTerminalWidget;
|
||||
import li.cil.oc2.common.entity.RobotEntity;
|
||||
import li.cil.oc2.common.network.Network;
|
||||
import li.cil.oc2.common.network.message.RobotPowerMessage;
|
||||
import li.cil.oc2.common.network.message.RobotTerminalInputMessage;
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import li.cil.oc2.common.vm.VirtualMachine;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
@@ -11,6 +16,7 @@ import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public final class RobotTerminalContainer extends AbstractMachineTerminalContainer {
|
||||
@Nullable
|
||||
@@ -35,8 +41,8 @@ public final class RobotTerminalContainer extends AbstractMachineTerminalContain
|
||||
|
||||
final ItemStackHandler inventory = robot.getInventory();
|
||||
for (int slot = 0; slot < inventory.getSlots(); slot++) {
|
||||
final int x = (AbstractTerminalWidget.WIDTH - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE;
|
||||
addSlot(new SlotItemHandler(inventory, slot, x, AbstractTerminalWidget.HEIGHT + 4));
|
||||
final int x = (AbstractMachineTerminalWidget.WIDTH - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE;
|
||||
addSlot(new SlotItemHandler(inventory, slot, x, AbstractMachineTerminalWidget.HEIGHT + 4));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +52,26 @@ public final class RobotTerminalContainer extends AbstractMachineTerminalContain
|
||||
return robot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualMachine getVirtualMachine() {
|
||||
return robot.getVirtualMachine();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPowerStateToServer(final boolean value) {
|
||||
Network.INSTANCE.sendToServer(new RobotPowerMessage(robot, value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Terminal getTerminal() {
|
||||
return robot.getTerminal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendTerminalInputToServer(final ByteBuffer input) {
|
||||
Network.INSTANCE.sendToServer(new RobotTerminalInputMessage(robot, input));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stillValid(final PlayerEntity player) {
|
||||
return robot.isAlive() && robot.closerThan(player, 8);
|
||||
|
||||
@@ -471,11 +471,11 @@ public final class RobotEntity extends Entity implements Robot {
|
||||
@Override
|
||||
public int get(final int index) {
|
||||
switch (index) {
|
||||
case AbstractMachineTerminalContainer.ENERGY_STORED_INDEX:
|
||||
case AbstractMachineContainer.ENERGY_STORED_INDEX:
|
||||
return energy.getEnergyStored();
|
||||
case AbstractMachineTerminalContainer.ENERGY_CAPACITY_INDEX:
|
||||
case AbstractMachineContainer.ENERGY_CAPACITY_INDEX:
|
||||
return energy.getMaxEnergyStored();
|
||||
case AbstractMachineTerminalContainer.ENERGY_CONSUMPTION_INDEX:
|
||||
case AbstractMachineContainer.ENERGY_CONSUMPTION_INDEX:
|
||||
return virtualMachine.busController.getEnergyConsumption();
|
||||
default:
|
||||
return 0;
|
||||
|
||||
@@ -15,10 +15,7 @@ import li.cil.oc2.common.bus.TileEntityDeviceBusElement;
|
||||
import li.cil.oc2.common.bus.device.util.BlockDeviceInfo;
|
||||
import li.cil.oc2.common.bus.device.util.Devices;
|
||||
import li.cil.oc2.common.capabilities.Capabilities;
|
||||
import li.cil.oc2.common.container.AbstractMachineTerminalContainer;
|
||||
import li.cil.oc2.common.container.ComputerInventoryContainer;
|
||||
import li.cil.oc2.common.container.ComputerTerminalContainer;
|
||||
import li.cil.oc2.common.container.DeviceItemStackHandler;
|
||||
import li.cil.oc2.common.container.*;
|
||||
import li.cil.oc2.common.energy.FixedEnergyStorage;
|
||||
import li.cil.oc2.common.network.Network;
|
||||
import li.cil.oc2.common.network.message.ComputerBootErrorMessage;
|
||||
@@ -132,11 +129,11 @@ public final class ComputerTileEntity extends AbstractTileEntity implements ITic
|
||||
@Override
|
||||
public int get(final int index) {
|
||||
switch (index) {
|
||||
case AbstractMachineTerminalContainer.ENERGY_STORED_INDEX:
|
||||
case AbstractMachineContainer.ENERGY_STORED_INDEX:
|
||||
return energy.getEnergyStored();
|
||||
case AbstractMachineTerminalContainer.ENERGY_CAPACITY_INDEX:
|
||||
case AbstractMachineContainer.ENERGY_CAPACITY_INDEX:
|
||||
return energy.getMaxEnergyStored();
|
||||
case AbstractMachineTerminalContainer.ENERGY_CONSUMPTION_INDEX:
|
||||
case AbstractMachineContainer.ENERGY_CONSUMPTION_INDEX:
|
||||
return virtualMachine.busController.getEnergyConsumption();
|
||||
default:
|
||||
return 0;
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
Reference in New Issue
Block a user