From a2a8f8c5e148fe350dfe279f688b8de2ba19b04e Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 21 Jan 2014 16:54:25 -0500 Subject: [PATCH] Added max pressure and flow rate to pipe network reconstruct --- .../mechanical/fluid/network/PipeNetwork.java | 208 +++++++++--------- 1 file changed, 108 insertions(+), 100 deletions(-) diff --git a/src/main/java/resonantinduction/mechanical/fluid/network/PipeNetwork.java b/src/main/java/resonantinduction/mechanical/fluid/network/PipeNetwork.java index a86f4125..4e882160 100644 --- a/src/main/java/resonantinduction/mechanical/fluid/network/PipeNetwork.java +++ b/src/main/java/resonantinduction/mechanical/fluid/network/PipeNetwork.java @@ -11,127 +11,135 @@ import net.minecraftforge.fluids.IFluidHandler; import resonantinduction.api.fluid.IFluidConnector; import resonantinduction.api.fluid.IFluidNetwork; import resonantinduction.api.fluid.IFluidPipe; -import universalelectricity.api.energy.IConductor; import universalelectricity.api.vector.Vector3; import calclavia.lib.utility.FluidUtility; -/** - * The network for pipe fluid transfer. getNodes() is NOT used. +/** The network for pipe fluid transfer. getNodes() is NOT used. * - * @author DarkGuardsman - */ + * @author DarkGuardsman */ public class PipeNetwork extends FluidNetwork { - public HashMap> connectionMap = new HashMap>(); + public HashMap> connectionMap = new HashMap>(); + public int maxFlowRate = 0; + public int maxPressure = 0; - @Override - public void update() - { - /* - * Slight delay to allow visual effect to take place before draining the pipe's internal - * tank - */ - FluidStack stack = this.getTank().getFluid().copy(); - int count = this.connectionMap.size(); + @Override + public void update() + { + /* + * Slight delay to allow visual effect to take place before draining the pipe's internal + * tank + */ + FluidStack stack = this.getTank().getFluid().copy(); + int count = this.connectionMap.size(); - for (Entry> entry : this.connectionMap.entrySet()) - { - int sideCount = entry.getValue().size(); - for (ForgeDirection dir : entry.getValue()) - { - int volPer = (stack.amount / count); - int volPerSide = (volPer / sideCount); - int maxFill = 1000; + for (Entry> entry : this.connectionMap.entrySet()) + { + int sideCount = entry.getValue().size(); + for (ForgeDirection dir : entry.getValue()) + { + int volPer = (stack.amount / count); + int volPerSide = (volPer / sideCount); + int maxFill = 1000; - TileEntity tile = new Vector3((TileEntity) entry.getKey()).modifyPositionFromSide(dir).getTileEntity(((TileEntity) entry.getKey()).worldObj); + TileEntity tile = new Vector3((TileEntity) entry.getKey()).modifyPositionFromSide(dir).getTileEntity(((TileEntity) entry.getKey()).worldObj); - if (tile instanceof IFluidPipe) - { - maxFill = ((IFluidPipe) tile).getMaxFlowRate(); - } + if (tile instanceof IFluidPipe) + { + maxFill = ((IFluidPipe) tile).getMaxFlowRate(); + } - stack.amount -= entry.getKey().fill(dir, FluidUtility.getStack(stack, Math.min(volPerSide, maxFill)), true); + stack.amount -= entry.getKey().fill(dir, FluidUtility.getStack(stack, Math.min(volPerSide, maxFill)), true); - if (sideCount > 1) - --sideCount; - if (volPer <= 0) - break; - } + if (sideCount > 1) + --sideCount; + if (volPer <= 0) + break; + } - if (count > 1) - count--; + if (count > 1) + count--; - if (stack == null || stack.amount <= 0) - { - stack = null; - break; - } - } + if (stack == null || stack.amount <= 0) + { + stack = null; + break; + } + } - this.getTank().setFluid(stack); - // TODO check for change before rebuilding - this.reconstructTankInfo(); - } + this.getTank().setFluid(stack); + // TODO check for change before rebuilding + this.reconstructTankInfo(); + } - @Override - public boolean canUpdate() - { - return getTank().getFluidAmount() > 0 && connectionMap.size() > 0 && getConnectors().size() > 0; - } + @Override + public boolean canUpdate() + { + return getTank().getFluidAmount() > 0 && connectionMap.size() > 0 && getConnectors().size() > 0; + } - @Override - public boolean continueUpdate() - { - return canUpdate(); - } + @Override + public boolean continueUpdate() + { + return canUpdate(); + } - @Override - public void reconstruct() - { - this.connectionMap.clear(); - super.reconstruct(); - } + @Override + public void reconstruct() + { + this.connectionMap.clear(); + this.maxFlowRate = Integer.MAX_VALUE; + super.reconstruct(); + } - @Override - public void reconstructConnector(IFluidConnector part) - { - super.reconstructConnector(part); - for (int i = 0; i < 6; i++) - { - if (part.getConnections()[i] instanceof IFluidHandler && !(part.getConnections()[i] instanceof IFluidPipe)) - { - EnumSet set = this.connectionMap.get(part.getConnections()[i]); - if (set == null) - { - set = EnumSet.noneOf(ForgeDirection.class); - } - set.add(ForgeDirection.getOrientation(i).getOpposite()); - this.connectionMap.put((IFluidHandler) part.getConnections()[i], set); - } - } - } + @Override + public void reconstructConnector(IFluidConnector part) + { + super.reconstructConnector(part); + if (part instanceof IFluidPipe) + { + if (((IFluidPipe) part).getMaxFlowRate() < this.maxFlowRate) + this.maxFlowRate = ((IFluidPipe) part).getMaxFlowRate(); - @Override - public FluidStack drain(IFluidConnector source, ForgeDirection from, FluidStack resource, boolean doDrain) - { - return null; - } + if (((IFluidPipe) part).getMaxPressure() < this.maxPressure) + this.maxPressure = ((IFluidPipe) part).getMaxPressure(); + } + for (int i = 0; i < 6; i++) + { + if (part.getConnections()[i] instanceof IFluidHandler && !(part.getConnections()[i] instanceof IFluidPipe)) + { + EnumSet set = this.connectionMap.get(part.getConnections()[i]); + if (set == null) + { + set = EnumSet.noneOf(ForgeDirection.class); + } + set.add(ForgeDirection.getOrientation(i).getOpposite()); + this.connectionMap.put((IFluidHandler) part.getConnections()[i], set); + } + } + } - @Override - public FluidStack drain(IFluidConnector source, ForgeDirection from, int resource, boolean doDrain) - { - return null; - } + @Override + public FluidStack drain(IFluidConnector source, ForgeDirection from, FluidStack resource, boolean doDrain) + { + return null; + } - @Override - public Class getConnectorClass() - { - return IFluidPipe.class; - } + @Override + public FluidStack drain(IFluidConnector source, ForgeDirection from, int resource, boolean doDrain) + { + return null; + } - @Override - public IFluidNetwork newInstance() - { - return new PipeNetwork(); - } + @Override + public Class getConnectorClass() + { + return IFluidPipe.class; + } + + @Override + public IFluidNetwork newInstance() + { + return new PipeNetwork(); + } }