From 2a858059b479af4e6281308c5d32b4a80147b814 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 31 Jan 2014 18:45:33 +0800 Subject: [PATCH] Multimeters now display torque and angular velocity --- .../electrical/generator/TileGenerator.java | 20 +++---- .../electrical/multimeter/Graph.java | 16 +++-- .../electrical/multimeter/GraphF.java | 60 +++++++++++++++++++ .../electrical/multimeter/GraphL.java | 2 +- .../multimeter/MultimeterNetwork.java | 20 +++++-- .../electrical/multimeter/PartMultimeter.java | 38 ++++++------ .../multimeter/RenderMultimeter.java | 13 +++- 7 files changed, 126 insertions(+), 43 deletions(-) create mode 100644 src/main/java/resonantinduction/electrical/multimeter/GraphF.java diff --git a/src/main/java/resonantinduction/electrical/generator/TileGenerator.java b/src/main/java/resonantinduction/electrical/generator/TileGenerator.java index 6c391062..87191bd8 100644 --- a/src/main/java/resonantinduction/electrical/generator/TileGenerator.java +++ b/src/main/java/resonantinduction/electrical/generator/TileGenerator.java @@ -83,28 +83,22 @@ public class TileGenerator extends TileElectrical implements IRotatable if (tile instanceof IMechanical) { IMechanical mech = ((IMechanical) tile).getInstance(outputDir.getOpposite()); - long extract = energy.extractEnergy(energy.getEnergy() / 2, false); + long extract = energy.extractEnergy(energy.getEnergy() / 2, false); if (mech != null) { if (extract > 0) { - final float maxAngularVelocity = energy.getEnergyCapacity() / (float) torqueRatio; - final long maxTorque = (long) ((double) energy.getEnergyCapacity() / maxAngularVelocity); - float setAngularVelocity = extract / (float) torqueRatio; - long setTorque = (long) (((double) extract) / setAngularVelocity); + final float maxAngularVelocity = extract / (float) torqueRatio; + final long maxTorque = (long) (((double) extract) / maxAngularVelocity); + + float setAngularVelocity = maxAngularVelocity; + long setTorque = maxTorque; long currentTorque = Math.abs(mech.getTorque()); if (currentTorque != 0) - { - setTorque = Math.min(+setTorque, maxTorque) * (mech.getTorque() / currentTorque); - - if (setTorque < currentTorque) - { - setTorque = (long) Math.max(setTorque, currentTorque * (currentTorque / maxTorque)); - } - } + setTorque = Math.min(setTorque, maxTorque) * (mech.getTorque() / currentTorque); float currentVelo = Math.abs(mech.getAngularVelocity()); if (currentVelo != 0) diff --git a/src/main/java/resonantinduction/electrical/multimeter/Graph.java b/src/main/java/resonantinduction/electrical/multimeter/Graph.java index de15740d..c2396303 100644 --- a/src/main/java/resonantinduction/electrical/multimeter/Graph.java +++ b/src/main/java/resonantinduction/electrical/multimeter/Graph.java @@ -21,12 +21,12 @@ public abstract class Graph> * Each point represents a tick. */ protected List points = new ArrayList(); - private V peak; + private V peak = getDefault(); /** * Queue for the next update to insert into the graph. */ - protected V queue; + protected V queue = getDefault(); public Graph(int maxPoints) { @@ -63,6 +63,11 @@ public abstract class Graph> return points.size() > x ? points.get(x) : getDefault(); } + public V get() + { + return get(0); + } + public abstract void queue(V value); public void doneQueue() @@ -70,9 +75,12 @@ public abstract class Graph> add(queue); } - public abstract V getDefault(); + protected abstract V getDefault(); - public abstract void load(NBTTagCompound nbt); + public void load(NBTTagCompound nbt) + { + points.clear(); + } public abstract NBTTagCompound save(); diff --git a/src/main/java/resonantinduction/electrical/multimeter/GraphF.java b/src/main/java/resonantinduction/electrical/multimeter/GraphF.java new file mode 100644 index 00000000..cf817546 --- /dev/null +++ b/src/main/java/resonantinduction/electrical/multimeter/GraphF.java @@ -0,0 +1,60 @@ +package resonantinduction.electrical.multimeter; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +public class GraphF extends Graph +{ + public GraphF(int maxPoints) + { + super(maxPoints); + } + + @Override + public void queue(Float value) + { + queue += value; + } + + public void doneQueue() + { + super.doneQueue(); + queue = 0f; + } + + @Override + public Float getDefault() + { + return 0f; + } + + public void load(NBTTagCompound nbt) + { + super.load(nbt); + + NBTTagList nbtList = nbt.getTagList("DataPoints"); + + for (int i = 0; i < nbtList.tagCount(); ++i) + { + NBTTagCompound nbtPoint = (NBTTagCompound) nbtList.tagAt(i); + points.add(nbtPoint.getFloat("data")); + } + } + + public NBTTagCompound save() + { + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList data = new NBTTagList(); + + for (Float value : points) + { + NBTTagCompound nbtPoint = new NBTTagCompound(); + nbtPoint.setFloat("data", value); + data.appendTag(nbtPoint); + } + + nbt.setTag("DataPoints", data); + return nbt; + } + +} diff --git a/src/main/java/resonantinduction/electrical/multimeter/GraphL.java b/src/main/java/resonantinduction/electrical/multimeter/GraphL.java index 3b7ab604..24f636e7 100644 --- a/src/main/java/resonantinduction/electrical/multimeter/GraphL.java +++ b/src/main/java/resonantinduction/electrical/multimeter/GraphL.java @@ -30,6 +30,7 @@ public class GraphL extends Graph public void load(NBTTagCompound nbt) { + super.load(nbt); NBTTagList nbtList = nbt.getTagList("DataPoints"); for (int i = 0; i < nbtList.tagCount(); ++i) @@ -48,7 +49,6 @@ public class GraphL extends Graph { NBTTagCompound nbtPoint = new NBTTagCompound(); nbtPoint.setLong("data", value); - data.appendTag(nbtPoint); } diff --git a/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java b/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java index 8f66a696..874d8c44 100644 --- a/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java +++ b/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java @@ -18,9 +18,12 @@ public class MultimeterNetwork extends Network graphs = new ArrayList(); - public final GraphL energyGraph = new GraphL(20 * 10); - public final GraphL energyCapacityGraph = new GraphL(20 * 10); + public final GraphL energyGraph = new GraphL(maxData); + public final GraphL energyCapacityGraph = new GraphL(1); + public final GraphL torqueGraph = new GraphL(maxData); + public final GraphF angularVelocityGraph = new GraphF(maxData); /** * The absolute center of the multimeter screens. @@ -51,6 +54,8 @@ public class MultimeterNetwork extends Network conductor = ((IConductor) tileEntity).getInstance(receivingSide.getOpposite()); @@ -259,13 +263,25 @@ public class PartMultimeter extends JCuboidPart implements IConnector