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); FluidTankInfo[] fluidInfo = ((IFluidHandler) tileEntity).getTankInfo(receivingSide);
for (FluidTankInfo info : fluidInfo) if (fluidInfo != null)
{ {
if (info != null) for (FluidTankInfo info : fluidInfo)
if (info.fluid != null) {
getNetwork().fluidGraph.queue(info.fluid.amount); 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 resonantinduction.mechanical.Mechanical;
import universalelectricity.api.energy.IConductor; import universalelectricity.api.energy.IConductor;
import calclavia.lib.utility.WrenchUtility; import calclavia.lib.utility.WrenchUtility;
import codechicken.lib.data.MCDataInput;
import codechicken.lib.render.CCRenderState; import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.IconTransformation; import codechicken.lib.render.IconTransformation;
import codechicken.lib.render.RenderUtils; import codechicken.lib.render.RenderUtils;
@ -55,9 +56,33 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidPipe,
} }
@Override @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 @Override

View file

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

View file

@ -114,6 +114,15 @@ public class PipeNetwork extends FluidNetwork
if (obj instanceof IPressure) if (obj instanceof IPressure)
{ {
int pressure = ((IPressure) obj).getPressure(ForgeDirection.getOrientation(i).getOpposite()); 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); minPressure = Math.min(pressure, minPressure);
maxPressure = Math.max(pressure, maxPressure); maxPressure = Math.max(pressure, maxPressure);
totalPressure += pressure; totalPressure += pressure;
@ -131,9 +140,9 @@ public class PipeNetwork extends FluidNetwork
* Create pressure loss. * Create pressure loss.
*/ */
if (minPressure < 0) if (minPressure < 0)
minPressure++; minPressure += 1;
if (maxPressure > 0) if (maxPressure > 0)
maxPressure--; maxPressure -= 1;
sourcePipe.setPressure(Math.max(minPressure, Math.min(maxPressure, totalPressure / findCount + Integer.signum(totalPressure)))); 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) if (pressureA >= pressureB)
{ {
FluidTank tankA = sourcePipe.getInternalTank(); 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) if (amountA > 0)
{ {
@ -180,7 +190,7 @@ public class PipeNetwork extends FluidNetwork
if (quantity > 0) if (quantity > 0)
{ {
tankA.drain(quantity, true); tankA.drain(quantity, true);
tankB.fill(new FluidStack(tankA.getFluid().getFluid(), quantity), true); tankB.fill(new FluidStack(fluidA.getFluid(), quantity), true);
} }
} }
} }