From 9f91e0886e94118dfdf2b6a92b4997c323fad3f2 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Mon, 11 Aug 2014 15:15:09 -0400 Subject: [PATCH] Gave the Upgrade Management GUI a scrollbar to allow for more than 4 upgrade types to be present in a single machine --- .../client/gui/GuiDigitalMinerConfig.java | 10 +- .../client/gui/GuiLogisticalSorter.java | 10 +- .../client/gui/GuiUpgradeManagement.java | 100 +++++++++++++++--- .../mekanism/gui/GuiUpgradeManagement.png | Bin 5157 -> 5248 bytes 4 files changed, 102 insertions(+), 18 deletions(-) diff --git a/src/main/java/mekanism/client/gui/GuiDigitalMinerConfig.java b/src/main/java/mekanism/client/gui/GuiDigitalMinerConfig.java index 9314e43e1..e1006897a 100644 --- a/src/main/java/mekanism/client/gui/GuiDigitalMinerConfig.java +++ b/src/main/java/mekanism/client/gui/GuiDigitalMinerConfig.java @@ -197,8 +197,14 @@ public class GuiDigitalMinerConfig extends GuiMekanism if(xAxis >= 154 && xAxis <= 166 && yAxis >= getScroll()+18 && yAxis <= getScroll()+18+15) { - dragOffset = yAxis - (getScroll()+18); - isDragging = true; + if(tileEntity.filters.size()>4) + { + dragOffset = yAxis - (getScroll()+18); + isDragging = true; + } + else { + scroll = 0; + } } for(int i = 0; i < 4; i++) diff --git a/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java b/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java index 3e1ce30fa..4c8edd4fc 100644 --- a/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java +++ b/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java @@ -186,8 +186,14 @@ public class GuiLogisticalSorter extends GuiMekanism { if(xAxis >= 154 && xAxis <= 166 && yAxis >= getScroll()+18 && yAxis <= getScroll()+18+15) { - dragOffset = yAxis - (getScroll()+18); - isDragging = true; + if(tileEntity.filters.size()>4) + { + dragOffset = yAxis - (getScroll()+18); + isDragging = true; + } + else { + scroll = 0; + } } for(int i = 0; i < 4; i++) diff --git a/src/main/java/mekanism/client/gui/GuiUpgradeManagement.java b/src/main/java/mekanism/client/gui/GuiUpgradeManagement.java index d5fa1fc43..3e77cba26 100644 --- a/src/main/java/mekanism/client/gui/GuiUpgradeManagement.java +++ b/src/main/java/mekanism/client/gui/GuiUpgradeManagement.java @@ -29,6 +29,12 @@ public class GuiUpgradeManagement extends GuiMekanism public Upgrade selectedType; + public boolean isDragging = false; + + public int dragOffset = 0; + + public float scroll; + public GuiUpgradeManagement(InventoryPlayer inventory, IUpgradeTile tile) { super(new ContainerUpgradeManagement(inventory, tile)); @@ -41,8 +47,12 @@ public class GuiUpgradeManagement extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); + mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiUpgradeManagement.png")); + GL11.glColor4f(1, 1, 1, 1); + drawTexturedModalRect(84, 8+getScroll(), 202, 0, 4, 4); + fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040); - fontRendererObj.drawString(MekanismUtils.localize("gui.upgrades.supported") + ":", 26, 60, 0x404040); + fontRendererObj.drawString(MekanismUtils.localize("gui.upgrades.supported") + ":", 26, 59, 0x404040); if(selectedType == null) { @@ -66,22 +76,31 @@ public class GuiUpgradeManagement extends GuiMekanism for(Upgrade upgrade : tileEntity.getComponent().getSupportedTypes()) { - renderUpgrade(upgrade, 80 + (rendered++*12), 58, 0.8F, true); + renderUpgrade(upgrade, 80 + (rendered++*12), 57, 0.8F, true); } - int counter = 0; + Upgrade[] upgrades = getCurrentUpgrades().toArray(new Upgrade[getCurrentUpgrades().size()]); - for(Upgrade upgrade : getCurrentUpgrades()) + for(int i = 0; i < 4; i++) { + int index = getUpgradeIndex()+i; + + if(index > upgrades.length-1) + { + break; + } + + Upgrade upgrade = upgrades[index]; + int xPos = 25; - int yPos = 7 + (counter++*12); + int yPos = 7 + (i++*12); int yRender = 0; fontRendererObj.drawString(upgrade.getName(), xPos + 12, yPos + 2, 0x404040); renderUpgrade(upgrade, xPos + 2, yPos + 2, 0.5F, true); - if(xAxis >= xPos && xAxis <= xPos+64 && yAxis >= yPos && yAxis <= yPos+12) + if(xAxis >= xPos && xAxis <= xPos+58 && yAxis >= yPos && yAxis <= yPos+12) { func_146283_a(MekanismUtils.splitLines(upgrade.getDescription()), xAxis, yAxis); } @@ -131,14 +150,14 @@ public class GuiUpgradeManagement extends GuiMekanism if(selectedType == null) { - drawTexturedModalRect(guiWidth + 136, guiHeight + 58, 176 + 14, 24, 12, 12); + drawTexturedModalRect(guiWidth + 136, guiHeight + 57, 176 + 14, 24, 12, 12); } - else if(xAxis >= 136 && xAxis <= 148 && yAxis >= 58 && yAxis <= 70) + else if(xAxis >= 136 && xAxis <= 148 && yAxis >= 57 && yAxis <= 69) { - drawTexturedModalRect(guiWidth + 136, guiHeight + 58, 176 + 14, 0, 12, 12); + drawTexturedModalRect(guiWidth + 136, guiHeight + 57, 176 + 14, 0, 12, 12); } else { - drawTexturedModalRect(guiWidth + 136, guiHeight + 58, 176 + 14, 12, 12, 12); + drawTexturedModalRect(guiWidth + 136, guiHeight + 57, 176 + 14, 12, 12, 12); } int displayInt = tileEntity.getComponent().getScaledUpgradeProgress(14); @@ -161,7 +180,7 @@ public class GuiUpgradeManagement extends GuiMekanism { yRender = 166 + 24; } - else if(xAxis >= xPos && xAxis <= xPos+64 && yAxis >= yPos && yAxis <= yPos+12) + else if(xAxis >= xPos && xAxis <= xPos+58 && yAxis >= yPos && yAxis <= yPos+12) { yRender = 166; } @@ -170,7 +189,7 @@ public class GuiUpgradeManagement extends GuiMekanism } MekanismRenderer.color(upgrade.getColor(), 1.0F, 2.5F); - drawTexturedModalRect(guiWidth + xPos, guiHeight + yPos, 0, yRender, 64, 12); + drawTexturedModalRect(guiWidth + xPos, guiHeight + yPos, 0, yRender, 58, 12); MekanismRenderer.resetColor(); } @@ -183,6 +202,47 @@ public class GuiUpgradeManagement extends GuiMekanism return tileEntity.getComponent().getInstalledTypes(); } + public int getScroll() + { + return Math.max(Math.min((int)(scroll*42), 42), 0); + } + + public int getUpgradeIndex() + { + if(getCurrentUpgrades().size() <= 4) + { + return 0; + } + + return (int)((getCurrentUpgrades().size()*scroll) - ((4F/(float)getCurrentUpgrades().size()))*scroll); + } + + @Override + protected void mouseClickMove(int mouseX, int mouseY, int button, long ticks) + { + super.mouseClickMove(mouseX, mouseY, button, ticks); + + int xAxis = (mouseX - (width - xSize) / 2); + int yAxis = (mouseY - (height - ySize) / 2); + + if(isDragging) + { + scroll = Math.min(Math.max((float)(yAxis-8-dragOffset)/42F, 0), 1); + } + } + + @Override + protected void mouseMovedOrUp(int mouseX, int mouseY, int type) + { + super.mouseMovedOrUp(mouseX, mouseY, type); + + if(type == 0 && isDragging) + { + dragOffset = 0; + isDragging = false; + } + } + @Override protected void mouseClicked(int mouseX, int mouseY, int button) { @@ -195,6 +255,18 @@ public class GuiUpgradeManagement extends GuiMekanism if(button == 0) { + if(xAxis >= 84 && xAxis <= 88 && yAxis >= getScroll()+8 && yAxis <= getScroll()+8+4) + { + if(getCurrentUpgrades().size()>4) + { + dragOffset = yAxis - (getScroll()+8); + isDragging = true; + } + else { + scroll = 0; + } + } + if(xAxis >= 6 && xAxis <= 20 && yAxis >= 6 && yAxis <= 20) { int guiId = MachineType.get(tile.getBlockType(), tile.getBlockMetadata()).guiId; @@ -202,7 +274,7 @@ public class GuiUpgradeManagement extends GuiMekanism Mekanism.packetHandler.sendToServer(new SimpleGuiMessage(Coord4D.get(tile), guiId)); } - if(selectedType != null && xAxis >= 136 && xAxis <= 148 && yAxis >= 58 && yAxis <= 70) + if(selectedType != null && xAxis >= 136 && xAxis <= 148 && yAxis >= 57 && yAxis <= 69) { SoundHandler.playSound("gui.button.press"); Mekanism.packetHandler.sendToServer(new RemoveUpgradeMessage(Coord4D.get(tile), selectedType.ordinal())); @@ -216,7 +288,7 @@ public class GuiUpgradeManagement extends GuiMekanism int yPos = 7 + (counter++*12); int yRender = 0; - if(xAxis >= xPos && xAxis <= xPos+64 && yAxis >= yPos && yAxis <= yPos+12) + if(xAxis >= xPos && xAxis <= xPos+58 && yAxis >= yPos && yAxis <= yPos+12) { selectedType = upgrade; break; diff --git a/src/main/resources/assets/mekanism/gui/GuiUpgradeManagement.png b/src/main/resources/assets/mekanism/gui/GuiUpgradeManagement.png index 1feb0488ff43545ebe7a739176e3a39b0f84054d..35aee32c44af9b995e6e12081475d8fcf8cc89da 100644 GIT binary patch delta 3971 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 delta 3882 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