Created a debug frame for pipes, improved visuals of debug frames

This commit is contained in:
Robert S 2014-06-15 14:06:10 -04:00
parent 324eb54cd0
commit d7cb8c8a64
7 changed files with 244 additions and 12 deletions

View file

@ -3,17 +3,15 @@ package resonantinduction.mechanical.energy.grid;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.Label; import java.awt.Label;
import java.awt.Panel; import java.awt.Panel;
import java.util.Map.Entry;
import javax.swing.AbstractListModel; import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel; import javax.swing.DefaultListModel;
import javax.swing.JList; import javax.swing.JList;
import javax.swing.JScrollPane;
import net.minecraftforge.common.ForgeDirection;
import resonant.api.grid.INode; import resonant.api.grid.INode;
import resonant.api.grid.INodeProvider; import resonant.api.grid.INodeProvider;
import resonantinduction.core.debug.FrameNodeDebug; import resonantinduction.core.debug.FrameNodeDebug;
import resonantinduction.core.debug.UpdatePanel;
import resonantinduction.core.debug.UpdatedLabel; import resonantinduction.core.debug.UpdatedLabel;
/** Java GUI used to help debug gear information /** Java GUI used to help debug gear information
@ -31,7 +29,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug
} }
@Override @Override
public void buildTop(Panel panel) public void buildTop(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(1, 2, 0, 0)); panel.setLayout(new GridLayout(1, 2, 0, 0));
UpdatedLabel tickLabel = new UpdatedLabel("Node: ") UpdatedLabel tickLabel = new UpdatedLabel("Node: ")
@ -56,7 +54,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug
} }
@Override @Override
public void buildRight(Panel panel) public void buildRight(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(2, 1, 0, 0)); panel.setLayout(new GridLayout(2, 1, 0, 0));
@ -91,7 +89,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug
} }
@Override @Override
public void buildLeft(Panel panel) public void buildLeft(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(3, 1, 0, 0)); panel.setLayout(new GridLayout(3, 1, 0, 0));
UpdatedLabel velLabel = new UpdatedLabel("Vel: ") UpdatedLabel velLabel = new UpdatedLabel("Vel: ")

View file

@ -1,9 +1,12 @@
package resonantinduction.mechanical.fluid.pipe; package resonantinduction.mechanical.fluid.pipe;
import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidContainerRegistry;
@ -12,6 +15,7 @@ import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonant.api.grid.INode; import resonant.api.grid.INode;
import resonant.core.ResonantEngine;
import resonant.lib.type.EvictingList; import resonant.lib.type.EvictingList;
import resonant.lib.utility.WorldUtility; import resonant.lib.utility.WorldUtility;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
@ -19,12 +23,14 @@ import resonantinduction.core.grid.fluid.FluidPressureNode;
import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.grid.fluid.IPressureNodeProvider;
import resonantinduction.core.prefab.part.PartFramedNode; import resonantinduction.core.prefab.part.PartFramedNode;
import resonantinduction.mechanical.Mechanical; import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.energy.grid.MechanicalNodeFrame;
import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataInput;
import codechicken.lib.render.CCRenderState; import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.IconTransformation; import codechicken.lib.render.IconTransformation;
import codechicken.lib.render.RenderUtils; import codechicken.lib.render.RenderUtils;
import codechicken.lib.vec.Translation; import codechicken.lib.vec.Translation;
import codechicken.microblock.IHollowConnect; import codechicken.microblock.IHollowConnect;
import codechicken.multipart.ControlKeyModifer;
import codechicken.multipart.JNormalOcclusion; import codechicken.multipart.JNormalOcclusion;
import codechicken.multipart.TSlottedPart; import codechicken.multipart.TSlottedPart;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -39,6 +45,7 @@ public class PartPipe extends PartFramedNode<EnumPipeMaterial, FluidPressureNode
/** Computes the average fluid for client to render. */ /** Computes the average fluid for client to render. */
private EvictingList<Integer> averageTankData = new EvictingList<Integer>(20); private EvictingList<Integer> averageTankData = new EvictingList<Integer>(20);
private boolean markPacket = true; private boolean markPacket = true;
private PipeNodeFrame frame = null;
public PartPipe() public PartPipe()
{ {
@ -81,6 +88,11 @@ public class PartPipe extends PartFramedNode<EnumPipeMaterial, FluidPressureNode
{ {
sendFluidUpdate(); sendFluidUpdate();
markPacket = false; markPacket = false;
}
if (frame != null)
{
frame.update();
} }
} }
@ -220,4 +232,44 @@ public class PartPipe extends PartFramedNode<EnumPipeMaterial, FluidPressureNode
public void onFluidChanged() public void onFluidChanged()
{ {
} }
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack itemStack)
{
if (ResonantEngine.runningAsDev)
{
if (itemStack != null && !world().isRemote)
{
if (itemStack.getItem().itemID == Item.stick.itemID)
{
//Set the nodes debug mode
if (ControlKeyModifer.isControlDown(player))
{
//Opens a debug GUI
if (frame == null)
{
frame = new PipeNodeFrame(this);
frame.showDebugFrame();
} //Closes the debug GUI
else
{
frame.closeDebugFrame();
frame = null;
}
}
}
}
}
return super.activate(player, hit, itemStack);
}
@Override
public void onWorldSeparate()
{
super.onWorldSeparate();
if (frame != null)
{
frame.closeDebugFrame();
}
}
} }

View file

@ -0,0 +1,150 @@
package resonantinduction.mechanical.fluid.pipe;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import net.minecraftforge.common.ForgeDirection;
import resonant.api.grid.INode;
import resonant.api.grid.INodeProvider;
import resonantinduction.core.debug.FrameNodeDebug;
import resonantinduction.core.debug.UpdatePanel;
import resonantinduction.core.debug.UpdatedLabel;
/** Java GUI used to help debug pipe information
*
* @author Darkguardsman */
@SuppressWarnings("serial")
public class PipeNodeFrame extends FrameNodeDebug
{
public PipeNodeFrame(INodeProvider node)
{
super(node, PipePressureNode.class);
}
@Override
public void buildTop(UpdatePanel panel)
{
panel.setLayout(new GridLayout(1, 2, 0, 0));
UpdatedLabel tickLabel = new UpdatedLabel("Node: ")
{
@Override
public String buildLabel()
{
return super.buildLabel() + PipeNodeFrame.this.getNode();
}
};
panel.add(tickLabel);
UpdatedLabel xLabel = new UpdatedLabel("Parent: ")
{
@Override
public String buildLabel()
{
return super.buildLabel() + (PipeNodeFrame.this.getNode() != null ? PipeNodeFrame.this.getNode().pipe() : "null");
}
};
panel.add(xLabel);
}
@Override
public void buildRight(UpdatePanel panel)
{
TableModel dataModel = new AbstractTableModel()
{
@Override
public int getColumnCount()
{
return 3;
}
@Override
public String getColumnName(int column)
{
switch (column)
{
case 0:
return "Direction";
case 1:
return "Tile";
case 2:
return "Pressure";
}
return "---";
}
@Override
public int getRowCount()
{
if (getNode() != null && getNode().getConnections() != null)
{
return getNode().getConnections().size();
}
return 10;
}
@Override
public Object getValueAt(int row, int col)
{
if (getNode() != null && getNode().getConnections() != null)
{
ForgeDirection dir = (ForgeDirection) getNode().getConnections().values().toArray()[row];
switch(col)
{
case 0: return dir;
case 1: return getNode().getConnections().keySet().toArray()[row];
case 2: return getNode().getPressure(dir);
}
}
return "00000";
}
};
JTable table = new JTable(dataModel);
table.setAutoCreateRowSorter(true);
JScrollPane tableScroll = new JScrollPane(table);
Dimension tablePreferred = tableScroll.getPreferredSize();
tableScroll.setPreferredSize(new Dimension(tablePreferred.width, tablePreferred.height / 3));
panel.add(tableScroll);
}
@Override
public void buildLeft(UpdatePanel panel)
{
panel.setLayout(new GridLayout(2, 1, 0, 0));
UpdatedLabel velLabel = new UpdatedLabel("Fluid: ")
{
@Override
public String buildLabel()
{
return super.buildLabel() + PipeNodeFrame.this.getNode().pipe().tank.getFluid();
}
};
panel.add(velLabel);
UpdatedLabel angleLabel = new UpdatedLabel("Volume: ")
{
@Override
public String buildLabel()
{
return super.buildLabel() + PipeNodeFrame.this.getNode().pipe().tank.getFluidAmount() + "mb";
}
};
panel.add(angleLabel);
}
@Override
public PipePressureNode getNode()
{
INode node = super.getNode();
if (node instanceof PipePressureNode)
{
return (PipePressureNode) node;
}
return null;
}
}

View file

@ -103,4 +103,10 @@ public class PipePressureNode extends FluidPressureNode
return false; return false;
} }
@Override
public String toString()
{
return this.getClass().getSimpleName() + this.hashCode();
}
} }

View file

@ -4,10 +4,15 @@ import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
import java.awt.Frame; import java.awt.Frame;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.Panel; import java.awt.Panel;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import universalelectricity.api.vector.IVectorWorld; import universalelectricity.api.vector.IVectorWorld;
@ -36,12 +41,16 @@ public class FrameDebug extends Frame implements IVectorWorld
/** Called to build the base of the GUI */ /** Called to build the base of the GUI */
protected void buildGUI() protected void buildGUI()
{ {
Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
UpdatePanel topPanel = new UpdatePanel(); UpdatePanel topPanel = new UpdatePanel();
UpdatePanel botPanel = new UpdatePanel(); UpdatePanel botPanel = new UpdatePanel();
UpdatePanel leftPanel = new UpdatePanel(); UpdatePanel leftPanel = new UpdatePanel();
UpdatePanel rightPanel = new UpdatePanel(); UpdatePanel rightPanel = new UpdatePanel();
setLayout(new BorderLayout()); topPanel.setBorder(loweredetched);
botPanel.setBorder(loweredetched);
leftPanel.setBorder(loweredetched);
rightPanel.setBorder(loweredetched);
buildTop(topPanel); buildTop(topPanel);
buildBottom(botPanel); buildBottom(botPanel);
@ -66,7 +75,7 @@ public class FrameDebug extends Frame implements IVectorWorld
} }
/** Top are of the Frame */ /** Top are of the Frame */
public void buildTop(Panel panel) public void buildTop(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(1, 2, 0, 0)); panel.setLayout(new GridLayout(1, 2, 0, 0));
UpdatedLabel tickLabel = new UpdatedLabel("Tile: ") UpdatedLabel tickLabel = new UpdatedLabel("Tile: ")
@ -81,7 +90,7 @@ public class FrameDebug extends Frame implements IVectorWorld
} }
/** Bottom are of the Frame */ /** Bottom are of the Frame */
public void buildBottom(Panel panel) public void buildBottom(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(1, 4, 0, 0)); panel.setLayout(new GridLayout(1, 4, 0, 0));
UpdatedLabel tickLabel = new UpdatedLabel("Tick: ") UpdatedLabel tickLabel = new UpdatedLabel("Tick: ")
@ -126,7 +135,7 @@ public class FrameDebug extends Frame implements IVectorWorld
} }
/** Left are of the Frame */ /** Left are of the Frame */
public void buildRight(Panel panel) public void buildRight(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(1, 2, 0, 0)); panel.setLayout(new GridLayout(1, 2, 0, 0));
UpdatedLabel tickLabel = new UpdatedLabel("Valid: ") UpdatedLabel tickLabel = new UpdatedLabel("Valid: ")
@ -141,7 +150,7 @@ public class FrameDebug extends Frame implements IVectorWorld
} }
/** Right are of the Frame */ /** Right are of the Frame */
public void buildLeft(Panel panel) public void buildLeft(UpdatePanel panel)
{ {
panel.setLayout(new GridLayout(4, 1, 0, 0)); panel.setLayout(new GridLayout(4, 1, 0, 0));
UpdatedLabel block_label = new UpdatedLabel("BLOCK: ") UpdatedLabel block_label = new UpdatedLabel("BLOCK: ")

View file

@ -1,13 +1,24 @@
package resonantinduction.core.debug; package resonantinduction.core.debug;
import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
import java.awt.Panel; import java.awt.Panel;
import javax.swing.JPanel;
/** @author Darkguardsman */ /** @author Darkguardsman */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class UpdatePanel extends Panel implements IUpdate public class UpdatePanel extends JPanel implements IUpdate
{ {
public UpdatePanel()
{
}
public UpdatePanel(BorderLayout borderLayout)
{
super(borderLayout);
}
@Override @Override
public void update() public void update()
{ {

View file

@ -308,4 +308,10 @@ public abstract class PartFramedNode<M extends Enum, N extends Node, T extends I
super.load(nbt); super.load(nbt);
node.load(nbt); node.load(nbt);
} }
@Override
public String toString()
{
return this.getClass().getSimpleName() + this.hashCode();
}
} }