From 09f1a04764cb09a35d127f4155fee27e87f21689 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Wed, 4 Mar 2015 18:14:36 -0500 Subject: [PATCH] Doubled filter max string length from 12 characters to 24 characters, allows hyphens and spaces in filters, developed and integrated new fancy auto-scaling text renderer to prevent text overlap --- .../mekanism/client/gui/GuiDynamicTank.java | 4 ++-- .../java/mekanism/client/gui/GuiGasTank.java | 2 +- .../mekanism/client/gui/GuiMModIDFilter.java | 13 ++++++----- .../client/gui/GuiMOreDictFilter.java | 13 ++++++----- .../java/mekanism/client/gui/GuiMekanism.java | 23 ++++++++++++++++++- .../mekanism/client/gui/GuiTModIDFilter.java | 13 ++++++----- .../client/gui/GuiTOreDictFilter.java | 8 +++---- .../client/render/tileentity/RenderBin.java | 6 ++--- .../transporter/TransporterFilter.java | 11 ++++++--- .../mekanism/common/util/MekanismUtils.java | 1 - 10 files changed, 60 insertions(+), 34 deletions(-) diff --git a/src/main/java/mekanism/client/gui/GuiDynamicTank.java b/src/main/java/mekanism/client/gui/GuiDynamicTank.java index 117fed927..dc7b171f2 100644 --- a/src/main/java/mekanism/client/gui/GuiDynamicTank.java +++ b/src/main/java/mekanism/client/gui/GuiDynamicTank.java @@ -33,10 +33,10 @@ public class GuiDynamicTank extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); - fontRendererObj.drawString(tileEntity.getInventoryName(), 45, 6, 0x404040); + fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getInventoryName())/2), 6, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, (ySize - 94) + 2, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("gui.volume") + ": " + tileEntity.clientCapacity/TankUpdateProtocol.FLUID_PER_TANK, 53, 26, 0x00CD00); - fontRendererObj.drawString(tileEntity.structure.fluidStored != null ? LangUtils.localizeFluidStack(tileEntity.structure.fluidStored) + ":" : MekanismUtils.localize("gui.noFluid"), 53, 44, 0x00CD00); + renderScaledText(tileEntity.structure.fluidStored != null ? LangUtils.localizeFluidStack(tileEntity.structure.fluidStored) + ":" : MekanismUtils.localize("gui.noFluid"), 53, 44, 0x00CD00, 74); if(tileEntity.structure.fluidStored != null) { diff --git a/src/main/java/mekanism/client/gui/GuiGasTank.java b/src/main/java/mekanism/client/gui/GuiGasTank.java index a2aa46de5..3aca80c51 100644 --- a/src/main/java/mekanism/client/gui/GuiGasTank.java +++ b/src/main/java/mekanism/client/gui/GuiGasTank.java @@ -37,7 +37,7 @@ public class GuiGasTank extends GuiMekanism fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize / 2) - (fontRendererObj.getStringWidth(tileEntity.getInventoryName()) / 2), 6, 0x404040); fontRendererObj.drawString(capacityInfo, 45, 40, 0x404040); - fontRendererObj.drawString(MekanismUtils.localize("gui.gas") + ": " + (tileEntity.gasTank.getGas() != null ? tileEntity.gasTank.getGas().getGas().getLocalizedName() : MekanismUtils.localize("gui.none")), 45, 49, 0x404040); + renderScaledText(MekanismUtils.localize("gui.gas") + ": " + (tileEntity.gasTank.getGas() != null ? tileEntity.gasTank.getGas().getGas().getLocalizedName() : MekanismUtils.localize("gui.none")), 45, 49, 0x404040, 112); fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, ySize - 96 + 2, 0x404040); String name = chooseByMode(tileEntity.dumping, MekanismUtils.localize("gui.idle"), MekanismUtils.localize("gui.dumping"), MekanismUtils.localize("gui.dumping_excess")); diff --git a/src/main/java/mekanism/client/gui/GuiMModIDFilter.java b/src/main/java/mekanism/client/gui/GuiMModIDFilter.java index ab687fdbc..69a4919d5 100644 --- a/src/main/java/mekanism/client/gui/GuiMModIDFilter.java +++ b/src/main/java/mekanism/client/gui/GuiMModIDFilter.java @@ -8,6 +8,7 @@ import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; import mekanism.common.OreDictCache; import mekanism.common.content.miner.MModIDFilter; +import mekanism.common.content.transporter.TransporterFilter; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.network.PacketDigitalMinerGui.DigitalMinerGuiMessage; import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket; @@ -17,7 +18,6 @@ import mekanism.common.tile.TileEntityDigitalMiner; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; - import net.minecraft.block.Block; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; @@ -25,12 +25,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class GuiMModIDFilter extends GuiMekanism { @@ -93,7 +94,7 @@ public class GuiMModIDFilter extends GuiMekanism } modIDText = new GuiTextField(fontRendererObj, guiWidth + 35, guiHeight + 47, 95, 12); - modIDText.setMaxStringLength(12); + modIDText.setMaxStringLength(TransporterFilter.MAX_LENGTH); modIDText.setFocused(true); } @@ -111,7 +112,7 @@ public class GuiMModIDFilter extends GuiMekanism return; } - if(Character.isLetter(c) || Character.isDigit(c) || c == '*' || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) + if(Character.isLetter(c) || Character.isDigit(c) || TransporterFilter.SPECIAL_CHARS.contains(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) { modIDText.textboxKeyTyped(c, i); } @@ -161,7 +162,7 @@ public class GuiMModIDFilter extends GuiMekanism fontRendererObj.drawString((isNew ? MekanismUtils.localize("gui.new") : MekanismUtils.localize("gui.edit")) + " " + MekanismUtils.localize("gui.modIDFilter"), 43, 6, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("gui.status") + ": " + status, 35, 20, 0x00CD00); - fontRendererObj.drawString(MekanismUtils.localize("gui.id") + ": " + filter.modID, 35, 32, 0x00CD00); + renderScaledText(MekanismUtils.localize("gui.id") + ": " + filter.modID, 35, 32, 0x00CD00, 107); if(renderStack != null) { diff --git a/src/main/java/mekanism/client/gui/GuiMOreDictFilter.java b/src/main/java/mekanism/client/gui/GuiMOreDictFilter.java index 39d3db2e0..592d02ad5 100644 --- a/src/main/java/mekanism/client/gui/GuiMOreDictFilter.java +++ b/src/main/java/mekanism/client/gui/GuiMOreDictFilter.java @@ -8,6 +8,7 @@ import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; import mekanism.common.OreDictCache; import mekanism.common.content.miner.MOreDictFilter; +import mekanism.common.content.transporter.TransporterFilter; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.network.PacketDigitalMinerGui.DigitalMinerGuiMessage; import mekanism.common.network.PacketDigitalMinerGui.MinerGuiPacket; @@ -17,7 +18,6 @@ import mekanism.common.tile.TileEntityDigitalMiner; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; - import net.minecraft.block.Block; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; @@ -25,12 +25,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class GuiMOreDictFilter extends GuiMekanism { @@ -93,7 +94,7 @@ public class GuiMOreDictFilter extends GuiMekanism } oreDictText = new GuiTextField(fontRendererObj, guiWidth + 35, guiHeight + 47, 95, 12); - oreDictText.setMaxStringLength(12); + oreDictText.setMaxStringLength(TransporterFilter.MAX_LENGTH); oreDictText.setFocused(true); } @@ -111,7 +112,7 @@ public class GuiMOreDictFilter extends GuiMekanism return; } - if(Character.isLetter(c) || Character.isDigit(c) || c == '*' || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) + if(Character.isLetter(c) || Character.isDigit(c) || TransporterFilter.SPECIAL_CHARS.contains(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) { oreDictText.textboxKeyTyped(c, i); } @@ -161,7 +162,7 @@ public class GuiMOreDictFilter extends GuiMekanism fontRendererObj.drawString((isNew ? MekanismUtils.localize("gui.new") : MekanismUtils.localize("gui.edit")) + " " + MekanismUtils.localize("gui.oredictFilter"), 43, 6, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("gui.status") + ": " + status, 35, 20, 0x00CD00); - fontRendererObj.drawString(MekanismUtils.localize("gui.key") + ": " + filter.oreDictName, 35, 32, 0x00CD00); + renderScaledText(MekanismUtils.localize("gui.key") + ": " + filter.oreDictName, 35, 32, 0x00CD00, 107); if(renderStack != null) { diff --git a/src/main/java/mekanism/client/gui/GuiMekanism.java b/src/main/java/mekanism/client/gui/GuiMekanism.java index 5d929a4d7..c3c3ec966 100644 --- a/src/main/java/mekanism/client/gui/GuiMekanism.java +++ b/src/main/java/mekanism/client/gui/GuiMekanism.java @@ -9,7 +9,6 @@ import mekanism.common.SideData; import mekanism.common.base.IInvConfiguration; import mekanism.common.item.ItemConfigurator; import mekanism.common.tile.TileEntityContainerBlock; - import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.inventory.Container; @@ -35,6 +34,28 @@ public abstract class GuiMekanism extends GuiContainer implements IGuiWrapper super(container); tileEntity = tile; } + + public void renderScaledText(String text, int x, int y, int color, int maxX) + { + int length = fontRendererObj.getStringWidth(text); + + if(length <= maxX) + { + fontRendererObj.drawString(text, x, y, color); + } + else { + float scale = (float)maxX/length; + float reverse = 1/scale; + float yAdd = 4-(scale*8)/2F; + + GL11.glPushMatrix(); + + GL11.glScalef(scale, scale, scale); + fontRendererObj.drawString(text, (int)(x*reverse), (int)((y*reverse)+yAdd), color); + + GL11.glPopMatrix(); + } + } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) diff --git a/src/main/java/mekanism/client/gui/GuiTModIDFilter.java b/src/main/java/mekanism/client/gui/GuiTModIDFilter.java index 61c877146..37a715fba 100644 --- a/src/main/java/mekanism/client/gui/GuiTModIDFilter.java +++ b/src/main/java/mekanism/client/gui/GuiTModIDFilter.java @@ -9,6 +9,7 @@ import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; import mekanism.common.OreDictCache; import mekanism.common.content.transporter.TModIDFilter; +import mekanism.common.content.transporter.TransporterFilter; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.network.PacketEditFilter.EditFilterMessage; import mekanism.common.network.PacketLogisticalSorterGui.LogisticalSorterGuiMessage; @@ -18,18 +19,18 @@ import mekanism.common.tile.TileEntityLogisticalSorter; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import mekanism.common.util.TransporterUtils; - import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class GuiTModIDFilter extends GuiMekanism { @@ -92,7 +93,7 @@ public class GuiTModIDFilter extends GuiMekanism } modIDText = new GuiTextField(fontRendererObj, guiWidth + 35, guiHeight + 47, 95, 12); - modIDText.setMaxStringLength(12); + modIDText.setMaxStringLength(TransporterFilter.MAX_LENGTH); modIDText.setFocused(true); } @@ -110,7 +111,7 @@ public class GuiTModIDFilter extends GuiMekanism return; } - if(Character.isLetter(c) || Character.isDigit(c) || c == '*' || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) + if(Character.isLetter(c) || Character.isDigit(c) || TransporterFilter.SPECIAL_CHARS.contains(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) { modIDText.textboxKeyTyped(c, i); } @@ -160,7 +161,7 @@ public class GuiTModIDFilter extends GuiMekanism fontRendererObj.drawString((isNew ? MekanismUtils.localize("gui.new") : MekanismUtils.localize("gui.edit")) + " " + MekanismUtils.localize("gui.modIDFilter"), 43, 6, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("gui.status") + ": " + status, 35, 20, 0x00CD00); - fontRendererObj.drawString(MekanismUtils.localize("gui.id") + ": " + filter.modID, 35, 32, 0x00CD00); + renderScaledText(MekanismUtils.localize("gui.id") + ": " + filter.modID, 35, 32, 0x00CD00, 107); if(renderStack != null) { diff --git a/src/main/java/mekanism/client/gui/GuiTOreDictFilter.java b/src/main/java/mekanism/client/gui/GuiTOreDictFilter.java index a17260fe8..0822b4f99 100644 --- a/src/main/java/mekanism/client/gui/GuiTOreDictFilter.java +++ b/src/main/java/mekanism/client/gui/GuiTOreDictFilter.java @@ -9,6 +9,7 @@ import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; import mekanism.common.OreDictCache; import mekanism.common.content.transporter.TOreDictFilter; +import mekanism.common.content.transporter.TransporterFilter; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.network.PacketEditFilter.EditFilterMessage; import mekanism.common.network.PacketLogisticalSorterGui.LogisticalSorterGuiMessage; @@ -18,7 +19,6 @@ import mekanism.common.tile.TileEntityLogisticalSorter; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import mekanism.common.util.TransporterUtils; - import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.EntityPlayer; @@ -92,7 +92,7 @@ public class GuiTOreDictFilter extends GuiMekanism } oreDictText = new GuiTextField(fontRendererObj, guiWidth + 35, guiHeight + 47, 95, 12); - oreDictText.setMaxStringLength(12); + oreDictText.setMaxStringLength(TransporterFilter.MAX_LENGTH); oreDictText.setFocused(true); } @@ -110,7 +110,7 @@ public class GuiTOreDictFilter extends GuiMekanism return; } - if(Character.isLetter(c) || Character.isDigit(c) || c == '*' || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) + if(Character.isLetter(c) || Character.isDigit(c) || TransporterFilter.SPECIAL_CHARS.contains(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT) { oreDictText.textboxKeyTyped(c, i); } @@ -160,7 +160,7 @@ public class GuiTOreDictFilter extends GuiMekanism fontRendererObj.drawString((isNew ? MekanismUtils.localize("gui.new") : MekanismUtils.localize("gui.edit")) + " " + MekanismUtils.localize("gui.oredictFilter"), 43, 6, 0x404040); fontRendererObj.drawString(MekanismUtils.localize("gui.status") + ": " + status, 35, 20, 0x00CD00); - fontRendererObj.drawString(MekanismUtils.localize("gui.key") + ": " + filter.oreDictName, 35, 32, 0x00CD00); + renderScaledText(MekanismUtils.localize("gui.key") + ": " + filter.oreDictName, 35, 32, 0x00CD00, 107); if(renderStack != null) { diff --git a/src/main/java/mekanism/client/render/tileentity/RenderBin.java b/src/main/java/mekanism/client/render/tileentity/RenderBin.java index cf21f9a86..8d3d1c937 100644 --- a/src/main/java/mekanism/client/render/tileentity/RenderBin.java +++ b/src/main/java/mekanism/client/render/tileentity/RenderBin.java @@ -173,13 +173,11 @@ public class RenderBin extends TileEntitySpecialRenderer GL11.glScalef(scale, -scale, scale); GL11.glDepthMask(false); - int offsetX; - int offsetY; int realHeight = (int)Math.floor(displayHeight / scale); int realWidth = (int)Math.floor(displayWidth / scale); - offsetX = (realWidth - requiredWidth) / 2; - offsetY = (realHeight - requiredHeight) / 2; + int offsetX = (realWidth - requiredWidth) / 2; + int offsetY = (realHeight - requiredHeight) / 2; GL11.glDisable(GL11.GL_LIGHTING); fontRenderer.drawString("\u00a7f" + text, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1); diff --git a/src/main/java/mekanism/common/content/transporter/TransporterFilter.java b/src/main/java/mekanism/common/content/transporter/TransporterFilter.java index 0a69ea0ff..5dc4d0289 100644 --- a/src/main/java/mekanism/common/content/transporter/TransporterFilter.java +++ b/src/main/java/mekanism/common/content/transporter/TransporterFilter.java @@ -1,19 +1,24 @@ package mekanism.common.content.transporter; +import io.netty.buffer.ByteBuf; + import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import mekanism.api.EnumColor; import mekanism.common.util.TransporterUtils; - import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -import io.netty.buffer.ByteBuf; - public abstract class TransporterFilter { + public static final int MAX_LENGTH = 24; + + public static final List SPECIAL_CHARS = Arrays.asList('*', '-', ' '); + public EnumColor color; public abstract boolean canFilter(ItemStack itemStack); diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index a6f846caa..0302ba353 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -49,7 +49,6 @@ import mekanism.common.network.PacketElectricChest.ElectricChestPacketType; import mekanism.common.tile.TileEntityAdvancedBoundingBlock; import mekanism.common.tile.TileEntityBoundingBlock; import mekanism.common.tile.TileEntityElectricChest; - import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP;