Progress info (percent + remaining time) as progress bar tooltip in robot assembler.

This commit is contained in:
Florian Nücke 2014-05-23 13:28:26 +02:00
parent 68b9cc17c4
commit 0c6584411f
7 changed files with 50 additions and 13 deletions

View File

@ -125,6 +125,7 @@ oc:gui.Robot.TurnOn=Einschalten
oc:gui.RobotAssembler.CollectRobot=Roboter entnehmen oc:gui.RobotAssembler.CollectRobot=Roboter entnehmen
oc:gui.RobotAssembler.Complexity=Komplexität: %s/%s oc:gui.RobotAssembler.Complexity=Komplexität: %s/%s
oc:gui.RobotAssembler.InsertCase=Computergehäuse einlegen oc:gui.RobotAssembler.InsertCase=Computergehäuse einlegen
oc:gui.RobotAssembler.Progress=Fortschritt: %s (%s)
oc:gui.RobotAssembler.Run=Zusammenbauen oc:gui.RobotAssembler.Run=Zusammenbauen
oc:gui.ServerRack.None=Keine oc:gui.ServerRack.None=Keine
oc:gui.ServerRack.Back=Hinten oc:gui.ServerRack.Back=Hinten

View File

@ -125,6 +125,7 @@ oc:gui.Robot.TurnOn=Turn on
oc:gui.RobotAssembler.CollectRobot=Collect robot oc:gui.RobotAssembler.CollectRobot=Collect robot
oc:gui.RobotAssembler.Complexity=Complexity: %s/%s oc:gui.RobotAssembler.Complexity=Complexity: %s/%s
oc:gui.RobotAssembler.InsertCase=Insert a Computer Case oc:gui.RobotAssembler.InsertCase=Insert a Computer Case
oc:gui.RobotAssembler.Progress=Progress: %s (%s)
oc:gui.RobotAssembler.Run=Assemble oc:gui.RobotAssembler.Run=Assemble
oc:gui.ServerRack.None=None oc:gui.ServerRack.None=None
oc:gui.ServerRack.Back=Back oc:gui.ServerRack.Back=Back

View File

@ -6,14 +6,18 @@ local robot = {}
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- General -- General
function robot.level()
return component.robot.level()
end
function robot.name() function robot.name()
return component.robot.name() return component.robot.name()
end end
function robot.level()
if component.isAvailable("experience") then
return component.experience.level()
else
return 0
end
end
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- World -- World
@ -32,6 +36,11 @@ end
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Inventory -- Inventory
function robot.inventorySize()
return component.robot.inventorySize()
end
function robot.select(slot) function robot.select(slot)
return component.robot.select(slot) return component.robot.select(slot)
end end

View File

@ -11,14 +11,18 @@ import li.cil.oc.client.{PacketHandler => ClientPacketHandler}
import li.cil.oc.common.Proxy import li.cil.oc.common.Proxy
import li.cil.oc.server.{PacketHandler => ServerPacketHandler, CommandHandler} import li.cil.oc.server.{PacketHandler => ServerPacketHandler, CommandHandler}
@Mod(modid = "OpenComputers", modLanguage = "scala", @Mod(modid = OpenComputers.ModID, modLanguage = "scala",
/* certificateFingerprint = "@FINGERPRINT@", */ useMetadata = true) /* certificateFingerprint = OpenComputers.Fingerprint, */ useMetadata = true)
@NetworkMod(clientSideRequired = true, serverSideRequired = false, @NetworkMod(clientSideRequired = true, serverSideRequired = false,
clientPacketHandlerSpec = new SidedPacketHandler( clientPacketHandlerSpec = new SidedPacketHandler(
channels = Array("OpenComp"), packetHandler = classOf[ClientPacketHandler]), channels = Array("OpenComp"), packetHandler = classOf[ClientPacketHandler]),
serverPacketHandlerSpec = new SidedPacketHandler( serverPacketHandlerSpec = new SidedPacketHandler(
channels = Array("OpenComp"), packetHandler = classOf[ServerPacketHandler])) channels = Array("OpenComp"), packetHandler = classOf[ServerPacketHandler]))
object OpenComputers { object OpenComputers {
final val ModID = "OpenComputers"
final val Fingerprint = "@FINGERPRINT@"
val log = Logger.getLogger("OpenComputers") val log = Logger.getLogger("OpenComputers")
@SidedProxy(clientSide = "li.cil.oc.client.Proxy", serverSide = "li.cil.oc.server.Proxy") @SidedProxy(clientSide = "li.cil.oc.client.Proxy", serverSide = "li.cil.oc.server.Proxy")
@ -26,6 +30,8 @@ object OpenComputers {
var tampered: Option[FMLFingerprintViolationEvent] = None var tampered: Option[FMLFingerprintViolationEvent] = None
scala.collection.mutable.Map.empty[String, Int].keySet
// @EventHandler // @EventHandler
// def invalidFingerprint(e: FMLFingerprintViolationEvent) = tampered = Some(e) // def invalidFingerprint(e: FMLFingerprintViolationEvent) = tampered = Some(e)

View File

@ -64,15 +64,27 @@ class RobotAssembler(playerInventory: InventoryPlayer, val assembler: tileentity
StatCollector.translateToLocalFormatted(Settings.namespace + "gui.RobotAssembler.Complexity", Int.box(assembler.complexity), Int.box(assembler.maxComplexity)), StatCollector.translateToLocalFormatted(Settings.namespace + "gui.RobotAssembler.Complexity", Int.box(assembler.complexity), Int.box(assembler.maxComplexity)),
30, 94, if (assembler.complexity <= assembler.maxComplexity) 0x404040 else 0x804040) 30, 94, if (assembler.complexity <= assembler.maxComplexity) 0x404040 else 0x804040)
} }
} if (runButton.func_82252_a) {
if (runButton.func_82252_a && !assemblerContainer.isAssembling) {
val tooltip = new java.util.ArrayList[String] val tooltip = new java.util.ArrayList[String]
tooltip.add(StatCollector.translateToLocal(Settings.namespace + "gui.RobotAssembler.Run")) tooltip.add(StatCollector.translateToLocal(Settings.namespace + "gui.RobotAssembler.Run"))
drawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer) drawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer)
} }
}
else if (isPointInRegion(progressX, progressY, progressWidth, progressHeight, mouseX, mouseY)) {
val tooltip = new java.util.ArrayList[String]
val timeRemaining = formatTime(assemblerContainer.assemblyRemainingTime)
tooltip.add(StatCollector.translateToLocalFormatted(Settings.namespace + "gui.RobotAssembler.Progress", assemblerContainer.assemblyProgress.toString, timeRemaining))
copiedDrawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRenderer)
}
GL11.glPopAttrib() GL11.glPopAttrib()
} }
private def formatTime(seconds: Int) = {
// Assembly times should not / rarely exceed one hour, so this is good enough.
if (seconds < 60) "0:%02d".format(seconds)
else "%d:%02d".format(seconds / 60, seconds % 60)
}
override def drawGuiContainerBackgroundLayer(dt: Float, mouseX: Int, mouseY: Int) { override def drawGuiContainerBackgroundLayer(dt: Float, mouseX: Int, mouseY: Int) {
GL11.glColor3f(1, 1, 1) // Required under Linux. GL11.glColor3f(1, 1, 1) // Required under Linux.
super.drawGuiContainerBackgroundLayer(dt, mouseX, mouseY) super.drawGuiContainerBackgroundLayer(dt, mouseX, mouseY)

View File

@ -6,11 +6,11 @@ import li.cil.oc.common.{InventorySlots, tileentity}
import li.cil.oc.util.ItemUtils import li.cil.oc.util.ItemUtils
import net.minecraft.entity.player.InventoryPlayer import net.minecraft.entity.player.InventoryPlayer
import net.minecraft.inventory.Slot import net.minecraft.inventory.Slot
import li.cil.oc.api import li.cil.oc.{Settings, api}
import li.cil.oc.common.InventorySlots.Tier import li.cil.oc.common.InventorySlots.Tier
import li.cil.oc.client.gui.Icons import li.cil.oc.client.gui.Icons
class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.RobotAssembler) extends Player(playerInventory, assembler) { class RobotAssembler(playerInventory: InventoryPlayer, val assembler: tileentity.RobotAssembler) extends Player(playerInventory, assembler) {
// Computer case. // Computer case.
{ {
val index = inventorySlots.size val index = inventorySlots.size
@ -57,6 +57,7 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob
var isAssembling = false var isAssembling = false
var assemblyProgress = 0 var assemblyProgress = 0
var assemblyRemainingTime = 0
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
override def updateProgressBar(id: Int, value: Int) { override def updateProgressBar(id: Int, value: Int) {
@ -68,6 +69,10 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob
if (id == 1) { if (id == 1) {
assemblyProgress = value assemblyProgress = value
} }
if (id == 2) {
assemblyRemainingTime = value
}
} }
override def detectAndSendChanges() { override def detectAndSendChanges() {
@ -77,9 +82,12 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob
isAssembling = assembler.isAssembling isAssembling = assembler.isAssembling
sendProgressBarUpdate(0, if (isAssembling) 1 else 0) sendProgressBarUpdate(0, if (isAssembling) 1 else 0)
} }
if (assemblyProgress != assembler.progress) { val timeRemaining = (assembler.requiredEnergy / Settings.get.assemblerTickAmount * Settings.get.tickFrequency / 20).toInt
if (assemblyProgress != assembler.progress || assemblyRemainingTime != timeRemaining) {
assemblyProgress = assembler.progress assemblyProgress = assembler.progress
assemblyRemainingTime = timeRemaining
sendProgressBarUpdate(1, assemblyProgress) sendProgressBarUpdate(1, assemblyProgress)
sendProgressBarUpdate(2, timeRemaining)
} }
} }
} }

View File

@ -57,7 +57,7 @@ class Robot(val robot: tileentity.Robot) extends ManagedComponent {
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
@Callback @Callback
def getInventorySize(context: Context, args: Arguments): Array[AnyRef] = result(robot.inventorySize) def inventorySize(context: Context, args: Arguments): Array[AnyRef] = result(robot.inventorySize)
@Callback @Callback
def select(context: Context, args: Arguments): Array[AnyRef] = { def select(context: Context, args: Arguments): Array[AnyRef] = {