From 16561c9d328a58fb4a41941c5f4e0f8435af2fe0 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 23 Jan 2015 09:18:36 +0800 Subject: [PATCH] Fixed graph and mechanical node errors --- .../edx/electrical/generator/TileMotor.scala | 3 +- .../edx/electrical/multimeter/Graph.scala | 14 ++++-- .../multimeter/GridMultimeter.scala | 48 ++++++++----------- .../multimeter/PartMultimeter.scala | 11 ++--- .../multimeter/RenderMultimeter.scala | 2 +- .../edx/mechanical/mech/gear/PartGear.scala | 2 +- .../mech/turbine/TileWaterTurbine.scala | 8 ++-- .../mech/turbine/TileWindTurbine.scala | 4 +- 8 files changed, 44 insertions(+), 48 deletions(-) diff --git a/src/main/scala/edx/electrical/generator/TileMotor.scala b/src/main/scala/edx/electrical/generator/TileMotor.scala index 3d13120f5..112bea5d0 100644 --- a/src/main/scala/edx/electrical/generator/TileMotor.scala +++ b/src/main/scala/edx/electrical/generator/TileMotor.scala @@ -91,12 +91,11 @@ class TileMotor extends SpatialTile(Material.iron) with TIO with TElectric with * Produce torque based on current. * T = NBA * I / (2pi) */ - val power = electricNode.power val torque = TileMotor.motorConstant * electricNode.current / (2 * Math.PI) //TODO: Check if angular velocity should be generated based on torque if (torque != 0) - mechNode.rotate(torque, power / torque) + mechNode.accelerate(torque) /** * Motors produce emf or counter-emf by Lenz's law based on angular velocity diff --git a/src/main/scala/edx/electrical/multimeter/Graph.scala b/src/main/scala/edx/electrical/multimeter/Graph.scala index ce1d57bf9..76b0520de 100644 --- a/src/main/scala/edx/electrical/multimeter/Graph.scala +++ b/src/main/scala/edx/electrical/multimeter/Graph.scala @@ -28,11 +28,16 @@ class Graph[V](val name: String, val maxPoints: Int = 0)(implicit n: Numeric[V]) def head: V = apply(0) - def apply(x: Int): V = if (points.size > x) points.get(x) else default + def apply(x: Int = 0): V = if (points.size > x) points.get(x) else default def default: V = n.zero - def queue(value: V) = queue = value + def getDouble(x: Int = 0) = n.toDouble(this(x)) + + def queue(value: V) + { + queue = value + } def doneQueue = this += queue @@ -46,12 +51,13 @@ class Graph[V](val name: String, val maxPoints: Int = 0)(implicit n: Numeric[V]) def load(nbt: NBTTagCompound) { points.clear() - points.addAll(nbt.getArray("DataPoints").toList) + val array = nbt.getArray[Double]("DataPoints") + points.addAll(array.map(_.asInstanceOf[V]).toList) } def save(nbt: NBTTagCompound) { - nbt.setArray("DataPoints", points.toArray) + nbt.setArray("DataPoints", points.map(n.toDouble).toArray) } def getAverage: Double = if (points.size > 0) n.toDouble(points.foldLeft(n.zero)((b, a) => n.plus(b, a))) / points.size else 0 diff --git a/src/main/scala/edx/electrical/multimeter/GridMultimeter.scala b/src/main/scala/edx/electrical/multimeter/GridMultimeter.scala index c8ff37eeb..eb8755e46 100644 --- a/src/main/scala/edx/electrical/multimeter/GridMultimeter.scala +++ b/src/main/scala/edx/electrical/multimeter/GridMultimeter.scala @@ -1,8 +1,7 @@ package edx.electrical.multimeter import net.minecraft.nbt.{NBTTagCompound, NBTTagList} -import resonant.api.IUpdate -import resonant.lib.grid.core.{Grid, UpdateTicker} +import resonant.lib.grid.core.Grid import resonant.lib.transform.vector.Vector3 import resonant.lib.utility.LanguageUtility import resonant.lib.utility.science.UnitDisplay @@ -10,7 +9,7 @@ import resonant.lib.utility.science.UnitDisplay import scala.collection.convert.wrapAll._ import scala.collection.mutable.ArrayBuffer -class GridMultimeter extends Grid[PartMultimeter] with IUpdate +class GridMultimeter extends Grid[PartMultimeter] { final val displayInformation = new ArrayBuffer[String] /** @@ -53,7 +52,6 @@ class GridMultimeter extends Grid[PartMultimeter] with IUpdate graphs += energyGraph graphs += powerGraph - graphs += energyCapacityGraph graphs += voltageGraph graphs += torqueGraph graphs += angularVelocityGraph @@ -65,15 +63,14 @@ class GridMultimeter extends Grid[PartMultimeter] with IUpdate { val graph = graphs(graphID) var graphValue: String = "" - if (graph == energyGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.JOULES, energyGraph.get).toString - if (graph == powerGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.WATT, powerGraph.get).toString - if (graph == energyCapacityGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.JOULES, energyCapacityGraph.get).toString - if (graph == voltageGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.VOLTAGE, voltageGraph.get).toString - if (graph == torqueGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.NEWTON_METER, torqueGraph.get, true).toString - if (graph == angularVelocityGraph) graphValue = UnitDisplay.roundDecimals(angularVelocityGraph.get) + " rad/s" - if (graph == fluidGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.LITER, fluidGraph.get.toInt).toString - if (graph == thermalGraph) graphValue = UnitDisplay.roundDecimals(thermalGraph.get.toFloat) + " K" - if (graph == pressureGraph) graphValue = UnitDisplay.roundDecimals(pressureGraph.get.toInt) + " Pa" + if (graph == energyGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.JOULES, energyGraph()).toString + if (graph == powerGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.WATT, powerGraph()).toString + if (graph == voltageGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.VOLTAGE, voltageGraph()).toString + if (graph == torqueGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.NEWTON_METER, torqueGraph(), true).toString + if (graph == angularVelocityGraph) graphValue = UnitDisplay.roundDecimals(angularVelocityGraph()) + " rad/s" + if (graph == fluidGraph) graphValue = new UnitDisplay(UnitDisplay.Unit.LITER, fluidGraph()).toString + if (graph == thermalGraph) graphValue = UnitDisplay.roundDecimals(thermalGraph()) + " K" + if (graph == pressureGraph) graphValue = UnitDisplay.roundDecimals(pressureGraph()) + " Pa" return getLocalized(graph) + ": " + graphValue } @@ -87,22 +84,11 @@ class GridMultimeter extends Grid[PartMultimeter] with IUpdate return primaryMultimeter == check } - def update(delta: Double) - { - if (doUpdate) - { - graphs.foreach(_.doneQueue()) - doUpdate = false - } - } - def markUpdate { doUpdate = true } - override def updatePeriod: Int = if (getNodes.size > 0) 50 else 0 - override def isValidNode(node: AnyRef): Boolean = { return node.isInstanceOf[PartMultimeter] && node.asInstanceOf[PartMultimeter].world != null && node.asInstanceOf[PartMultimeter].tile != null @@ -138,7 +124,6 @@ class GridMultimeter extends Grid[PartMultimeter] with IUpdate size = new Vector3(Math.abs(upperBound.x) + Math.abs(lowerBound.x), Math.abs(upperBound.y) + Math.abs(lowerBound.y), Math.abs(upperBound.z) + Math.abs(lowerBound.z)) val area: Double = (if (size.x != 0) size.x else 1) * (if (size.y != 0) size.y else 1) * (if (size.z != 0) size.z else 1) isEnabled = area == getNodes.size - UpdateTicker.threaded.addUpdater(this) getNodes foreach (c => { @@ -163,9 +148,16 @@ class GridMultimeter extends Grid[PartMultimeter] with IUpdate def save: NBTTagCompound = { - val nbt: NBTTagCompound = new NBTTagCompound - val data: NBTTagList = new NBTTagList - graphs.foreach(g => data.appendTag(g.save())) + val nbt = new NBTTagCompound + val data = new NBTTagList + graphs.foreach( + g => + { + val tag = new NBTTagCompound + g.save(tag) + data.appendTag(tag) + } + ) nbt.setTag("graphs", data) return nbt } diff --git a/src/main/scala/edx/electrical/multimeter/PartMultimeter.scala b/src/main/scala/edx/electrical/multimeter/PartMultimeter.scala index 13321a1d9..55200ee06 100644 --- a/src/main/scala/edx/electrical/multimeter/PartMultimeter.scala +++ b/src/main/scala/edx/electrical/multimeter/PartMultimeter.scala @@ -81,7 +81,7 @@ class PartMultimeter extends PartFace with IRedstonePart with IPacketReceiver wi if (!world.isRemote) { if (doDetect) updateDetections - val detectedValue = getGrid.graphs(detectType).getDouble + val detectedValue = getGrid.graphs(detectType).getDouble() var outputRedstone = false detectMode match @@ -152,7 +152,6 @@ class PartMultimeter extends PartFace with IRedstonePart with IPacketReceiver wi } } getGrid.energyGraph.queue(Compatibility.getEnergy(tileEntity, receivingSide)) - getGrid.energyCapacityGraph.queue(Compatibility.getMaxEnergy(tileEntity, receivingSide)) } def getDetectedTile: TileEntity = @@ -243,16 +242,16 @@ class PartMultimeter extends PartFace with IRedstonePart with IPacketReceiver wi updateServer } + def updateServer + { + } + def toggleDetectionValue { detectType = ((detectType + 1) % getGrid.graphs.size).asInstanceOf[Byte] updateServer } - def updateServer - { - } - def getGrid: GridMultimeter = { if (grid == null) diff --git a/src/main/scala/edx/electrical/multimeter/RenderMultimeter.scala b/src/main/scala/edx/electrical/multimeter/RenderMultimeter.scala index d283bb011..fce241df8 100644 --- a/src/main/scala/edx/electrical/multimeter/RenderMultimeter.scala +++ b/src/main/scala/edx/electrical/multimeter/RenderMultimeter.scala @@ -103,7 +103,7 @@ object RenderMultimeter extends ISimpleItemRenderer for (i <- 0 until part.getGrid.graphs.size) { - if (part.getGrid.graphs(i).head != null && !(part.getGrid.graphs(i).head == part.getGrid.graphs(i).getDefault)) + if (part.getGrid.graphs(i).head != null /*&& !(part.getGrid.graphs(i).head == part.getGrid.graphs(i))*/ ) { information :+= part.getGrid.getDisplay(i) } diff --git a/src/main/scala/edx/mechanical/mech/gear/PartGear.scala b/src/main/scala/edx/mechanical/mech/gear/PartGear.scala index f946c852c..ae9b35217 100644 --- a/src/main/scala/edx/mechanical/mech/gear/PartGear.scala +++ b/src/main/scala/edx/mechanical/mech/gear/PartGear.scala @@ -62,7 +62,7 @@ class PartGear extends PartMechanical with IMultiBlockStructure[PartGear] if (manualCrankTime > 0) { //A punch has around 5000 Newtons - mechanicalNode.rotate((if (isClockwiseCrank) 2 else -2) * manualCrankTime, (if (isClockwiseCrank) 0.5 else -0.5) * manualCrankTime) + mechanicalNode.accelerate((if (isClockwiseCrank) 2 else -2) * manualCrankTime) manualCrankTime -= 1 } } diff --git a/src/main/scala/edx/mechanical/mech/turbine/TileWaterTurbine.scala b/src/main/scala/edx/mechanical/mech/turbine/TileWaterTurbine.scala index 2403fecd7..84065a8eb 100644 --- a/src/main/scala/edx/mechanical/mech/turbine/TileWaterTurbine.scala +++ b/src/main/scala/edx/mechanical/mech/turbine/TileWaterTurbine.scala @@ -58,7 +58,7 @@ class TileWaterTurbine extends TileTurbine { if (powerTicks > 0) { - getMultiBlock.get.mechanicalNode.rotate(getWaterPower, getWaterPower / 100) + getMultiBlock.get.mechanicalNode.accelerate(getWaterPower) powerTicks -= 1 } @@ -74,7 +74,7 @@ class TileWaterTurbine extends TileTurbine powerTicks = 20 worldObj.setBlockToAir(xCoord, yCoord + 1, zCoord) worldObj.setBlock(xCoord, yCoord - 1, zCoord, Blocks.flowing_water) - getMultiBlock.get.mechanicalNode.rotate(10000, 10) + getMultiBlock.get.mechanicalNode.accelerate(10000) } } } @@ -98,12 +98,12 @@ class TileWaterTurbine extends TileTurbine if (getDirection.offsetX != 0) { - getMultiBlock.get.mechanicalNode.rotate(if (invert) -1 else 1 * Math.abs(getWaterPower * vector.z * (7 - metadata) / 7f), 10) + getMultiBlock.get.mechanicalNode.accelerate(if (invert) -1 else 1 * Math.abs(getWaterPower * vector.z * (7 - metadata) / 7f)) powerTicks = 20 } if (getDirection.offsetZ != 0) { - getMultiBlock.get.mechanicalNode.rotate(if (invert) -1 else 1 * Math.abs(getWaterPower * vector.x * (7 - metadata) / 7f), 10) + getMultiBlock.get.mechanicalNode.accelerate(if (invert) -1 else 1 * Math.abs(getWaterPower * vector.x * (7 - metadata) / 7f)) powerTicks = 20 } } diff --git a/src/main/scala/edx/mechanical/mech/turbine/TileWindTurbine.scala b/src/main/scala/edx/mechanical/mech/turbine/TileWindTurbine.scala index 0c225bab4..ac0c3fdc8 100644 --- a/src/main/scala/edx/mechanical/mech/turbine/TileWindTurbine.scala +++ b/src/main/scala/edx/mechanical/mech/turbine/TileWindTurbine.scala @@ -77,12 +77,12 @@ class TileWindTurbine extends TileTurbine with IBoilHandler computePower() windPower = MathUtility.lerp(windPower, nextWindPower, ticks % 20 / 20d) - getMultiBlock.get.mechanicalNode.rotate(windPower * multiBlockRadius / 20, windPower / multiBlockRadius / 20) + getMultiBlock.get.mechanicalNode.accelerate(windPower * multiBlockRadius / 20) } //Generate from steam val steamPower = if (gasTank.getFluid != null) gasTank.drain(gasTank.getFluidAmount, true).amount else 0 * 1000 * Settings.steamMultiplier - getMultiBlock.get.mechanicalNode.rotate(steamPower * multiBlockRadius / 20, steamPower / multiBlockRadius / 20) + getMultiBlock.get.mechanicalNode.accelerate(steamPower * multiBlockRadius / 20) } } }