diff --git a/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java b/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java index 0cf3764d..fe7027a9 100644 --- a/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java +++ b/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java @@ -12,7 +12,7 @@ public class BatteryNetwork extends Network for (TileBattery battery : this.getConnectors()) { - totalEnergy += battery.getEnergy(null); + totalEnergy += battery.energy.getEnergy(); } int amountOfNodes = this.getConnectors().size() - exclusion.length; @@ -30,11 +30,11 @@ public class BatteryNetwork extends Network { if (battery == firstNode) { - battery.setEnergy(null, totalPerBatteryRemainder); + battery.energy.setEnergy(totalPerBatteryRemainder); } else { - battery.setEnergy(null, totalPerBattery); + battery.energy.setEnergy(totalPerBattery); } } } diff --git a/src/main/java/resonantinduction/electrical/battery/RenderBattery.java b/src/main/java/resonantinduction/electrical/battery/RenderBattery.java index c9dbbe68..6f29294d 100644 --- a/src/main/java/resonantinduction/electrical/battery/RenderBattery.java +++ b/src/main/java/resonantinduction/electrical/battery/RenderBattery.java @@ -5,6 +5,7 @@ package resonantinduction.electrical.battery; import static org.lwjgl.opengl.GL11.glPopMatrix; import static org.lwjgl.opengl.GL11.glPushMatrix; +import static org.lwjgl.opengl.GL11.glRotatef; import static org.lwjgl.opengl.GL11.glScalef; import static org.lwjgl.opengl.GL11.glTranslatef; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -18,6 +19,7 @@ import org.lwjgl.opengl.GL11; import resonantinduction.core.Reference; import universalelectricity.api.vector.Vector3; +import calclavia.lib.render.RenderUtility; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,7 +33,6 @@ public class RenderBattery extends TileEntitySpecialRenderer { public static final ResourceLocation TEXTURE_CAP = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_base_cap_tex.png"); public static final ResourceLocation TEXTURE_CASE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_case_tex.png"); - public static final ResourceLocation TEXTURE_LEVELS = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_levels.png"); public static final WavefrontObject MODEL = (WavefrontObject) AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "battery/battery.obj"); @Override @@ -41,52 +42,88 @@ public class RenderBattery extends TileEntitySpecialRenderer { glPushMatrix(); glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F); - glScalef(0.46f, 0.46f, 0.46f); - GL11.glRotatef(90 * i, 0, 1, 0); + glScalef(0.5f, 0.5f, 0.5f); ForgeDirection dir = ForgeDirection.getOrientation(i); + switch (dir) + { + case NORTH: + glRotatef(0, 0, 1, 0); + break; + case SOUTH: + glRotatef(180, 0, 1, 0); + break; + case WEST: + glRotatef(90, 0, 1, 0); + break; + case EAST: + glRotatef(-90, 0, 1, 0); + break; + } + + /** + * If we're rendering in the world: + */ if (t.worldObj != null) { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_LEVELS); - MODEL.renderPart("Battery"); - - // Render top and bottom - //if (!(new Vector3(t).translate(dir).getTileEntity(t.worldObj) instanceof TileBattery)) - { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); + TileBattery tile = (TileBattery) t; - if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) - MODEL.renderPart("CapCorner"); - if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) - MODEL.renderPart("BaseCorner"); - } + RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_level_" + (int) (((double) tile.energy.getEnergy() / (double) tile.energy.getEnergyCapacity()) * 10) + ".png"); + MODEL.renderPart("Battery"); + + // Render top and bottom + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); + if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) + MODEL.renderPart("CapCorner"); + if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) + MODEL.renderPart("BaseCorner"); // If quadrant with one external neighbor FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); - + if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("CapEdge"); if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("BaseEdge"); - // if quadrant with three external neighbors //can't have quadrant with 2 external - // neighbors in rectangular prism + /* + * If quadrant with three external neighbors //can't have quadrant with 2 external + * neighbors in rectangular prism + */ if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("CapInterior"); if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("BaseInterior"); FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE); + + if (tile.getInputDirections().contains(dir)) + { + GL11.glColor3f(0, 0.294f, 0.498f); + } + else if (tile.getOutputDirections().contains(dir)) + { + GL11.glColor3f(1, 0.478f, 0.01f); + } + MODEL.renderPart("BatteryCase"); + GL11.glColor3f(1, 1, 1); + if (new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery) MODEL.renderPart("VertConnector"); - }else - { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); - MODEL.renderAll(); } - + else + { + // TODO: Fix energy level. + RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_level_0.png"); + MODEL.renderPart("Battery"); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); + MODEL.renderOnly("CapCorner", "BaseCorner", "CapEdge", "BaseEdge", "CapInterior", "BaseInterior"); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE); + MODEL.renderOnly("BatteryCase"); + } + glPopMatrix(); } } diff --git a/src/main/java/resonantinduction/electrical/battery/TileBattery.java b/src/main/java/resonantinduction/electrical/battery/TileBattery.java index adf96695..52029553 100644 --- a/src/main/java/resonantinduction/electrical/battery/TileBattery.java +++ b/src/main/java/resonantinduction/electrical/battery/TileBattery.java @@ -1,14 +1,12 @@ package resonantinduction.electrical.battery; import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.packet.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import resonantinduction.core.ResonantInduction; -import resonantinduction.mechanical.network.IMechanical; import universalelectricity.api.UniversalElectricity; import universalelectricity.api.electricity.IVoltageInput; import universalelectricity.api.electricity.IVoltageOutput; @@ -23,8 +21,6 @@ import calclavia.lib.prefab.tile.TileElectrical; import com.google.common.io.ByteArrayDataInput; -import cpw.mods.fml.common.network.PacketDispatcher; - /** * A modular battery. * @@ -40,11 +36,7 @@ public class TileBattery extends TileElectrical implements IConnector playersUsing = new HashSet(); - - public float clientEnergy; - public int clientCells; - public float clientMaxEnergy; + public boolean markUpdate = false; public TileBattery() { @@ -74,7 +66,7 @@ public class TileBattery extends TileElectrical implements IConnector