Multimeter screens now render

This commit is contained in:
Calclavia 2014-01-29 22:42:37 +08:00
parent 8b8d2b9ee7
commit 5189633823
3 changed files with 69 additions and 69 deletions

View file

@ -1,6 +1,7 @@
package resonantinduction.electrical.multimeter; package resonantinduction.electrical.multimeter;
import universalelectricity.api.vector.Vector2; import net.minecraft.nbt.NBTTagCompound;
import universalelectricity.api.vector.Vector3;
import universalelectricity.core.net.Network; import universalelectricity.core.net.Network;
public class MultimeterNetwork extends Network<MultimeterNetwork, PartMultimeter> public class MultimeterNetwork extends Network<MultimeterNetwork, PartMultimeter>
@ -8,75 +9,48 @@ public class MultimeterNetwork extends Network<MultimeterNetwork, PartMultimeter
/** /**
* The absolute center of the multimeter screens. * The absolute center of the multimeter screens.
*/ */
public Vector2 center = new Vector2(); public Vector3 center = new Vector3();
/** /**
* The relative bound sizes. * The relative bound sizes.
*/ */
public Vector2 upperBound = new Vector2(); public Vector3 upperBound = new Vector3();
public Vector2 lowerBound = new Vector2(); public Vector3 lowerBound = new Vector3();
@Override @Override
public void reconstruct() public void reconstruct()
{ {
upperBound = null;
lowerBound = null;
super.reconstruct(); super.reconstruct();
center = upperBound.midPoint(lowerBound); center = upperBound.midPoint(lowerBound);
upperBound.subtract(center); upperBound.subtract(center);
lowerBound.subtract(center); lowerBound.subtract(center);
} }
@Override
public boolean isValidConnector(PartMultimeter node)
{
return node.world() != null && node.tile() != null;
}
@Override @Override
protected void reconstructConnector(PartMultimeter node) protected void reconstructConnector(PartMultimeter node)
{ {
node.setNetwork(this); node.setNetwork(this);
/** if (upperBound == null)
* Computer upper bound
*/
if (node.getPosition().y > upperBound.x)
{ {
upperBound.x = node.getPosition().y; upperBound = node.getPosition().translate(0.5);
} }
if (node.getDirection().offsetX == 0) if (lowerBound == null)
{ {
if (node.getPosition().x > upperBound.y) lowerBound = node.getPosition().translate(0.5);
{
upperBound.y = node.getPosition().x;
}
} }
if (node.getDirection().offsetZ == 0) upperBound = upperBound.max(node.getPosition().translate(0.5));
{ lowerBound = lowerBound.min(node.getPosition().translate(0.5));
if (node.getPosition().z > upperBound.y)
{
upperBound.y = node.getPosition().z;
}
}
/**
* Computer lower bound
*/
if (node.getPosition().y < lowerBound.x)
{
lowerBound.x = node.getPosition().y;
}
if (node.getDirection().offsetX == 0)
{
if (node.getPosition().x < lowerBound.y)
{
lowerBound.y = node.getPosition().x;
}
}
if (node.getDirection().offsetZ == 0)
{
if (node.getPosition().z < lowerBound.y)
{
lowerBound.y = node.getPosition().z;
}
}
} }
@Override @Override

View file

@ -82,6 +82,7 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public Set<EntityPlayer> playersUsing = new HashSet<EntityPlayer>(); public Set<EntityPlayer> playersUsing = new HashSet<EntityPlayer>();
private DetectMode detectMode = DetectMode.NONE; private DetectMode detectMode = DetectMode.NONE;
private long peakDetection; private long peakDetection;
private long energyLimit; private long energyLimit;
private long detectedEnergy; private long detectedEnergy;
@ -107,15 +108,18 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public void refresh() public void refresh()
{ {
if (!world().isRemote) if (world() != null && !world().isRemote)
{ {
for (Object obj : getConnections()) for (Object obj : getConnections())
{ {
if (obj instanceof PartMultimeter) if (obj instanceof PartMultimeter)
{ {
this.getNetwork().merge(((PartMultimeter) obj).getNetwork()); getNetwork().merge(((PartMultimeter) obj).getNetwork());
} }
} }
getNetwork().reconstruct();
writeDesc(getWriteStream());
} }
} }
@ -209,7 +213,9 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
if (prevDetectedEnergy != detectedEnergy) if (prevDetectedEnergy != detectedEnergy)
{ {
this.getWriteStream().writeByte(3).writeByte((byte) detectMode.ordinal()).writeLong(detectedEnergy).writeLong(detectedAverageEnergy).writeLong(energyLimit); writeDesc(getWriteStream());
// this.getWriteStream().writeByte(3).writeByte((byte)
// detectMode.ordinal()).writeLong(detectedEnergy).writeLong(detectedAverageEnergy).writeLong(energyLimit);
} }
} }
} }
@ -218,7 +224,9 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
{ {
for (EntityPlayer player : playersUsing) for (EntityPlayer player : playersUsing)
{ {
this.getWriteStream().writeByte(3).writeByte((byte) detectMode.ordinal()).writeLong(detectedEnergy).writeLong(detectedAverageEnergy).writeLong(energyLimit); writeDesc(getWriteStream());
// this.getWriteStream().writeByte(3).writeByte((byte)
// detectMode.ordinal()).writeLong(detectedEnergy).writeLong(detectedAverageEnergy).writeLong(energyLimit);
} }
} }
} }
@ -226,21 +234,24 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
@Override @Override
public void readDesc(MCDataInput packet) public void readDesc(MCDataInput packet)
{ {
packet.readByte();
this.side = packet.readByte(); this.side = packet.readByte();
detectMode = DetectMode.values()[packet.readByte()]; detectMode = DetectMode.values()[packet.readByte()];
detectedEnergy = packet.readLong(); refresh();
detectedAverageEnergy = packet.readLong(); getNetwork().center = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
energyLimit = packet.readLong(); getNetwork().upperBound = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
getNetwork().lowerBound = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
} }
@Override @Override
public void writeDesc(MCDataOutput packet) public void writeDesc(MCDataOutput packet)
{ {
packet.writeByte(0);
packet.writeByte(this.side); packet.writeByte(this.side);
packet.writeByte((byte) detectMode.ordinal()); packet.writeByte((byte) detectMode.ordinal());
packet.writeLong(detectedEnergy); packet.writeNBTTagCompound(getNetwork().center.writeToNBT(new NBTTagCompound()));
packet.writeLong(detectedAverageEnergy); packet.writeNBTTagCompound(getNetwork().upperBound.writeToNBT(new NBTTagCompound()));
packet.writeLong(energyLimit); packet.writeNBTTagCompound(getNetwork().lowerBound.writeToNBT(new NBTTagCompound()));
} }
@Override @Override
@ -251,7 +262,16 @@ public class PartMultimeter extends JCuboidPart implements IConnector<Multimeter
public void read(MCDataInput packet, int packetID) public void read(MCDataInput packet, int packetID)
{ {
if (packetID == 1) if (packetID == 0)
{
this.side = packet.readByte();
detectMode = DetectMode.values()[packet.readByte()];
refresh();
getNetwork().center = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
getNetwork().upperBound = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
getNetwork().lowerBound = new universalelectricity.api.vector.Vector3(packet.readNBTTagCompound());
}
else if (packetID == 1)
{ {
energyLimit = packet.readLong(); energyLimit = packet.readLong();
} }

View file

@ -1,21 +1,16 @@
package resonantinduction.electrical.multimeter; package resonantinduction.electrical.multimeter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import calclavia.lib.render.RenderUtility;
import resonantinduction.archaic.Archaic; import resonantinduction.archaic.Archaic;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.mechanical.Mechanical; import universalelectricity.api.vector.Vector3;
import universalelectricity.api.energy.UnitDisplay; import calclavia.lib.render.RenderUtility;
import universalelectricity.api.energy.UnitDisplay.Unit;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -38,7 +33,6 @@ public class RenderMultimeter
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
RenderUtility.rotateFaceBlockToSideOutwards(part.getDirection().getOpposite()); RenderUtility.rotateFaceBlockToSideOutwards(part.getDirection().getOpposite());
GL11.glPushMatrix();
RenderUtility.bind(TextureMap.locationBlocksTexture); RenderUtility.bind(TextureMap.locationBlocksTexture);
// Render the main panel // Render the main panel
RenderUtility.renderCube(-0.5, -0.05, -0.5, 0.5, 0.05, 0.5, Archaic.blockMachinePart, ResonantInduction.loadedIconMap.get(Reference.PREFIX + "multimeter_screen")); RenderUtility.renderCube(-0.5, -0.05, -0.5, 0.5, 0.05, 0.5, Archaic.blockMachinePart, ResonantInduction.loadedIconMap.get(Reference.PREFIX + "multimeter_screen"));
@ -58,10 +52,22 @@ public class RenderMultimeter
if (((dir == ForgeDirection.WEST || dir == ForgeDirection.EAST) && !part.hasMultimeter(part.x(), part.y(), part.z() + 1)) || ((dir == ForgeDirection.SOUTH || dir == ForgeDirection.NORTH) && !part.hasMultimeter(part.x() - 1, part.y(), part.z()))) if (((dir == ForgeDirection.WEST || dir == ForgeDirection.EAST) && !part.hasMultimeter(part.x(), part.y(), part.z() + 1)) || ((dir == ForgeDirection.SOUTH || dir == ForgeDirection.NORTH) && !part.hasMultimeter(part.x() - 1, part.y(), part.z())))
RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Archaic.blockMachinePart, null, metadata); RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Archaic.blockMachinePart, null, metadata);
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glTranslated(0, 0.05, 0);
// Render all the multimeter text
RenderUtility.renderText("" + part.getDetectedEnergy(), 0.8f);
GL11.glPopMatrix();
}
/**
* Only one block renders this text.
* Render all the multimeter text
*/
if (part.getNetwork().center.distance(new Vector3(part.x(), part.y(), part.z()).translate(0.5)) < 0.8)
{
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
Vector3 centerTranslation = part.getNetwork().center.clone().subtract(part.x(), part.y(), part.z()).add(-0.5);
GL11.glTranslated(centerTranslation.x, centerTranslation.y, centerTranslation.z);
RenderUtility.rotateFaceBlockToSideOutwards(part.getDirection().getOpposite());
GL11.glTranslated(0, 0.05, 0);
RenderUtility.renderText("" + part.getDetectedEnergy(), 0.8f, 0.8f);
GL11.glPopMatrix();
}
}
} }