blob: 929e21aaf275dd4435f1bb62687ce04bde295dc3 [file] [log] [blame] [raw]
package li.cil.oc.common.container
import cpw.mods.fml.relauncher.Side
import cpw.mods.fml.relauncher.SideOnly
import li.cil.oc.client.gui.Icons
import li.cil.oc.common
import li.cil.oc.common.InventorySlots.InventorySlot
import li.cil.oc.common.template.AssemblerTemplates
import li.cil.oc.common.tileentity
import net.minecraft.entity.player.InventoryPlayer
import net.minecraft.nbt.NBTTagCompound
class Assembler(playerInventory: InventoryPlayer, val assembler: tileentity.Assembler) extends Player(playerInventory, assembler) {
// Computer case.
{
val index = inventorySlots.size
addSlotToContainer(new StaticComponentSlot(this, otherInventory, index, 12, 12, "template", common.Tier.Any) {
@SideOnly(Side.CLIENT) override
def func_111238_b() = !isAssembling && super.func_111238_b()
override def getBackgroundIconIndex = if (isAssembling) Icons.get(common.Tier.None) else super.getBackgroundIconIndex
})
}
private def slotInfo(slot: DynamicComponentSlot) = {
AssemblerTemplates.select(getSlot(0).getStack) match {
case Some(template) =>
val index = slot.getSlotIndex
val tplSlot =
if ((1 until 4) contains index) template.containerSlots(index - 1)
else if ((4 until 13) contains index) template.upgradeSlots(index - 4)
else if ((13 until 21) contains index) template.componentSlots(index - 13)
else AssemblerTemplates.NoSlot
new InventorySlot(tplSlot.kind, tplSlot.tier)
case _ => new InventorySlot(common.Slot.None, common.Tier.None)
}
}
// Component containers.
for (i <- 0 until 3) {
addSlotToContainer(34 + i * slotSize, 70, slotInfo _)
}
// Components.
for (i <- 0 until 9) {
addSlotToContainer(34 + (i % 3) * slotSize, 12 + (i / 3) * slotSize, slotInfo _)
}
// Cards.
for (i <- 0 until 3) {
addSlotToContainer(104, 12 + i * slotSize, slotInfo _)
}
// CPU.
addSlotToContainer(126, 12, slotInfo _)
// RAM.
for (i <- 0 until 2) {
addSlotToContainer(126, 30 + i * slotSize, slotInfo _)
}
// Floppy/EEPROM + HDDs.
for (i <- 0 until 3) {
addSlotToContainer(148, 12 + i * slotSize, slotInfo _)
}
// Show the player's inventory.
addPlayerInventorySlots(8, 110)
def isAssembling = synchronizedData.getBoolean("isAssembling")
def assemblyProgress = synchronizedData.getDouble("assemblyProgress")
def assemblyRemainingTime = synchronizedData.getInteger("assemblyRemainingTime")
override protected def detectCustomDataChanges(nbt: NBTTagCompound): Unit = {
synchronizedData.setBoolean("isAssembling", assembler.isAssembling)
synchronizedData.setDouble("assemblyProgress", assembler.progress)
synchronizedData.setInteger("assemblyRemainingTime", assembler.timeRemaining)
super.detectCustomDataChanges(nbt)
}
}