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;
|
||||
|
||||
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;
|
||||
|
||||
public class EnergyDistributionNetwork extends Network<EnergyDistributionNetwork, TileEnergyDistribution>
|
||||
{
|
||||
public int getEnergyRenderForHeight()
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void redistribute(TileEnergyDistribution... exclusion)
|
||||
{
|
||||
long totalEnergy = 0;
|
||||
long totalCapacity = 0;
|
||||
|
||||
for (TileEnergyDistribution energyContainer : this.getConnectors())
|
||||
int lowestY = 255, highestY = 0;
|
||||
|
||||
for (TileEnergyDistribution connector : this.getConnectors())
|
||||
{
|
||||
totalEnergy += energyContainer.energy.getEnergy();
|
||||
totalCapacity += energyContainer.energy.getEnergyCapacity();
|
||||
totalEnergy += connector.energy.getEnergy();
|
||||
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
|
||||
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.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)
|
||||
{
|
||||
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 ((8 - i) <= energyLevel)
|
||||
if ((8 - i) < energyLevel)
|
||||
MODEL.renderOnly("coil" + i + "lit");
|
||||
else
|
||||
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[] { "coil1lit", "coil2lit", "coil3lit", "coil4lit", "coil5lit", "coil6lit", "coil7lit", "coil8lit" }));
|
||||
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.renderOnly(enabledParts.toArray(new String[0]));
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ public class TileBattery extends TileEnergyDistribution implements IVoltageInput
|
|||
public ArrayList getPacketData(int type)
|
||||
{
|
||||
ArrayList data = new ArrayList();
|
||||
data.add(energy.getEnergy());
|
||||
data.add(renderEnergyAmount);
|
||||
data.add(ioMap);
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@ public class TileEnergyDistribution extends TileElectrical implements IConnector
|
|||
|
||||
public boolean markClientUpdate = false;
|
||||
public boolean markDistributionUpdate = false;
|
||||
|
||||
public long renderEnergyAmount = 0;
|
||||
|
||||
@Override
|
||||
public void initiate()
|
||||
|
|
|
@ -41,12 +41,21 @@ public class RenderCharger implements ISimpleItemRenderer
|
|||
RenderUtility.rotateBlockBasedOnDirection(part.getFacing());
|
||||
|
||||
RenderUtility.bind(TEXTURE);
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(0, 0.12f, 0);
|
||||
MODEL.renderAll();
|
||||
GL11.glPopMatrix();
|
||||
GL11.glPopMatrix();
|
||||
|
||||
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);
|
||||
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;
|
||||
boolean isLooking = false;
|
||||
|
@ -64,20 +73,18 @@ public class RenderCharger implements ISimpleItemRenderer
|
|||
{
|
||||
long energy = CompatibilityModule.getEnergyItem(part.getStackInSlot(0));
|
||||
long maxEnergy = CompatibilityModule.getMaxEnergyItem(part.getStackInSlot(0));
|
||||
GL11.glTranslatef(0, 0.2F, 0);
|
||||
GL11.glRotatef(90, 1, 0, 0);
|
||||
RenderUtility.renderText(UnitDisplay.getDisplay(energy, Unit.JOULES, 2, true) + "/" + UnitDisplay.getDisplay(maxEnergy, Unit.JOULES, 2, true), 1, 1);
|
||||
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.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryItem(ItemStack itemStack)
|
||||
{
|
||||
GL11.glTranslatef(0.5f, 0.7f, 0.5f);
|
||||
RenderUtility.bind(TEXTURE);
|
||||
MODEL.renderAll();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue