Some pipe fixes and added gravity pressure

This commit is contained in:
Calclavia 2014-02-23 22:57:35 +08:00
parent f0eed8c32f
commit 3b137cfca7
5 changed files with 69 additions and 22 deletions

View file

@ -293,11 +293,14 @@ public class PartMultimeter extends PartFace implements IConnector<MultimeterNet
{
FluidTankInfo[] fluidInfo = ((IFluidHandler) tileEntity).getTankInfo(receivingSide);
for (FluidTankInfo info : fluidInfo)
if (fluidInfo != null)
{
if (info != null)
if (info.fluid != null)
getNetwork().fluidGraph.queue(info.fluid.amount);
for (FluidTankInfo info : fluidInfo)
{
if (info != null)
if (info.fluid != null)
getNetwork().fluidGraph.queue(info.fluid.amount);
}
}
}

View file

@ -21,6 +21,7 @@ import resonantinduction.core.prefab.part.PartFramedConnection;
import resonantinduction.mechanical.Mechanical;
import universalelectricity.api.energy.IConductor;
import calclavia.lib.utility.WrenchUtility;
import codechicken.lib.data.MCDataInput;
import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.IconTransformation;
import codechicken.lib.render.RenderUtils;
@ -55,9 +56,33 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidPipe,
}
@Override
public boolean doesTick()
public void update()
{
return false;
super.update();
if (!world().isRemote)
if (ticks % 20 == 0)
sendFluidUpdate();
}
public void sendFluidUpdate()
{
NBTTagCompound nbt = new NBTTagCompound();
tank.writeToNBT(nbt);
tile().getWriteStream(this).writeByte(1).writeNBTTagCompound(nbt);
}
@Override
public void read(MCDataInput packet, int packetID)
{
if (packetID == 1)
{
this.tank.readFromNBT(packet.readNBTTagCompound());
}
else
{
super.read(packet, packetID);
}
}
@Override

View file

@ -25,6 +25,8 @@ public class RenderPipe
public void render(PartPipe part, double x, double y, double z, float f)
{
GL11.glPushMatrix();
FluidStack fluid = part.getInternalTank().getFluid();
int capacity = part.getInternalTank().getCapacity();
byte renderSides = part.getAllCurrentConnections();
@ -42,8 +44,8 @@ public class RenderPipe
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glTranslatef((float) x + 0.3f, (float) y + 0.35f, (float) z + 0.3f);
GL11.glScalef(0.4f, 0.3f, 0.4f);
GL11.glTranslatef((float) x + 0.35f, (float) y + 0.35f, (float) z + 0.35f);
GL11.glScalef(0.3f, 0.3f, 0.3f);
GL11.glCallList(displayList[(int) (percentage * (RenderFluidHelper.DISPLAY_STAGES - 1))]);
@ -63,21 +65,27 @@ public class RenderPipe
switch (direction.ordinal())
{
case 4:
GL11.glTranslatef((float) x + 0F, (float) y + 0.35f, (float) z + 0.3F);
case 0:
GL11.glTranslatef((float) x + 0.35F, (float) y - 0f, (float) z + 0.35F);
break;
case 5:
GL11.glTranslatef((float) x + 0.7F, (float) y + 0.35f, (float) z + 0.3F);
case 1:
GL11.glTranslatef((float) x + 0.35F, (float) y + 0.65f, (float) z + 0.35F);
break;
case 2:
GL11.glTranslatef((float) x + 0.3F, (float) y + 0.35f, (float) z + 0F);
GL11.glTranslatef((float) x + 0.35F, (float) y + 0.35f, (float) z + 0F);
break;
case 3:
GL11.glTranslatef((float) x + 0.3F, (float) y + 0.35f, (float) z + 0.7F);
GL11.glTranslatef((float) x + 0.35F, (float) y + 0.35f, (float) z + 0.65F);
break;
case 4:
GL11.glTranslatef((float) x + 0F, (float) y + 0.35f, (float) z + 0.35F);
break;
case 5:
GL11.glTranslatef((float) x + 0.65F, (float) y + 0.35f, (float) z + 0.35F);
break;
}
GL11.glScalef(0.4f, 0.3f, 0.4f);
GL11.glScalef(0.3f, 0.3f, 0.3f);
GL11.glCallList(displayList[(int) (percentage * (RenderFluidHelper.DISPLAY_STAGES - 1))]);
GL11.glPopAttrib();
@ -85,6 +93,7 @@ public class RenderPipe
}
}
}
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);

View file

@ -83,11 +83,11 @@ public class TilePump extends TileAdvanced implements IFluidHandler, IRotatable,
{
if (dir == getDirection())
{
return 20;
return 100;
}
else if (dir == getDirection().getOpposite())
{
return -25;
return -100;
}
return 0;

View file

@ -114,6 +114,15 @@ public class PipeNetwork extends FluidNetwork
if (obj instanceof IPressure)
{
int pressure = ((IPressure) obj).getPressure(ForgeDirection.getOrientation(i).getOpposite());
/**
* Apply "gravity pressure"
*/
if (i == 0)
pressure -= 25;
else if (i == 1)
pressure += 25;
minPressure = Math.min(pressure, minPressure);
maxPressure = Math.max(pressure, maxPressure);
totalPressure += pressure;
@ -131,9 +140,9 @@ public class PipeNetwork extends FluidNetwork
* Create pressure loss.
*/
if (minPressure < 0)
minPressure++;
minPressure += 1;
if (maxPressure > 0)
maxPressure--;
maxPressure -= 1;
sourcePipe.setPressure(Math.max(minPressure, Math.min(maxPressure, totalPressure / findCount + Integer.signum(totalPressure))));
}
@ -161,10 +170,11 @@ public class PipeNetwork extends FluidNetwork
if (pressureA >= pressureB)
{
FluidTank tankA = sourcePipe.getInternalTank();
FluidStack fluidA = tankA.getFluid();
if (tankA != null)
if (tankA != null && fluidA != null)
{
int amountA = tankA.getFluidAmount();
int amountA = fluidA.amount;
if (amountA > 0)
{
@ -180,7 +190,7 @@ public class PipeNetwork extends FluidNetwork
if (quantity > 0)
{
tankA.drain(quantity, true);
tankB.fill(new FluidStack(tankA.getFluid().getFluid(), quantity), true);
tankB.fill(new FluidStack(fluidA.getFluid(), quantity), true);
}
}
}