blob: c6f578e673c6336b6d937d139426ebca0b65d0e1 [file] [log] [blame] [raw]
package li.cil.oc.client.gui
import java.lang.Iterable
import java.text.DecimalFormat
import java.util
import codechicken.nei.VisiblityData
import codechicken.nei.api.INEIGuiHandler
import codechicken.nei.api.TaggedInventoryArea
import cpw.mods.fml.common.Optional
import li.cil.oc.Localization
import li.cil.oc.client.Textures
import li.cil.oc.common.container
import li.cil.oc.common.tileentity
import li.cil.oc.integration.Mods
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.inventory.GuiContainer
import net.minecraft.client.renderer.Tessellator
import net.minecraft.entity.player.InventoryPlayer
import net.minecraft.item.ItemStack
import org.lwjgl.opengl.GL11
import org.lwjgl.util.Rectangle
@Optional.Interface(iface = "codechicken.nei.api.INEIGuiHandler", modid = Mods.IDs.NotEnoughItems)
class Relay(playerInventory: InventoryPlayer, val relay: tileentity.Relay) extends DynamicGuiContainer(new container.Relay(playerInventory, relay)) with INEIGuiHandler {
private val format = new DecimalFormat("#.##hz")
private val tabPosition = new Rectangle(xSize, 10, 23, 26)
override protected def drawSecondaryBackgroundLayer(): Unit = {
super.drawSecondaryBackgroundLayer()
// Tab background.
GL11.glColor4f(1, 1, 1, 1)
Minecraft.getMinecraft.getTextureManager.bindTexture(Textures.guiUpgradeTab)
val x = windowX + tabPosition.getX
val y = windowY + tabPosition.getY
val w = tabPosition.getWidth
val h = tabPosition.getHeight
val t = Tessellator.instance
t.startDrawingQuads()
t.addVertexWithUV(x, y + h, zLevel, 0, 1)
t.addVertexWithUV(x + w, y + h, zLevel, 1, 1)
t.addVertexWithUV(x + w, y, zLevel, 1, 0)
t.addVertexWithUV(x, y, zLevel, 0, 0)
t.draw()
}
override def mouseClicked(mouseX: Int, mouseY: Int, button: Int): Unit = {
// So MC doesn't throw away the item in the upgrade slot when we're trying to pick it up...
val originalWidth = xSize
try {
xSize += tabPosition.getWidth
super.mouseClicked(mouseX, mouseY, button)
}
finally {
xSize = originalWidth
}
}
override def mouseMovedOrUp(mouseX: Int, mouseY: Int, button: Int): Unit = {
// So MC doesn't throw away the item in the upgrade slot when we're trying to pick it up...
val originalWidth = xSize
try {
xSize += tabPosition.getWidth
super.mouseMovedOrUp(mouseX, mouseY, button)
}
finally {
xSize = originalWidth
}
}
override def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) = {
super.drawSecondaryForegroundLayer(mouseX, mouseY)
fontRendererObj.drawString(
Localization.localizeImmediately(relay.getInventoryName),
8, 6, 0x404040)
fontRendererObj.drawString(
Localization.Switch.TransferRate,
14, 20, 0x404040)
fontRendererObj.drawString(
Localization.Switch.PacketsPerCycle,
14, 39, 0x404040)
fontRendererObj.drawString(
Localization.Switch.QueueSize,
14, 58, 0x404040)
fontRendererObj.drawString(
format.format(20f / inventoryContainer.relayDelay),
108, 20, 0x404040)
fontRendererObj.drawString(
inventoryContainer.packetsPerCycleAvg + " / " + inventoryContainer.relayAmount,
108, 39, thresholdBasedColor(inventoryContainer.packetsPerCycleAvg, math.ceil(inventoryContainer.relayAmount / 2f).toInt, inventoryContainer.relayAmount))
fontRendererObj.drawString(
inventoryContainer.queueSize + " / " + inventoryContainer.maxQueueSize,
108, 58, thresholdBasedColor(inventoryContainer.queueSize, inventoryContainer.maxQueueSize / 2, inventoryContainer.maxQueueSize))
}
private def thresholdBasedColor(value: Int, yellow: Int, red: Int) = {
if (value < yellow) 0x009900
else if (value < red) 0x999900
else 0x990000
}
@Optional.Method(modid = Mods.IDs.NotEnoughItems)
override def modifyVisiblity(gui: GuiContainer, currentVisibility: VisiblityData): VisiblityData = null
@Optional.Method(modid = Mods.IDs.NotEnoughItems)
override def getItemSpawnSlots(gui: GuiContainer, stack: ItemStack): Iterable[Integer] = null
@Optional.Method(modid = Mods.IDs.NotEnoughItems)
override def getInventoryAreas(gui: GuiContainer): util.List[TaggedInventoryArea] = null
@Optional.Method(modid = Mods.IDs.NotEnoughItems)
override def handleDragNDrop(gui: GuiContainer, mouseX: Int, mouseY: Int, stack: ItemStack, button: Int): Boolean = false
@Optional.Method(modid = Mods.IDs.NotEnoughItems)
override def hideItemPanelSlot(gui: GuiContainer, x: Int, y: Int, w: Int, h: Int): Boolean = {
new Rectangle(x - windowX, y - windowY, w, h).intersects(tabPosition)
}
}