From 8e54d5ef776d41d7b6fc850530fe997726c5cfad Mon Sep 17 00:00:00 2001 From: Vexatos Date: Sat, 2 Apr 2016 20:25:43 +0200 Subject: [PATCH] Made memory calculation a lot less hardcoded, finally allowing addons to define custom memory types. --- src/main/java/li/cil/oc/api/driver/item/Memory.java | 3 ++- .../oc/integration/opencomputers/DriverMemory.scala | 4 +++- .../server/machine/luac/NativeLuaArchitecture.scala | 11 ++++------- .../oc/server/machine/luaj/LuaJLuaArchitecture.scala | 9 +++------ 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/li/cil/oc/api/driver/item/Memory.java b/src/main/java/li/cil/oc/api/driver/item/Memory.java index 638971e40..3cd72a8f5 100644 --- a/src/main/java/li/cil/oc/api/driver/item/Memory.java +++ b/src/main/java/li/cil/oc/api/driver/item/Memory.java @@ -17,7 +17,8 @@ public interface Memory extends Item { * This factor has to be interpreted by each individual architecture to fit * its own memory needs. The actual values returned here should roughly be * equivalent to the item's tier. For example, the built-in memory modules - * provide 1 for tier one, 2 for tier 1.5, 3 for tier 2, etc. + * provide defaults of 192 for tier one, 256 for tier 1.5, 384 for tier 2, etc. + * Mind that those values may be changed in the config file. * * @param stack the item to get the provided memory for. * @return the amount of memory the specified component provides. diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala index c344e9e46..d4a0c1467 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala @@ -12,7 +12,9 @@ import net.minecraft.item.ItemStack object DriverMemory extends Item with api.driver.item.Memory with api.driver.item.CallBudget { override def amount(stack: ItemStack) = Delegator.subItem(stack) match { - case Some(memory: item.Memory) => memory.tier + 1 + case Some(memory: item.Memory) => + val sizes = Settings.get.ramSizes + Settings.get.ramSizes(memory.tier max 0 min (sizes.length - 1)) case _ => 0.0 } diff --git a/src/main/scala/li/cil/oc/server/machine/luac/NativeLuaArchitecture.scala b/src/main/scala/li/cil/oc/server/machine/luac/NativeLuaArchitecture.scala index edc0e9d50..2bfe7bd24 100644 --- a/src/main/scala/li/cil/oc/server/machine/luac/NativeLuaArchitecture.scala +++ b/src/main/scala/li/cil/oc/server/machine/luac/NativeLuaArchitecture.scala @@ -157,13 +157,10 @@ abstract class NativeLuaArchitecture(val machine: api.machine.Machine) extends A memory > 0 } - private def memoryInBytes(components: java.lang.Iterable[ItemStack]) = components.foldLeft(0)((acc, stack) => acc + (Option(api.Driver.driverFor(stack)) match { - case Some(driver: Memory) => - val sizes = Settings.get.ramSizes - val tier = math.round(driver.amount(stack)).toInt - 1 - sizes(tier max 0 min (sizes.length - 1)) * 1024 + private def memoryInBytes(components: java.lang.Iterable[ItemStack]) = components.foldLeft(0.0)((acc, stack) => acc + (Option(api.Driver.driverFor(stack)) match { + case Some(driver: Memory) => driver.amount(stack) * 1024 case _ => 0 - })) + })).toInt max 0 min 50000000 // ----------------------------------------------------------------------- // @@ -432,4 +429,4 @@ abstract class NativeLuaArchitecture(val machine: api.machine.Machine) extends A // Limit memory again. recomputeMemory(machine.host.internalComponents) } -} \ No newline at end of file +} diff --git a/src/main/scala/li/cil/oc/server/machine/luaj/LuaJLuaArchitecture.scala b/src/main/scala/li/cil/oc/server/machine/luaj/LuaJLuaArchitecture.scala index 24d02e22e..2b05fa439 100644 --- a/src/main/scala/li/cil/oc/server/machine/luaj/LuaJLuaArchitecture.scala +++ b/src/main/scala/li/cil/oc/server/machine/luaj/LuaJLuaArchitecture.scala @@ -102,13 +102,10 @@ class LuaJLuaArchitecture(val machine: api.machine.Machine) extends Architecture memory > 0 } - private def memoryInBytes(components: java.lang.Iterable[ItemStack]) = components.foldLeft(0)((acc, stack) => acc + (Option(api.Driver.driverFor(stack)) match { - case Some(driver: Memory) => - val sizes = Settings.get.ramSizes - val tier = math.round(driver.amount(stack)).toInt - 1 - sizes(tier max 0 min (sizes.length - 1)) * 1024 + private def memoryInBytes(components: java.lang.Iterable[ItemStack]) = components.foldLeft(0.0)((acc, stack) => acc + (Option(api.Driver.driverFor(stack)) match { + case Some(driver: Memory) => driver.amount(stack) * 1024 case _ => 0 - })) + })).toInt max 0 min 50000000 // ----------------------------------------------------------------------- //