added cpu slot to computer cases, computer cases now also require a cpu to define the number of components they support

This commit is contained in:
Florian Nücke 2014-01-16 18:04:29 +01:00
parent 87f5192724
commit 65d951d50c
6 changed files with 41 additions and 17 deletions

View File

@ -102,7 +102,7 @@ oc:tooltip.Case=Das Computergehäuse ist der essentielle Grundbaustein für eine
oc:tooltip.Charger=Lädt Roboter mit Energie aus Kondensatoren auf. Die Ladegeschwindigkeit hängt vom eingehenden §fRedstonesignal§7 ab, wobei kein Signal "nicht laden" und ein Signal mit maximaler Stärke "schnellstmöglich laden" heißt. oc:tooltip.Charger=Lädt Roboter mit Energie aus Kondensatoren auf. Die Ladegeschwindigkeit hängt vom eingehenden §fRedstonesignal§7 ab, wobei kein Signal "nicht laden" und ein Signal mit maximaler Stärke "schnellstmöglich laden" heißt.
oc:tooltip.CircuitBoard=Mühsam ernährt sich das Eichhörnchen. Wenn es groß wird, wird es mal eine gedruckte Leiterplatte. oc:tooltip.CircuitBoard=Mühsam ernährt sich das Eichhörnchen. Wenn es groß wird, wird es mal eine gedruckte Leiterplatte.
oc:tooltip.ControlUnit=Klingt wichtig, ist es auch. Man baut daraus immerhin CPUs. Wie könnte es da nicht wichtig sein. oc:tooltip.ControlUnit=Klingt wichtig, ist es auch. Man baut daraus immerhin CPUs. Wie könnte es da nicht wichtig sein.
oc:tooltip.CPU=Kernstück eines jeden Computers. Die Taktrate hat einen leichten Schatten, aber was kann man von einer Taschensonnenuhr schon erwarten? oc:tooltip.CPU=Kernstück eines jeden Computers. Die Taktrate hat einen leichten Schatten, aber was kann man von einer Taschensonnenuhr schon erwarten?[nl] Unterstützte Komponenten: §f%s§7.
oc:tooltip.CuttingWire=Wird gebraucht, um Tonblöcke in Leiterplattenform zu bekommen. Vermutlich das ineffizienteste Werkzeug in der Geschichte der Menschheit, da es nach einer Verwendung kaputt geht. oc:tooltip.CuttingWire=Wird gebraucht, um Tonblöcke in Leiterplattenform zu bekommen. Vermutlich das ineffizienteste Werkzeug in der Geschichte der Menschheit, da es nach einer Verwendung kaputt geht.
oc:tooltip.Disk=Sehr einfaches Speichermedium, das verwendet werden kann, um Disketten und Festplatten bauen. oc:tooltip.Disk=Sehr einfaches Speichermedium, das verwendet werden kann, um Disketten und Festplatten bauen.
oc:tooltip.DiskDrive.CC=ComputerCraft-Disketten werden §aunterstützt§7. oc:tooltip.DiskDrive.CC=ComputerCraft-Disketten werden §aunterstützt§7.

View File

@ -102,7 +102,7 @@ oc:tooltip.Case=The Computer Case is the basic building block for computers and
oc:tooltip.Charger=Transfers energy from capacitors into adjacent robots. The transfer rate depends on the incoming §fredstone signal§7, where no signal means don't charge robots, and maximum strength means charge at full speed. oc:tooltip.Charger=Transfers energy from capacitors into adjacent robots. The transfer rate depends on the incoming §fredstone signal§7, where no signal means don't charge robots, and maximum strength means charge at full speed.
oc:tooltip.CircuitBoard=Now we're getting somewhere. Can be etched to obtain a printed circuit board. oc:tooltip.CircuitBoard=Now we're getting somewhere. Can be etched to obtain a printed circuit board.
oc:tooltip.ControlUnit=This is the unit that... controls... stuff. You need it to build a CPU. So yeah, totally important. oc:tooltip.ControlUnit=This is the unit that... controls... stuff. You need it to build a CPU. So yeah, totally important.
oc:tooltip.CPU=An essential component of all computers. The clock rate is a bit unreliable, but what do you expect when it runs on a pocket sundial? oc:tooltip.CPU=An essential component of all computers. The clock rate is a bit unreliable, but what do you expect when it runs on a pocket sundial?[nl] Supported components: §f%s§7.
oc:tooltip.CuttingWire=Used to cut clay blocks into circuit board shape. Breaks after one use, which probably makes it the most inefficient tool ever. oc:tooltip.CuttingWire=Used to cut clay blocks into circuit board shape. Breaks after one use, which probably makes it the most inefficient tool ever.
oc:tooltip.Disk=Primitive medium that can be used to build persistent storage devices. oc:tooltip.Disk=Primitive medium that can be used to build persistent storage devices.
oc:tooltip.DiskDrive.CC=ComputerCraft floppies are §asupported§7. oc:tooltip.DiskDrive.CC=ComputerCraft floppies are §asupported§7.

View File

@ -10,7 +10,7 @@ class Case(playerInventory: InventoryPlayer, computer: tileentity.Case) extends
} }
for (i <- 0 to (if (computer.tier == 0) 0 else 1)) { for (i <- 0 to (if (computer.tier == 0) 0 else 1)) {
addSlotToContainer(120, 16 + i * slotSize, api.driver.Slot.Memory, computer.maxComponentTierForSlot(getInventory.size)) addSlotToContainer(120, 16 + (i + 1) * slotSize, api.driver.Slot.Memory, computer.maxComponentTierForSlot(getInventory.size))
} }
for (i <- 0 to (if (computer.tier == 0) 0 else 1)) { for (i <- 0 to (if (computer.tier == 0) 0 else 1)) {
@ -21,6 +21,8 @@ class Case(playerInventory: InventoryPlayer, computer: tileentity.Case) extends
addSlotToContainer(142, 16 + 2 * slotSize, api.driver.Slot.Disk) addSlotToContainer(142, 16 + 2 * slotSize, api.driver.Slot.Disk)
} }
addSlotToContainer(120, 16, api.driver.Slot.Processor, computer.tier)
// Show the player's inventory. // Show the player's inventory.
addPlayerInventorySlots(8, 84) addPlayerInventorySlots(8, 84)

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.inventory package li.cil.oc.common.inventory
import li.cil.oc.api.driver.{Item => ItemDriver} import li.cil.oc.api.driver.{Item => ItemDriver}
import li.cil.oc.api.network
import li.cil.oc.api.network.{Node, ManagedEnvironment} import li.cil.oc.api.network.{Node, ManagedEnvironment}
import li.cil.oc.api.{network, driver}
import li.cil.oc.server.driver.Registry import li.cil.oc.server.driver.Registry
import li.cil.oc.server.driver.item.Item import li.cil.oc.server.driver.item.Item
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
@ -20,14 +20,6 @@ trait ComponentInventory extends Inventory with network.Environment {
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
def installedMemory = items.foldLeft(0)((sum, stack) => sum + (stack match {
case Some(item) => Registry.itemDriverFor(item) match {
case Some(driver: driver.Memory) => driver.amount(item)
case _ => 0
}
case _ => 0
}))
def updateComponents() { def updateComponents() {
if (updatingComponents.length > 0) { if (updatingComponents.length > 0) {
for (component <- updatingComponents) { for (component <- updatingComponents) {

View File

@ -15,7 +15,7 @@ class CPU(val parent: Delegator, val tier: Int) extends Delegate {
override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier max 0 min 2) override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier max 0 min 2)
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(baseName)) tooltip.addAll(Tooltip.get(baseName, Settings.componentCountByTier(tier)))
super.tooltipLines(stack, player, tooltip, advanced) super.tooltipLines(stack, player, tooltip, advanced)
} }

View File

@ -1,6 +1,7 @@
package li.cil.oc.common.tileentity package li.cil.oc.common.tileentity
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.api.driver
import li.cil.oc.api.driver.Slot import li.cil.oc.api.driver.Slot
import li.cil.oc.server.driver.Registry import li.cil.oc.server.driver.Registry
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
@ -10,13 +11,32 @@ import net.minecraft.nbt.NBTTagCompound
class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) { class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
def this() = this(0, false) def this() = this(0, false)
def maxComponents = Settings.componentCountByTier(tier) var maxComponents = 0
def recomputeMaxComponents() {
maxComponents = items.foldLeft(0)((sum, stack) => sum + (stack match {
case Some(item) => Registry.itemDriverFor(item) match {
case Some(driver: driver.Processor) => driver.supportedComponents(item)
case _ => 0
}
case _ => 0
}))
}
def installedMemory = items.foldLeft(0)((sum, stack) => sum + (stack match {
case Some(item) => Registry.itemDriverFor(item) match {
case Some(driver: driver.Memory) => driver.amount(item)
case _ => 0
}
case _ => 0
}))
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
override def readFromNBT(nbt: NBTTagCompound) { override def readFromNBT(nbt: NBTTagCompound) {
tier = nbt.getByte(Settings.namespace + "tier") max 0 min 2 tier = nbt.getByte(Settings.namespace + "tier") max 0 min 2
super.readFromNBT(nbt) super.readFromNBT(nbt)
recomputeMaxComponents()
} }
override def writeToNBT(nbt: NBTTagCompound) { override def writeToNBT(nbt: NBTTagCompound) {
@ -26,12 +46,17 @@ class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
override def onInventoryChanged() {
super.onInventoryChanged()
recomputeMaxComponents()
}
def getInvName = Settings.namespace + "container.Case" def getInvName = Settings.namespace + "container.Case"
def getSizeInventory = tier match { def getSizeInventory = tier match {
case 0 => 4 case 0 => 5
case 1 => 6 case 1 => 7
case 2 => 8 case 2 => 9
case _ => 0 case _ => 0
} }
@ -48,6 +73,7 @@ class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
case (0 | 1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= maxComponentTierForSlot(slot) case (0 | 1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (2, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= maxComponentTierForSlot(slot) case (2, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (3, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= maxComponentTierForSlot(slot) case (3, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (4, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= maxComponentTierForSlot(slot)
case _ => false // Invalid slot. case _ => false // Invalid slot.
} }
case 1 => (slot, Registry.itemDriverFor(stack)) match { case 1 => (slot, Registry.itemDriverFor(stack)) match {
@ -55,6 +81,7 @@ class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
case (0 | 1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= maxComponentTierForSlot(slot) case (0 | 1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (2 | 3, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= maxComponentTierForSlot(slot) case (2 | 3, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (4 | 5, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= maxComponentTierForSlot(slot) case (4 | 5, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (6, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= maxComponentTierForSlot(slot)
case _ => false // Invalid slot. case _ => false // Invalid slot.
} }
case 2 => (slot, Registry.itemDriverFor(stack)) match { case 2 => (slot, Registry.itemDriverFor(stack)) match {
@ -63,6 +90,7 @@ class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
case (3 | 4, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= maxComponentTierForSlot(slot) case (3 | 4, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (5 | 6, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= maxComponentTierForSlot(slot) case (5 | 6, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= maxComponentTierForSlot(slot)
case (7, Some(driver)) => driver.slot(stack) == Slot.Disk case (7, Some(driver)) => driver.slot(stack) == Slot.Disk
case (8, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= maxComponentTierForSlot(slot)
case _ => false // Invalid slot. case _ => false // Invalid slot.
} }
case _ => false case _ => false
@ -76,6 +104,7 @@ class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
case (2 | 3) => 1 case (2 | 3) => 1
case 4 => 1 case 4 => 1
case 5 => 0 case 5 => 0
case 6 => 1
case _ => -1 // Invalid slot. case _ => -1 // Invalid slot.
} }
case 2 => slot match { case 2 => slot match {
@ -85,6 +114,7 @@ class Case(var tier: Int, isRemote: Boolean) extends Computer(isRemote) {
case 5 => 2 case 5 => 2
case 6 => 1 case 6 => 1
case 7 => 0 case 7 => 0
case 8 => 2
case _ => -1 // Invalid slot. case _ => -1 // Invalid slot.
} }
case _ => -1 case _ => -1