diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java new file mode 100644 index 00000000..af566129 --- /dev/null +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java @@ -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 extends ContainerScreen { + 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(); + } +} diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalWidget.java similarity index 75% rename from src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java rename to src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalWidget.java index 15c31dd4..8f32b7e4 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalWidget.java @@ -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 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) { diff --git a/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java index b3d47e6d..6bd2c45b 100644 --- a/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java @@ -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 { - private final ComputerTerminalWidget terminalWidget; - - /////////////////////////////////////////////////////////////////// - +public final class ComputerTerminalScreen extends AbstractMachineTerminalScreen { 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)); - } } } diff --git a/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java index fd65e264..1ddfefec 100644 --- a/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java @@ -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 { - 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 { + 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)); - } - } } diff --git a/src/main/java/li/cil/oc2/client/gui/Sprites.java b/src/main/java/li/cil/oc2/client/gui/Sprites.java index 09cc223f..58c92a3c 100644 --- a/src/main/java/li/cil/oc2/client/gui/Sprites.java +++ b/src/main/java/li/cil/oc2/client/gui/Sprites.java @@ -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); diff --git a/src/main/java/li/cil/oc2/client/gui/Textures.java b/src/main/java/li/cil/oc2/client/gui/Textures.java index 6f0619de..042d5268 100644 --- a/src/main/java/li/cil/oc2/client/gui/Textures.java +++ b/src/main/java/li/cil/oc2/client/gui/Textures.java @@ -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); } diff --git a/src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java b/src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java new file mode 100644 index 00000000..36fe15a0 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java @@ -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); + } +} diff --git a/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java index 0818caed..a2bc18db 100644 --- a/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java @@ -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); } diff --git a/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java index 699234bd..c92643b5 100644 --- a/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java @@ -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 diff --git a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java index e8eab262..62e9a1b2 100644 --- a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java @@ -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); diff --git a/src/main/java/li/cil/oc2/common/entity/RobotEntity.java b/src/main/java/li/cil/oc2/common/entity/RobotEntity.java index ef77d372..24047210 100644 --- a/src/main/java/li/cil/oc2/common/entity/RobotEntity.java +++ b/src/main/java/li/cil/oc2/common/entity/RobotEntity.java @@ -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; diff --git a/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java b/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java index 061b6b41..3d4e9777 100644 --- a/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java +++ b/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java @@ -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; diff --git a/src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png b/src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png deleted file mode 100644 index dc71c43d..00000000 Binary files a/src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png and /dev/null differ diff --git a/src/main/resources/assets/oc2/textures/gui/widget/inventory_button.png b/src/main/resources/assets/oc2/textures/gui/widget/inventory_button.png new file mode 100644 index 00000000..10abf69f Binary files /dev/null and b/src/main/resources/assets/oc2/textures/gui/widget/inventory_button.png differ