Worked on abstracting TileGutter into a flexible node

This commit is contained in:
Robert S 2014-08-16 03:59:58 -04:00
parent b145489ca6
commit 91448bf592
5 changed files with 65 additions and 28 deletions

View file

@ -189,9 +189,9 @@ public class TileEngineeringTable extends TileInventory implements IPacketReceiv
final double regionLength = 1d / 3d;
// Rotate the hit vector based on direction of the tile.
hitVector.add(new Vector3(-0.5, 0, -0.5));
hitVector.transform(new Quaternion(WorldUtility.getAngleFromForgeDirection(getDirection()), Vector3.up()));
hitVector.add(new Vector3(0.5, 0, 0.5));
//hitVector.add(new Vector3(-0.5, 0, -0.5));
//hitVector.transform(new Quaternion(WorldUtility.getAngleFromForgeDirection(getDirection()), Vector3.up()));
//hitVector.add(new Vector3(0.5, 0, 0.5));
/** Crafting Matrix */
matrix:

View file

@ -1,6 +1,8 @@
package resonantinduction.archaic.fluid.gutter;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import resonantinduction.core.prefab.node.NodePressure;
import resonantinduction.core.prefab.node.TileTankNode;
@ -22,4 +24,27 @@ public class FluidGravityNode extends NodePressure
return 0;
}
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
return from != ForgeDirection.UP && !fluid.isGaseous();
}
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return from != ForgeDirection.UP && !fluid.isGaseous();
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
if (!resource.getFluid().isGaseous())
{
return super.fill(from, resource, doFill);
}
return 0;
}
}

View file

@ -26,6 +26,7 @@ import resonant.lib.utility.WorldUtility;
import resonant.lib.utility.inventory.InventoryUtility;
import resonantinduction.core.RecipeType;
import resonantinduction.core.Reference;
import resonantinduction.core.prefab.node.NodePressure;
import resonantinduction.core.prefab.node.TilePressureNode;
import resonantinduction.core.prefab.node.TileTankNode;
import universalelectricity.core.transform.region.Cuboid;
@ -48,6 +49,7 @@ public class TileGutter extends TilePressureNode
public TileGutter()
{
super(Material.rock);
tankNode_$eq(new FluidGravityNode(this));
setTextureName("material_wood_surface");
isOpaqueCube(false);
normalRender(false);
@ -185,31 +187,6 @@ public class TileGutter extends TilePressureNode
}
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
if (!resource.getFluid().isGaseous())
{
return super.fill(from, resource, doFill);
}
return 0;
}
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
return from != ForgeDirection.UP && !fluid.isGaseous();
}
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return from != ForgeDirection.UP && !fluid.isGaseous();
}
@Override
public void renderDynamic(Vector3 position, float frame, int pass)
{

View file

@ -3,6 +3,7 @@ package resonantinduction.core.prefab.node;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler;
import resonant.lib.utility.WorldUtility;
import universalelectricity.api.core.grid.INodeProvider;
import universalelectricity.api.core.grid.IUpdate;
@ -110,6 +111,7 @@ public class NodePressure extends NodeTank implements IUpdate
}
}
public int getPressure(ForgeDirection direction) {
return pressure;
}

View file

@ -10,6 +10,8 @@ import resonant.engine.ResonantEngine;
import resonant.lib.network.discriminator.PacketTile;
import resonant.lib.network.discriminator.PacketType;
import resonant.lib.network.handle.IPacketIDReceiver;
import resonant.lib.utility.WorldUtility;
import resonant.lib.wrapper.ObjectOrWrapper;
import resonantinduction.core.prefab.LimitedTank;
import universalelectricity.api.core.grid.INodeProvider;
import universalelectricity.api.core.grid.ISave;
@ -23,6 +25,7 @@ import universalelectricity.core.grid.node.NodeConnector;
public class NodeTank extends NodeConnector implements IFluidTank, IFluidHandler, ISave, IPacketIDReceiver
{
LimitedTank tank;
byte renderSides = 0;
static final int PACKET_DESCRIPTION = 100, PACKET_TANK = 101;
public NodeTank(INodeProvider parent)
@ -165,6 +168,31 @@ public class NodeTank extends NodeConnector implements IFluidTank, IFluidHandler
ResonantEngine.instance.packetHandler.sendToAllAround(new PacketTile((int)x(), (int)y(), (int)z(), tag), this, 64);
}
@Override
protected void addConnection(Object obj, ForgeDirection dir)
{
super.addConnection(obj, dir);
if(showConnectionsFor(obj, dir))
renderSides = WorldUtility.setEnableSide(getRenderSides(), dir, true);
}
protected boolean showConnectionsFor(Object obj, ForgeDirection dir)
{
if(obj != null)
{
if(obj.getClass().isAssignableFrom(getClass()))
{
return true;
}
else if(obj instanceof INodeProvider)
{
return ((INodeProvider) obj).getNode(getClass(), dir) != null;
}
}
return false;
}
public void setCapacity(int capacity)
{
tank.setCapacity(capacity);
@ -179,4 +207,9 @@ public class NodeTank extends NodeConnector implements IFluidTank, IFluidHandler
{
return tank.maxOutput;
}
public byte getRenderSides()
{
return renderSides;
}
}