Battery now renders by distributing to lowest first
This commit is contained in:
parent
f227c706da
commit
bc53346781
5 changed files with 84 additions and 17 deletions
|
@ -1,26 +1,66 @@
|
||||||
package resonantinduction.electrical.battery;
|
package resonantinduction.electrical.battery;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import calclavia.lib.utility.FluidUtility;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
import resonantinduction.api.mechanical.fluid.IFluidConnector;
|
||||||
import universalelectricity.core.net.Network;
|
import universalelectricity.core.net.Network;
|
||||||
|
|
||||||
public class EnergyDistributionNetwork extends Network<EnergyDistributionNetwork, TileEnergyDistribution>
|
public class EnergyDistributionNetwork extends Network<EnergyDistributionNetwork, TileEnergyDistribution>
|
||||||
{
|
{
|
||||||
public int getEnergyRenderForHeight()
|
|
||||||
{
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void redistribute(TileEnergyDistribution... exclusion)
|
public void redistribute(TileEnergyDistribution... exclusion)
|
||||||
{
|
{
|
||||||
long totalEnergy = 0;
|
long totalEnergy = 0;
|
||||||
long totalCapacity = 0;
|
long totalCapacity = 0;
|
||||||
|
|
||||||
for (TileEnergyDistribution energyContainer : this.getConnectors())
|
int lowestY = 255, highestY = 0;
|
||||||
|
|
||||||
|
for (TileEnergyDistribution connector : this.getConnectors())
|
||||||
{
|
{
|
||||||
totalEnergy += energyContainer.energy.getEnergy();
|
totalEnergy += connector.energy.getEnergy();
|
||||||
totalCapacity += energyContainer.energy.getEnergyCapacity();
|
totalCapacity += connector.energy.getEnergyCapacity();
|
||||||
|
|
||||||
|
lowestY = Math.min(connector.yCoord, lowestY);
|
||||||
|
highestY = Math.max(connector.yCoord, highestY);
|
||||||
|
|
||||||
|
connector.renderEnergyAmount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply render
|
||||||
|
*/
|
||||||
|
long remainingRenderEnergy = totalEnergy;
|
||||||
|
|
||||||
|
for (int y = lowestY; y <= highestY; y++)
|
||||||
|
{
|
||||||
|
Set<TileEnergyDistribution> connectorsInlevel = new LinkedHashSet<TileEnergyDistribution>();
|
||||||
|
|
||||||
|
for (TileEnergyDistribution connector : this.getConnectors())
|
||||||
|
{
|
||||||
|
if (connector.yCoord == y)
|
||||||
|
{
|
||||||
|
connectorsInlevel.add(connector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int levelSize = connectorsInlevel.size();
|
||||||
|
long used = 0;
|
||||||
|
|
||||||
|
for (TileEnergyDistribution connector : connectorsInlevel)
|
||||||
|
{
|
||||||
|
long tryInject = Math.min(remainingRenderEnergy / levelSize, connector.energy.getEnergyCapacity());
|
||||||
|
connector.renderEnergyAmount = tryInject;
|
||||||
|
used += tryInject;
|
||||||
|
}
|
||||||
|
|
||||||
|
remainingRenderEnergy -= used;
|
||||||
|
|
||||||
|
if (remainingRenderEnergy <= 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -69,7 +69,8 @@ public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleI
|
||||||
@Override
|
@Override
|
||||||
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
|
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
|
||||||
{
|
{
|
||||||
String[][] partToDisable = new String[][] { new String[] { "bottom", "coil1" }, new String[] { "top" }, new String[] { "frame1", "frame2" }, new String[] { "frame3", "frame4" }, new String[] { "frame4", "frame1" }, new String[] { "frame2", "frame3" } };
|
final String[][] partToDisable = new String[][] { new String[] { "bottom" }, new String[] { "top" }, new String[] { "frame1", "frame2" }, new String[] { "frame3", "frame4" }, new String[] { "frame4", "frame1" }, new String[] { "frame2", "frame3" } };
|
||||||
|
final String[][] connectionPartToEnable = new String[][] { null, null, new String[] { "frame1con", "frame2con" }, new String[] { "frame3con", "frame4con" }, new String[] { "frame4con", "frame1con" }, new String[] { "frame2con", "frame3con" } };
|
||||||
|
|
||||||
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);
|
||||||
|
@ -95,7 +96,22 @@ public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleI
|
||||||
}
|
}
|
||||||
else if (check == ForgeDirection.DOWN)
|
else if (check == ForgeDirection.DOWN)
|
||||||
{
|
{
|
||||||
enabledParts.addAll(Arrays.asList(new String[] { "frame1con", "frame2con", "frame3con", "frame4con" }));
|
List<String> connectionParts = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (ForgeDirection sideCheck : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
if (sideCheck.offsetY == 0)
|
||||||
|
connectionParts.addAll(Arrays.asList(connectionPartToEnable[sideCheck.ordinal()]));
|
||||||
|
|
||||||
|
for (ForgeDirection sideCheck : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
if (sideCheck.offsetY == 0)
|
||||||
|
{
|
||||||
|
if (new Vector3(t).translate(sideCheck).getTileEntity(t.worldObj) instanceof TileBattery)
|
||||||
|
connectionParts.removeAll(Arrays.asList(connectionPartToEnable[sideCheck.ordinal()]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enabledParts.addAll(connectionParts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +145,7 @@ public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleI
|
||||||
{
|
{
|
||||||
if (i != 1 || enabledParts.contains("coil1"))
|
if (i != 1 || enabledParts.contains("coil1"))
|
||||||
{
|
{
|
||||||
if ((8 - i) <= energyLevel)
|
if ((8 - i) < energyLevel)
|
||||||
MODEL.renderOnly("coil" + i + "lit");
|
MODEL.renderOnly("coil" + i + "lit");
|
||||||
else
|
else
|
||||||
MODEL.renderOnly("coil" + i);
|
MODEL.renderOnly("coil" + i);
|
||||||
|
@ -140,6 +156,8 @@ public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleI
|
||||||
disabledParts.addAll(Arrays.asList(new String[] { "coil1", "coil2", "coil3", "coil4", "coil5", "coil6", "coil7", "coil8" }));
|
disabledParts.addAll(Arrays.asList(new String[] { "coil1", "coil2", "coil3", "coil4", "coil5", "coil6", "coil7", "coil8" }));
|
||||||
disabledParts.addAll(Arrays.asList(new String[] { "coil1lit", "coil2lit", "coil3lit", "coil4lit", "coil5lit", "coil6lit", "coil7lit", "coil8lit" }));
|
disabledParts.addAll(Arrays.asList(new String[] { "coil1lit", "coil2lit", "coil3lit", "coil4lit", "coil5lit", "coil6lit", "coil7lit", "coil8lit" }));
|
||||||
disabledParts.addAll(Arrays.asList(new String[] { "frame1con", "frame2con", "frame3con", "frame4con" }));
|
disabledParts.addAll(Arrays.asList(new String[] { "frame1con", "frame2con", "frame3con", "frame4con" }));
|
||||||
|
|
||||||
|
enabledParts.removeAll(Arrays.asList(new String[] { "coil1", "coil2", "coil3", "coil4", "coil5", "coil6", "coil7", "coil8" }));
|
||||||
MODEL.renderAllExcept(disabledParts.toArray(new String[0]));
|
MODEL.renderAllExcept(disabledParts.toArray(new String[0]));
|
||||||
MODEL.renderOnly(enabledParts.toArray(new String[0]));
|
MODEL.renderOnly(enabledParts.toArray(new String[0]));
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class TileBattery extends TileEnergyDistribution implements IVoltageInput
|
||||||
public ArrayList getPacketData(int type)
|
public ArrayList getPacketData(int type)
|
||||||
{
|
{
|
||||||
ArrayList data = new ArrayList();
|
ArrayList data = new ArrayList();
|
||||||
data.add(energy.getEnergy());
|
data.add(renderEnergyAmount);
|
||||||
data.add(ioMap);
|
data.add(ioMap);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,8 @@ public class TileEnergyDistribution extends TileElectrical implements IConnector
|
||||||
public boolean markClientUpdate = false;
|
public boolean markClientUpdate = false;
|
||||||
public boolean markDistributionUpdate = false;
|
public boolean markDistributionUpdate = false;
|
||||||
|
|
||||||
|
public long renderEnergyAmount = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initiate()
|
public void initiate()
|
||||||
{
|
{
|
||||||
|
|
|
@ -41,12 +41,21 @@ public class RenderCharger implements ISimpleItemRenderer
|
||||||
RenderUtility.rotateBlockBasedOnDirection(part.getFacing());
|
RenderUtility.rotateBlockBasedOnDirection(part.getFacing());
|
||||||
|
|
||||||
RenderUtility.bind(TEXTURE);
|
RenderUtility.bind(TEXTURE);
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslatef(0, 0.12f, 0);
|
||||||
MODEL.renderAll();
|
MODEL.renderAll();
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
if (part.getStackInSlot(0) != null)
|
if (part.getStackInSlot(0) != null)
|
||||||
{
|
{
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F);
|
||||||
|
RenderUtility.rotateFaceToSideNoTranslate(part.placementSide);
|
||||||
|
RenderUtility.rotateBlockBasedOnDirection(part.getFacing());
|
||||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||||
RenderItemOverlayTile.renderItem(part.world(), part.placementSide, part.getStackInSlot(0), new Vector3(0.00, -0.3, -0.00), 0, 4);
|
RenderItemOverlayTile.renderItem(part.world(), part.placementSide, part.getStackInSlot(0), new Vector3(0.00, -0.3, -0.00), 0, 4);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
||||||
boolean isLooking = false;
|
boolean isLooking = false;
|
||||||
|
@ -64,20 +73,18 @@ public class RenderCharger implements ISimpleItemRenderer
|
||||||
{
|
{
|
||||||
long energy = CompatibilityModule.getEnergyItem(part.getStackInSlot(0));
|
long energy = CompatibilityModule.getEnergyItem(part.getStackInSlot(0));
|
||||||
long maxEnergy = CompatibilityModule.getMaxEnergyItem(part.getStackInSlot(0));
|
long maxEnergy = CompatibilityModule.getMaxEnergyItem(part.getStackInSlot(0));
|
||||||
GL11.glTranslatef(0, 0.2F, 0);
|
RenderUtility.renderFloatingText(UnitDisplay.getDisplay(energy, Unit.JOULES, 2, true) + "/" + UnitDisplay.getDisplay(maxEnergy, Unit.JOULES, 2, true), new Vector3((float) x + 0.5F, (float) y + 0.8F, (float) z + 0.5F));
|
||||||
GL11.glRotatef(90, 1, 0, 0);
|
|
||||||
RenderUtility.renderText(UnitDisplay.getDisplay(energy, Unit.JOULES, 2, true) + "/" + UnitDisplay.getDisplay(maxEnergy, Unit.JOULES, 2, true), 1, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderInventoryItem(ItemStack itemStack)
|
public void renderInventoryItem(ItemStack itemStack)
|
||||||
{
|
{
|
||||||
|
GL11.glTranslatef(0.5f, 0.7f, 0.5f);
|
||||||
RenderUtility.bind(TEXTURE);
|
RenderUtility.bind(TEXTURE);
|
||||||
MODEL.renderAll();
|
MODEL.renderAll();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue