Pump now requires mechanical power

This commit is contained in:
Calclavia 2014-02-24 19:26:44 +08:00
parent 59601d27bb
commit 41b89bed23
3 changed files with 45 additions and 10 deletions

View file

@ -1,5 +1,8 @@
package resonantinduction.mechanical.fluid.transport;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
@ -24,11 +27,29 @@ public class RenderPump extends TileEntitySpecialRenderer
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
GL11.glRotatef(90, 0, 1, 0);
if (tile.worldObj != null)
RenderUtility.rotateBlockBasedOnDirection(tile.getDirection());
bindTexture(TEXTURE);
MODEL.renderAll();
List<String> notRendered = new ArrayList<String>();
GL11.glPushMatrix();
GL11.glRotated(Math.toDegrees(tile.angle), 0, 0, 1);
for (int i = 1; i <= 12; i++)
{
String fin = "fin" + i;
String innerFin = "innerFin" + i;
notRendered.add(fin);
notRendered.add(innerFin);
MODEL.renderOnly(fin, innerFin);
}
GL11.glPopMatrix();
MODEL.renderAllExcept(notRendered.toArray(new String[0]));
GL11.glPopMatrix();
}
}

View file

@ -6,15 +6,14 @@ import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.api.mechanical.fluid.IFluidPipe;
import resonantinduction.api.mechanical.fluid.IPressure;
import resonantinduction.mechanical.network.TileMechanical;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable;
import calclavia.lib.prefab.tile.TileAdvanced;
public class TilePump extends TileAdvanced implements IFluidHandler, IRotatable, IPressure
public class TilePump extends TileMechanical implements IFluidHandler, IRotatable, IPressure
{
private int pressure;
public long maximumPower = 10000;
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
@ -75,7 +74,6 @@ public class TilePump extends TileAdvanced implements IFluidHandler, IRotatable,
@Override
public void setPressure(int amount)
{
pressure = amount;
}
@Override
@ -83,14 +81,19 @@ public class TilePump extends TileAdvanced implements IFluidHandler, IRotatable,
{
if (dir == getDirection())
{
return 100;
return (int) (((double) getPower() / (double) maximumPower) * 100);
}
else if (dir == getDirection().getOpposite())
{
return -100;
return (int) -(((double) getPower() / (double) maximumPower) * 100);
}
return 0;
}
@Override
public boolean canConnect(ForgeDirection from, Object source)
{
return true;
}
}

View file

@ -8,6 +8,7 @@ import resonantinduction.api.mechanical.IMechanical;
import resonantinduction.api.mechanical.IMechanicalNetwork;
import resonantinduction.core.ResonantInduction;
import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.fluid.transport.TilePump;
import resonantinduction.mechanical.gear.PartGearShaft;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.network.IPacketReceiver;
@ -43,9 +44,14 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
public void updateEntity()
{
super.updateEntity();
angle += angularVelocity / 20;
torque *= getLoad();
angularVelocity *= getLoad();
if (!worldObj.isRemote)
{
torque *= getLoad();
angularVelocity *= getLoad();
}
if (Math.abs(prevAngularVelocity - angularVelocity) > 0.01f)
{
@ -60,6 +66,11 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
}
}
public long getPower()
{
return (long) (torque * angularVelocity);
}
private void sendRotationPacket()
{
PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, PACKET_VELOCITY, angularVelocity), worldObj, new Vector3(this), 20);