Started incomplete work on the multimeter screen

This commit is contained in:
Calclavia 2014-01-29 12:54:20 +08:00
parent 4887997646
commit 47834c5e15
7 changed files with 75 additions and 87 deletions

View file

@ -0,0 +1,14 @@
package resonantinduction.api;
import java.util.List;
/**
* Provides extra information for the display units (multimeter) to display.
*
* @author Calclavia
*
*/
public interface IInformation
{
public void getInformation(List<String> info);
}

View file

@ -1,11 +1,15 @@
package resonantinduction.core; package resonantinduction.core;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.util.Icon;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidRegistry;
@ -39,6 +43,8 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/** /**
* The core module of Resonant Induction * The core module of Resonant Induction
@ -95,6 +101,7 @@ public class ResonantInduction
Settings.load(); Settings.load();
// Register Forge Events // Register Forge Events
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(ResourceGenerator.INSTANCE); MinecraftForge.EVENT_BUS.register(ResourceGenerator.INSTANCE);
MinecraftForge.EVENT_BUS.register(new FluidEventHandler()); MinecraftForge.EVENT_BUS.register(new FluidEventHandler());
@ -136,4 +143,30 @@ public class ResonantInduction
ResourceGenerator.generateOreResources(); ResourceGenerator.generateOreResources();
} }
public static final HashMap<String, Icon> loadedIconMap = new HashMap<String, Icon>();
public void registerIcon(String name, TextureStitchEvent.Pre event)
{
loadedIconMap.put(name, event.map.registerIcon(name));
}
@ForgeSubscribe
@SideOnly(Side.CLIENT)
public void preTextureHook(TextureStitchEvent.Pre event)
{
if (event.map.textureType == 0)
{
registerIcon(Reference.PREFIX + "mixture_flow", event);
registerIcon(Reference.PREFIX + "molten_flow", event);
registerIcon(Reference.PREFIX + "multimeter_screen", event);
}
}
@ForgeSubscribe
@SideOnly(Side.CLIENT)
public void postTextureHook(TextureStitchEvent.Post event)
{
for (Fluid fluid : fluidMaterial)
fluid.setIcons(loadedIconMap.get(Reference.PREFIX + "molten_flow"));
}
} }

View file

@ -1,7 +1,6 @@
package resonantinduction.core.render; package resonantinduction.core.render;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderItem;
@ -22,6 +21,7 @@ import org.lwjgl.opengl.GL11;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.render.RenderUtility; import calclavia.lib.render.RenderUtility;
import calclavia.lib.utility.WorldUtility; import calclavia.lib.utility.WorldUtility;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -155,8 +155,8 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
this.renderText(renderText, side, 0.02f, x, y - 0.35f, z); RenderUtility.renderText(renderText, side, 0.02f, x, y - 0.35f, z);
this.renderText(amount, side, 0.02f, x, y - 0.15f, z); RenderUtility.renderText(amount, side, 0.02f, x, y - 0.15f, z);
} }
} }
@ -176,83 +176,6 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, var11 * scale, var12 * scale); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, var11 * scale, var12 * scale);
} }
private void renderText(String text, int side, float maxScale, double x, double y, double z)
{
GL11.glPushMatrix();
GL11.glPolygonOffset(-10, -10);
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
float displayWidth = 1 - (2 / 16);
float displayHeight = 1 - (2 / 16);
GL11.glTranslated(x, y, z);
switch (side)
{
case 3:
GL11.glTranslatef(0, 1, 0);
GL11.glRotatef(0, 0, 1, 0);
GL11.glRotatef(90, 1, 0, 0);
break;
case 2:
GL11.glTranslatef(1, 1, 1);
GL11.glRotatef(180, 0, 1, 0);
GL11.glRotatef(90, 1, 0, 0);
break;
case 5:
GL11.glTranslatef(0, 1, 1);
GL11.glRotatef(90, 0, 1, 0);
GL11.glRotatef(90, 1, 0, 0);
break;
case 4:
GL11.glTranslatef(1, 1, 0);
GL11.glRotatef(-90, 0, 1, 0);
GL11.glRotatef(90, 1, 0, 0);
break;
}
// Find Center
GL11.glTranslatef(displayWidth / 2, 1F, displayHeight / 2);
GL11.glRotatef(-90, 1, 0, 0);
FontRenderer fontRenderer = this.getFontRenderer();
int requiredWidth = Math.max(fontRenderer.getStringWidth(text), 1);
int lineHeight = fontRenderer.FONT_HEIGHT + 2;
int requiredHeight = lineHeight * 1;
float scaler = 0.8f;
float scaleX = (displayWidth / requiredWidth);
float scaleY = (displayHeight / requiredHeight);
float scale = scaleX * scaler;
if (maxScale > 0)
{
scale = Math.min(scale, maxScale);
}
GL11.glScalef(scale, -scale, scale);
GL11.glDepthMask(false);
int offsetX;
int offsetY;
int realHeight = (int) Math.floor(displayHeight / scale);
int realWidth = (int) Math.floor(displayWidth / scale);
offsetX = (realWidth - requiredWidth) / 2;
offsetY = (realHeight - requiredHeight) / 2;
GL11.glDisable(GL11.GL_LIGHTING);
fontRenderer.drawString("\u00a7f" + text, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL);
GL11.glPopMatrix();
}
private void renderItem(World world, ForgeDirection dir, ItemStack itemStack, Vector3 position, float rotationYaw, int angle) private void renderItem(World world, ForgeDirection dir, ItemStack itemStack, Vector3 position, float rotationYaw, int angle)
{ {
if (itemStack != null) if (itemStack != null)

View file

@ -21,7 +21,7 @@ public class BatteryNetwork extends Network<BatteryNetwork, TileBattery>
* Apply energy loss. * Apply energy loss.
*/ */
double percentageLoss = Math.max(0, (1 - ((double) (getConnectors().size() * 6) / 100d))); double percentageLoss = Math.max(0, (1 - ((double) (getConnectors().size() * 6) / 100d)));
long energyLoss = (long) (percentageLoss * 10); long energyLoss = (long) (percentageLoss * 100);
totalEnergy -= energyLoss; totalEnergy -= energyLoss;
int amountOfNodes = this.getConnectors().size() - exclusion.length; int amountOfNodes = this.getConnectors().size() - exclusion.length;

View file

@ -48,7 +48,7 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia * @author Calclavia
* *
*/ */
public class PartMultimeter extends JCuboidPart implements IPacketReceiver, TFacePart, JNormalOcclusion, IRedstonePart public class PartMultimeter extends JCuboidPart implements TFacePart, JNormalOcclusion, IPacketReceiver
{ {
public static Cuboid6[][] bounds = new Cuboid6[6][2]; public static Cuboid6[][] bounds = new Cuboid6[6][2];
@ -377,19 +377,19 @@ public class PartMultimeter extends JCuboidPart implements IPacketReceiver, TFac
} }
} }
@Override // @Override
public boolean canConnectRedstone(int arg0) public boolean canConnectRedstone(int arg0)
{ {
return true; return true;
} }
@Override //@Override
public int strongPowerLevel(int arg0) public int strongPowerLevel(int arg0)
{ {
return redstoneOn ? 14 : 0; return redstoneOn ? 14 : 0;
} }
@Override //@Override
public int weakPowerLevel(int arg0) public int weakPowerLevel(int arg0)
{ {
return redstoneOn ? 14 : 0; return redstoneOn ? 14 : 0;

View file

@ -7,6 +7,7 @@ import net.minecraftforge.common.ForgeDirection;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import calclavia.lib.render.RenderUtility;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import universalelectricity.api.energy.UnitDisplay; import universalelectricity.api.energy.UnitDisplay;
import universalelectricity.api.energy.UnitDisplay.Unit; import universalelectricity.api.energy.UnitDisplay.Unit;
@ -26,8 +27,25 @@ public class RenderMultimeter
public static final ModelMultimeter MODEL = new ModelMultimeter(); public static final ModelMultimeter MODEL = new ModelMultimeter();
public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "multimeter.png"); public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "multimeter.png");
@SuppressWarnings("incomplete-switch") public static void render(PartMultimeter part, double x, double y, double z)
public static void render(PartMultimeter tileEntity, 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
*/
GL11.glPopMatrix();
}
public static void renderOld(PartMultimeter tileEntity, double x, double y, double z)
{ {
ForgeDirection direction = tileEntity.getDirection(); ForgeDirection direction = tileEntity.getDirection();

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB