From 9380b03dc05e3d69f6f958bec0cee11438a08cab Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 31 Jan 2014 12:01:06 +0800 Subject: [PATCH] Some more work on the multimeter --- .../electrical/multimeter/Graph.java | 52 +++++++-------- .../electrical/multimeter/GraphL.java | 59 +++++++++++++++++ .../electrical/multimeter/GuiMultimeter.java | 4 +- .../multimeter/MultimeterNetwork.java | 63 ++++++++++++++----- .../electrical/multimeter/PartMultimeter.java | 56 +++++++++++++++-- .../multimeter/RenderMultimeter.java | 6 +- 6 files changed, 184 insertions(+), 56 deletions(-) create mode 100644 src/main/java/resonantinduction/electrical/multimeter/GraphL.java diff --git a/src/main/java/resonantinduction/electrical/multimeter/Graph.java b/src/main/java/resonantinduction/electrical/multimeter/Graph.java index ec393d92..de15740d 100644 --- a/src/main/java/resonantinduction/electrical/multimeter/Graph.java +++ b/src/main/java/resonantinduction/electrical/multimeter/Graph.java @@ -13,24 +13,29 @@ import net.minecraft.nbt.NBTTagList; * @author Calclavia * */ -public class Graph +public abstract class Graph> { private final int maxPoints; /** * Each point represents a tick. */ - private List points = new ArrayList(); - private long peak; + protected List points = new ArrayList(); + private V peak; + + /** + * Queue for the next update to insert into the graph. + */ + protected V queue; public Graph(int maxPoints) { this.maxPoints = maxPoints; } - public void add(long y) + public void add(V y) { - if (y > peak) + if (y.compareTo(peak) > 0) { peak = y; } @@ -41,47 +46,34 @@ public class Graph { if (points.get(maxPoints) == peak) { - peak = 0; + peak = getDefault(); } + points.remove(maxPoints); } } - public long getPeak() + public V getPeak() { return peak; } - public long get(int x) + public V get(int x) { - return points.size() > x ? points.get(x) : 0; + return points.size() > x ? points.get(x) : getDefault(); } - public void load(NBTTagCompound nbt) - { - NBTTagList nbtList = nbt.getTagList("DataPoints"); + public abstract void queue(V value); - for (int i = 0; i < nbtList.tagCount(); ++i) - { - NBTTagCompound nbtPoint = (NBTTagCompound) nbtList.tagAt(i); - points.add(nbtPoint.getLong("data")); - } + public void doneQueue() + { + add(queue); } - public NBTTagCompound save() - { - NBTTagCompound nbt = new NBTTagCompound(); - NBTTagList data = new NBTTagList(); + public abstract V getDefault(); - for (long value : points) - { - NBTTagCompound nbtPoint = new NBTTagCompound(); - nbtPoint.setLong("data", value); + public abstract void load(NBTTagCompound nbt); - data.appendTag(nbtPoint); - } + public abstract NBTTagCompound save(); - 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 new file mode 100644 index 00000000..3b7ab604 --- /dev/null +++ b/src/main/java/resonantinduction/electrical/multimeter/GraphL.java @@ -0,0 +1,59 @@ +package resonantinduction.electrical.multimeter; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +public class GraphL extends Graph +{ + public GraphL(int maxPoints) + { + super(maxPoints); + } + + @Override + public void queue(Long value) + { + queue += value; + } + + public void doneQueue() + { + super.doneQueue(); + queue = 0L; + } + + @Override + public Long getDefault() + { + return 0L; + } + + public void load(NBTTagCompound nbt) + { + NBTTagList nbtList = nbt.getTagList("DataPoints"); + + for (int i = 0; i < nbtList.tagCount(); ++i) + { + NBTTagCompound nbtPoint = (NBTTagCompound) nbtList.tagAt(i); + points.add(nbtPoint.getLong("data")); + } + } + + public NBTTagCompound save() + { + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList data = new NBTTagList(); + + for (long value : points) + { + NBTTagCompound nbtPoint = new NBTTagCompound(); + nbtPoint.setLong("data", value); + + data.appendTag(nbtPoint); + } + + nbt.setTag("DataPoints", data); + return nbt; + } + +} diff --git a/src/main/java/resonantinduction/electrical/multimeter/GuiMultimeter.java b/src/main/java/resonantinduction/electrical/multimeter/GuiMultimeter.java index 17460941..8e653727 100644 --- a/src/main/java/resonantinduction/electrical/multimeter/GuiMultimeter.java +++ b/src/main/java/resonantinduction/electrical/multimeter/GuiMultimeter.java @@ -74,9 +74,9 @@ public class GuiMultimeter extends GuiContainerBase String s = LanguageUtility.getLocal("tile.resonantinduction:multimeter.name"); this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 15, 4210752); this.fontRenderer.drawString(EnumColor.INDIGO + LanguageUtility.getLocal("gui.resonantinduction.multimeter.energy"), 35, 15, 4210752); - this.renderUniversalDisplay(35, 25, this.multimeter.getNetwork().valueGraph.get(0), mouseX, mouseY, Unit.JOULES); + this.renderUniversalDisplay(35, 25, this.multimeter.getNetwork().energyGraph.get(0), mouseX, mouseY, Unit.JOULES); this.fontRenderer.drawString(EnumColor.INDIGO + LanguageUtility.getLocal("gui.resonantinduction.multimeter.capacity"), 35, 35, 4210752); - this.renderUniversalDisplay(35, 45, this.multimeter.getNetwork().valueGraph.getPeak(), mouseX, mouseY, Unit.JOULES); + this.renderUniversalDisplay(35, 45, this.multimeter.getNetwork().energyGraph.getPeak(), mouseX, mouseY, Unit.JOULES); this.fontRenderer.drawString(EnumColor.ORANGE + LanguageUtility.getLocal("gui.resonantinduction.multimeter.redstone"), 35, 58, 4210752); this.fontRenderer.drawString(EnumColor.RED + LanguageUtility.getLocal("gui.resonantinduction.multimeter." + this.multimeter.getMode().display), 35, 68, 4210752); this.fontRenderer.drawString(Unit.JOULES.name + "(s)", 35, 100, 4210752); diff --git a/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java b/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java index 00aebadd..8f66a696 100644 --- a/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java +++ b/src/main/java/resonantinduction/electrical/multimeter/MultimeterNetwork.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import universalelectricity.api.net.IUpdate; import universalelectricity.api.vector.Vector3; import universalelectricity.core.net.Network; @@ -12,8 +14,13 @@ import universalelectricity.core.net.NetworkTickHandler; public class MultimeterNetwork extends Network implements IUpdate { public final List displayInformation = new ArrayList(); - public Graph valueGraph = new Graph(20 * 10); - public Graph capacityGraph = new Graph(20 * 10); + + /** + * The available graphs to be handled. + */ + private final List graphs = new ArrayList(); + public final GraphL energyGraph = new GraphL(20 * 10); + public final GraphL energyCapacityGraph = new GraphL(20 * 10); /** * The absolute center of the multimeter screens. @@ -40,6 +47,12 @@ public class MultimeterNetwork extends Network 0; } - public void updateGraph(long detectedValue, long detectedCapcity) - { - queueGraphValue += detectedValue; - queueGraphCapacity += detectedCapcity; - doUpdate = true; - } - @Override public boolean isValidConnector(PartMultimeter node) { @@ -111,7 +119,7 @@ public class MultimeterNetwork extends Network conductor = ((IConductor) tileEntity).getInstance(receivingSide.getOpposite()); + + if (conductor == null) + { + conductor = ((IConductor) tileEntity).getInstance(ForgeDirection.UNKNOWN); + } + + if (conductor != null) + { + // TODO: Conductor may always return null in some cases. + IEnergyNetwork network = conductor.getNetwork(); + getNetwork().energyGraph.queue(network.getLastBuffer()); + } + } + + if (tileEntity instanceof IMechanical) + { + IMechanical instance = ((IMechanical) tileEntity).getInstance(receivingSide); + + if (instance != null) + { + getNetwork().energyGraph.queue((long) (instance.getTorque() * instance.getAngularVelocity())); + } + } + + CompatibilityModule.getEnergy(tileEntity, receivingSide); + } + @Override public void readDesc(MCDataInput packet) { @@ -257,8 +293,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector information = new ArrayList(); - information.add(UnitDisplay.getDisplay(part.getNetwork().valueGraph.get(0), Unit.JOULES)); + information.add(UnitDisplay.getDisplay(part.getNetwork().energyGraph.get(0), Unit.JOULES)); - if (part.getNetwork().capacityGraph.get(0) > 0) + if (part.getNetwork().energyCapacityGraph.get(0) > 0) { String str = information.get(0); - str = str + "/" + UnitDisplay.getDisplay(part.getNetwork().capacityGraph.get(0), Unit.JOULES); + str = str + "/" + UnitDisplay.getDisplay(part.getNetwork().energyCapacityGraph.get(0), Unit.JOULES); information.set(0, str); }