From 1176e7b3f0d6020ef75981ad5adcde04c7599c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 29 Aug 2014 18:59:15 +0200 Subject: [PATCH] Reworked how complexity is computed when assembling robots. Cases now only provide a base level, CPUs control the max complexity in more detail (and don't contribute to complexity themselves anymore). Closes #522. --- .../li/cil/oc/common/template/RobotTemplate.scala | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala index b210e9495..9622397b4 100644 --- a/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/RobotTemplate.scala @@ -260,6 +260,7 @@ object RobotTemplate { for (slot <- 1 until inventory.getSizeInventory) { val stack = inventory.getStackInSlot(slot) acc += (Option(api.Driver.driverFor(stack)) match { + case Some(driver: Processor) => 0 // CPUs are exempt, since they control the limit. case Some(driver: UpgradeContainer) => (1 + driver.tier(stack)) * 2 case Some(driver) => 1 + driver.tier(stack) case _ => 0 @@ -270,6 +271,16 @@ object RobotTemplate { private def maxComplexity(inventory: IInventory) = { val caseTier = ItemUtils.caseTier(inventory.getStackInSlot(0)) - if (caseTier >= 0) Settings.robotComplexityByTier(caseTier) else 0 + val cpuTier = (0 until inventory.getSizeInventory).foldRight(0)((slot, acc) => { + val stack = inventory.getStackInSlot(slot) + acc + (api.Driver.driverFor(stack) match { + case processor: Processor => processor.tier(stack) + case _ => 0 + }) + }) + if (caseTier >= Tier.One && cpuTier >= Tier.One) { + Settings.robotComplexityByTier(caseTier) - (caseTier - cpuTier) * 6 + } + else 0 } }