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.Complexity=Komplexität: %s/%s
oc:gui.RobotAssembler.InsertCase=Computergehäuse einlegen
oc:gui.RobotAssembler.Progress=Fortschritt: %s (%s)
oc:gui.RobotAssembler.Run=Zusammenbauen
oc:gui.ServerRack.None=Keine
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.Complexity=Complexity: %s/%s
oc:gui.RobotAssembler.InsertCase=Insert a Computer Case
oc:gui.RobotAssembler.Progress=Progress: %s (%s)
oc:gui.RobotAssembler.Run=Assemble
oc:gui.ServerRack.None=None
oc:gui.ServerRack.Back=Back

View File

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

View File

@ -11,14 +11,18 @@ import li.cil.oc.client.{PacketHandler => ClientPacketHandler}
import li.cil.oc.common.Proxy
import li.cil.oc.server.{PacketHandler => ServerPacketHandler, CommandHandler}
@Mod(modid = "OpenComputers", modLanguage = "scala",
/* certificateFingerprint = "@FINGERPRINT@", */ useMetadata = true)
@Mod(modid = OpenComputers.ModID, modLanguage = "scala",
/* certificateFingerprint = OpenComputers.Fingerprint, */ useMetadata = true)
@NetworkMod(clientSideRequired = true, serverSideRequired = false,
clientPacketHandlerSpec = new SidedPacketHandler(
channels = Array("OpenComp"), packetHandler = classOf[ClientPacketHandler]),
serverPacketHandlerSpec = new SidedPacketHandler(
channels = Array("OpenComp"), packetHandler = classOf[ServerPacketHandler]))
object OpenComputers {
final val ModID = "OpenComputers"
final val Fingerprint = "@FINGERPRINT@"
val log = Logger.getLogger("OpenComputers")
@SidedProxy(clientSide = "li.cil.oc.client.Proxy", serverSide = "li.cil.oc.server.Proxy")
@ -26,6 +30,8 @@ object OpenComputers {
var tampered: Option[FMLFingerprintViolationEvent] = None
scala.collection.mutable.Map.empty[String, Int].keySet
// @EventHandler
// 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)),
30, 94, if (assembler.complexity <= assembler.maxComplexity) 0x404040 else 0x804040)
}
}
if (runButton.func_82252_a && !assemblerContainer.isAssembling) {
if (runButton.func_82252_a) {
val tooltip = new java.util.ArrayList[String]
tooltip.add(StatCollector.translateToLocal(Settings.namespace + "gui.RobotAssembler.Run"))
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()
}
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) {
GL11.glColor3f(1, 1, 1) // Required under Linux.
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 net.minecraft.entity.player.InventoryPlayer
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.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.
{
val index = inventorySlots.size
@ -57,6 +57,7 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob
var isAssembling = false
var assemblyProgress = 0
var assemblyRemainingTime = 0
@SideOnly(Side.CLIENT)
override def updateProgressBar(id: Int, value: Int) {
@ -68,6 +69,10 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob
if (id == 1) {
assemblyProgress = value
}
if (id == 2) {
assemblyRemainingTime = value
}
}
override def detectAndSendChanges() {
@ -77,9 +82,12 @@ class RobotAssembler(playerInventory: InventoryPlayer, assembler: tileentity.Rob
isAssembling = assembler.isAssembling
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
assemblyRemainingTime = timeRemaining
sendProgressBarUpdate(1, assemblyProgress)
sendProgressBarUpdate(2, timeRemaining)
}
}
}

View File

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