Multimeter now renders connected textures
This commit is contained in:
parent
411c3b8161
commit
356edf9b62
4 changed files with 55 additions and 143 deletions
|
@ -34,10 +34,10 @@ public class ItemMultimeter extends ItemMultipartBase
|
|||
/**
|
||||
* If we're clicking on the multipart
|
||||
*/
|
||||
if (world.getBlockTileEntity(pos.x, pos.y, pos.z) instanceof TileMultipart && !ControlKeyModifer.isControlDown(player))
|
||||
/*if (world.getBlockTileEntity(pos.x, pos.y, pos.z) instanceof TileMultipart && !ControlKeyModifer.isControlDown(player))
|
||||
{
|
||||
pos.offset(side ^ 1, -1);
|
||||
}
|
||||
}*/
|
||||
|
||||
PartMultimeter part = (PartMultimeter) MultiPartRegistry.createPart("resonant_induction_multimeter", false);
|
||||
|
||||
|
@ -45,7 +45,7 @@ public class ItemMultimeter extends ItemMultipartBase
|
|||
{
|
||||
part.preparePlacement(side, itemStack.getItemDamage());
|
||||
}
|
||||
System.out.println("OFFSET"+pos);
|
||||
|
||||
return part;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ import codechicken.multipart.JNormalOcclusion;
|
|||
import codechicken.multipart.NormalOcclusionTest;
|
||||
import codechicken.multipart.TFacePart;
|
||||
import codechicken.multipart.TMultiPart;
|
||||
import codechicken.multipart.TileMultipart;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
|
@ -48,7 +49,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||
* @author Calclavia
|
||||
*
|
||||
*/
|
||||
public class PartMultimeter extends JCuboidPart implements TFacePart, JNormalOcclusion, IPacketReceiver
|
||||
public class PartMultimeter extends JCuboidPart implements TFacePart, JNormalOcclusion, IRedstonePart, IPacketReceiver
|
||||
{
|
||||
public static Cuboid6[][] bounds = new Cuboid6[6][2];
|
||||
|
||||
|
@ -95,6 +96,23 @@ public class PartMultimeter extends JCuboidPart implements TFacePart, JNormalOcc
|
|||
this.side = (byte) (side ^ 1);
|
||||
}
|
||||
|
||||
public boolean hasMultimeter(int x, int y, int z)
|
||||
{
|
||||
TileEntity tileEntity = world().getBlockTileEntity(x, y, z);
|
||||
|
||||
if (tileEntity instanceof TileMultipart)
|
||||
{
|
||||
TMultiPart part = ((TileMultipart) tileEntity).partMap(side);
|
||||
|
||||
if (part instanceof PartMultimeter)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)
|
||||
{
|
||||
|
@ -379,19 +397,19 @@ public class PartMultimeter extends JCuboidPart implements TFacePart, JNormalOcc
|
|||
}
|
||||
}
|
||||
|
||||
// @Override
|
||||
@Override
|
||||
public boolean canConnectRedstone(int arg0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// @Override
|
||||
@Override
|
||||
public int strongPowerLevel(int arg0)
|
||||
{
|
||||
return redstoneOn ? 14 : 0;
|
||||
}
|
||||
|
||||
// @Override
|
||||
@Override
|
||||
public int weakPowerLevel(int arg0)
|
||||
{
|
||||
return redstoneOn ? 14 : 0;
|
||||
|
|
|
@ -2,13 +2,17 @@ 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.util.ResourceLocation;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import calclavia.lib.render.RenderUtility;
|
||||
import resonantinduction.archaic.Archaic;
|
||||
import resonantinduction.core.Reference;
|
||||
import resonantinduction.core.ResonantInduction;
|
||||
import resonantinduction.mechanical.Mechanical;
|
||||
import universalelectricity.api.energy.UnitDisplay;
|
||||
import universalelectricity.api.energy.UnitDisplay.Unit;
|
||||
import cpw.mods.fml.client.FMLClientHandler;
|
||||
|
@ -18,6 +22,8 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||
/**
|
||||
* Class used to render text onto the multimeter block.
|
||||
*
|
||||
* The more space we have, the more information and detail we render.
|
||||
*
|
||||
* @author Calclavia
|
||||
*
|
||||
*/
|
||||
|
@ -29,145 +35,33 @@ public class RenderMultimeter
|
|||
|
||||
public static void render(PartMultimeter part, double x, double y, double z)
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
RenderUtility.rotateFaceBlockToSide(part.getDirection());
|
||||
|
||||
/**
|
||||
* The more space we have, the more information we render.
|
||||
*
|
||||
* 1x1: Show storage
|
||||
* 1x2: Show storage + capacity
|
||||
* 3x3: Show graph behind
|
||||
*/
|
||||
|
||||
RenderUtility.renderText("test", 0, 1, x, y, z);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
}
|
||||
|
||||
public static void renderOld(PartMultimeter tileEntity, double x, double y, double z)
|
||||
{
|
||||
ForgeDirection direction = tileEntity.getDirection();
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
|
||||
GL11.glRotatef(90, 0, 0, 1);
|
||||
GL11.glTranslated(0, -1, 0);
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case UP:
|
||||
GL11.glRotatef(90, 0, 1, 0);
|
||||
break;
|
||||
case DOWN:
|
||||
GL11.glRotatef(-90, 0, 1, 0);
|
||||
break;
|
||||
case NORTH:
|
||||
GL11.glRotatef(180, 0, 1, 0);
|
||||
GL11.glRotatef(180, 0, 0, 1);
|
||||
GL11.glTranslatef(0, -2, 0);
|
||||
break;
|
||||
case SOUTH:
|
||||
break;
|
||||
case WEST:
|
||||
GL11.glTranslatef(0, 1, 1);
|
||||
GL11.glRotatef(-90, 1, 0, 0);
|
||||
break;
|
||||
case EAST:
|
||||
GL11.glTranslatef(0, 1, -1);
|
||||
GL11.glRotatef(90, 1, 0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE);
|
||||
MODEL.render(0.0625f);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
|
||||
RenderUtility.rotateFaceBlockToSideOutwards(part.getDirection().getOpposite());
|
||||
GL11.glPushMatrix();
|
||||
GL11.glPolygonOffset(-10, -10);
|
||||
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
|
||||
|
||||
float dx = 1F / 16;
|
||||
float dz = 1F / 16;
|
||||
float displayWidth = 1 - 2F / 16;
|
||||
float displayHeight = 1 - 2F / 16;
|
||||
GL11.glTranslatef((float) x, (float) y, (float) z);
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case UP:
|
||||
GL11.glTranslatef(1, 1, 0);
|
||||
GL11.glRotatef(180, 1, 0, 0);
|
||||
GL11.glRotatef(180, 0, 1, 0);
|
||||
GL11.glTranslatef(0, -0.9f, -0.1f);
|
||||
break;
|
||||
case DOWN:
|
||||
GL11.glRotatef(180, 0, 1, 0);
|
||||
GL11.glTranslatef(-1, -0.9f, -1.1f);
|
||||
break;
|
||||
case SOUTH:
|
||||
GL11.glTranslatef(1, 1, 1);
|
||||
GL11.glRotatef(180, 0, 1, 0);
|
||||
GL11.glRotatef(90, 1, 0, 0);
|
||||
GL11.glTranslatef(0, -0.9f, -0.1f);
|
||||
break;
|
||||
case NORTH:
|
||||
GL11.glTranslatef(0, 1, 0);
|
||||
GL11.glRotatef(0, 0, 1, 0);
|
||||
GL11.glRotatef(90, 1, 0, 0);
|
||||
GL11.glTranslatef(0, -0.9f, -0.1f);
|
||||
break;
|
||||
case EAST:
|
||||
GL11.glTranslatef(1, 1, 0);
|
||||
GL11.glRotatef(-90, 0, 1, 0);
|
||||
GL11.glRotatef(90, 1, 0, 0);
|
||||
GL11.glTranslatef(0, -0.9f, -0.1f);
|
||||
break;
|
||||
case WEST:
|
||||
GL11.glTranslatef(0, 1, 1);
|
||||
GL11.glRotatef(90, 0, 1, 0);
|
||||
GL11.glRotatef(90, 1, 0, 0);
|
||||
GL11.glTranslatef(0, -0.9f, -0.1f);
|
||||
break;
|
||||
}
|
||||
|
||||
GL11.glTranslatef(dx + displayWidth / 2, 1F, dz + displayHeight / 2);
|
||||
GL11.glRotatef(-90, 1, 0, 0);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer;
|
||||
|
||||
String joules = UnitDisplay.getDisplayShort(tileEntity.getDetectedEnergy(), Unit.JOULES);
|
||||
|
||||
int stringWidth = Math.max(fontRenderer.getStringWidth(joules), 0);
|
||||
// maxWidth += 8;
|
||||
int lineHeight = fontRenderer.FONT_HEIGHT + 2;
|
||||
int requiredHeight = lineHeight * 1;
|
||||
|
||||
/**
|
||||
* Create an average scale.
|
||||
*/
|
||||
float scaleX = displayWidth / stringWidth;
|
||||
float scaleY = displayHeight / requiredHeight;
|
||||
float scale = (float) (Math.min(scaleX, scaleY) * 0.8);
|
||||
GL11.glScalef(scale, -scale, scale);
|
||||
GL11.glDepthMask(false);
|
||||
|
||||
int realHeight = (int) Math.floor(displayHeight / scale);
|
||||
int realWidth = (int) Math.floor(displayWidth / scale);
|
||||
|
||||
int offsetY = (realHeight - requiredHeight) / 2;
|
||||
int offsetX = (realWidth - stringWidth) / 2;
|
||||
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
fontRenderer.drawString(joules, offsetX - realWidth / 2, 1 + offsetY - realHeight / 2 + 0 * lineHeight, 1);
|
||||
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GL11.glDepthMask(true);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL);
|
||||
RenderUtility.bind(TextureMap.locationBlocksTexture);
|
||||
// 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"));
|
||||
ForgeDirection dir = part.getDirection();
|
||||
final int metadata = 8;
|
||||
// Render edges
|
||||
// UP
|
||||
if (!part.hasMultimeter(part.x(), part.y() + 1, part.z()))
|
||||
RenderUtility.renderCube(-0.501, -0.0501, -0.501, 0.501, 0.0501, -0.44, Archaic.blockMachinePart, null, metadata);
|
||||
// DOWN
|
||||
if (!part.hasMultimeter(part.x(), part.y() - 1, part.z()))
|
||||
RenderUtility.renderCube(-0.501, -0.0501, 0.44, 0.501, 0.0501, 0.501, Archaic.blockMachinePart, null, metadata);
|
||||
// LEFT
|
||||
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.501, -0.0501, -0.501, -0.44, 0.0501, 0.501, Archaic.blockMachinePart, null, metadata);
|
||||
// RIGHT
|
||||
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);
|
||||
GL11.glPopMatrix();
|
||||
GL11.glTranslated(0, 0.05, 0);
|
||||
// Render all the multimeter text
|
||||
RenderUtility.renderText("" + part.getDetectedEnergy(), 0.8f);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Loading…
Add table
Reference in a new issue