From b70ddf1e04a77bce3b3472b7d342bf90ec9eb3dc Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sun, 23 Nov 2014 11:03:11 +0800 Subject: [PATCH] Wind turbine now has persistent cache --- .../mechanical/mech/turbine/NodeTurbine.scala | 9 ---- .../mechanical/mech/turbine/TileTurbine.scala | 54 +++++++++++-------- .../mech/turbine/TileWindTurbine.scala | 24 ++++++++- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/NodeTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/NodeTurbine.scala index ed7eefa0f..acb9b3e07 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/NodeTurbine.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/turbine/NodeTurbine.scala @@ -37,15 +37,6 @@ class NodeTurbine(parent: TileTurbine) extends NodeMechanical(parent) override def canConnect[B <: NodeMechanical](other: B, from: ForgeDirection): Boolean = { - if (!other.isInstanceOf[NodeTurbine]) - println(other.getClass + " vs " + turbine.getDirection) - return turbine.getMultiBlock.isPrimary && other.isInstanceOf[NodeMechanical] && !other.isInstanceOf[NodeTurbine] && from == turbine.getDirection } - - /** - override def inverseRotation(dir: ForgeDirection): Boolean = - { - return dir == turbine.getDirection.getOpposite - } */ } \ No newline at end of file diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala index 019dc2068..aae3387fc 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala @@ -64,24 +64,6 @@ class TileTurbine extends TileMechanical(Material.wood) with IMultiBlockStructur { } - /** Reads a tile entity from NBT. */ - override def readFromNBT(nbt: NBTTagCompound) - { - super.readFromNBT(nbt) - multiBlockRadius = nbt.getInteger("multiBlockRadius") - tier = nbt.getInteger("tier") - getMultiBlock.load(nbt) - } - - /** Writes a tile entity to NBT. */ - override def writeToNBT(nbt: NBTTagCompound) - { - super.writeToNBT(nbt) - nbt.setInteger("multiBlockRadius", multiBlockRadius) - nbt.setInteger("tier", tier) - getMultiBlock.save(nbt) - } - @SideOnly(Side.CLIENT) override def getRenderBoundingBox: AxisAlignedBB = { @@ -127,12 +109,22 @@ class TileTurbine extends TileMechanical(Material.wood) with IMultiBlockStructur worldObj.markBlockForUpdate(xCoord, yCoord, zCoord) } - override def write(buf: ByteBuf, id: Int) + /** Reads a tile entity from NBT. */ + override def readFromNBT(nbt: NBTTagCompound) { - super.write(buf, id) + super.readFromNBT(nbt) + multiBlockRadius = nbt.getInteger("multiBlockRadius") + tier = nbt.getInteger("tier") + getMultiBlock.load(nbt) + } - if (id == 0) - buf <<<< writeToNBT + /** Writes a tile entity to NBT. */ + override def writeToNBT(nbt: NBTTagCompound) + { + super.writeToNBT(nbt) + nbt.setInteger("multiBlockRadius", multiBlockRadius) + nbt.setInteger("tier", tier) + getMultiBlock.save(nbt) } override def read(buf: ByteBuf, id: Int, packetType: PacketType) @@ -140,7 +132,23 @@ class TileTurbine extends TileMechanical(Material.wood) with IMultiBlockStructur super.read(buf, id, packetType) if (id == 0) - buf >>>> readFromNBT + { + multiBlockRadius = buf.readInt() + tier = buf.readInt() + buf >>>> getMultiBlock.load + } + } + + override def write(buf: ByteBuf, id: Int) + { + super.write(buf, id) + + if (id == 0) + { + buf <<< multiBlockRadius + buf <<< tier + buf <<<< getMultiBlock.save + } } def getWorld: World = diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala index 8d2a22032..8d98fa643 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala @@ -6,6 +6,7 @@ import cpw.mods.fml.relauncher.{Side, SideOnly} import net.minecraft.creativetab.CreativeTabs import net.minecraft.init.{Blocks, Items} import net.minecraft.item.{Item, ItemStack} +import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.ResourceLocation import net.minecraft.world.biome.{BiomeGenBase, BiomeGenOcean, BiomeGenPlains} import net.minecraftforge.client.model.AdvancedModelLoader @@ -18,6 +19,7 @@ import resonant.lib.render.RenderUtility import resonant.lib.transform.vector.Vector3 import resonant.lib.utility.MathUtility import resonant.lib.utility.inventory.InventoryUtility +import resonant.lib.wrapper.NBTWrapper._ import resonant.lib.wrapper.WrapList._ import resonantinduction.core.{Reference, Settings} @@ -39,7 +41,7 @@ class TileWindTurbine extends TileTurbine with IBoilHandler /** * Wind simulations */ - private final val openBlockCache = new Array[Byte](224) + private var openBlockCache = new Array[Byte](224) private var checkCount = 0 private var efficiency = 0f private var windPower = 0d @@ -122,7 +124,7 @@ class TileWindTurbine extends TileTurbine with IBoilHandler efficiency = efficiency - openBlockCache(checkCount) + openAirBlocks openBlockCache(checkCount) = openAirBlocks.toByte checkCount = (checkCount + 1) % (openBlockCache.length - 1) - val multiblockMultiplier = multiBlockRadius + 0.5f + val multiblockMultiplier = (multiBlockRadius / 2) * (multiBlockRadius / 2) val materialMultiplier = tier match { @@ -158,6 +160,24 @@ class TileWindTurbine extends TileTurbine with IBoilHandler override def getTankInfo(from: ForgeDirection): Array[FluidTankInfo] = Array(gasTank.getInfo) + /** Reads a tile entity from NBT. */ + override def readFromNBT(nbt: NBTTagCompound) + { + super.readFromNBT(nbt) + checkCount = nbt.getInteger("checkCount") + efficiency = nbt.getFloat("efficiency") + openBlockCache = nbt.getArray[Byte]("openBlockCache") + } + + /** Writes a tile entity to NBT. */ + override def writeToNBT(nbt: NBTTagCompound) + { + super.writeToNBT(nbt) + nbt.setInteger("checkCount", checkCount) + nbt.setFloat("efficiency", efficiency) + nbt.setArray("openBlockCache", openBlockCache) + } + @SideOnly(Side.CLIENT) override def renderDynamic(pos: Vector3, frame: Float, pass: Int): Unit = {