Removed GearShaftNode from PartGearShaft allowing it to more easily be worked on

This commit is contained in:
Robert S 2014-04-10 19:15:37 -04:00
parent ccffd62055
commit 9e45080d24
2 changed files with 117 additions and 97 deletions

View file

@ -0,0 +1,116 @@
package resonantinduction.mechanical.energy.gear;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import calclavia.api.resonantinduction.IMechanicalNode;
import calclavia.lib.grid.INodeProvider;
import resonantinduction.mechanical.energy.grid.MechanicalNode;
public class GearShaftNode extends MechanicalNode
{
public GearShaftNode(PartGearShaft parent)
{
super(parent);
}
@Override
public double getTorqueLoad()
{
// Decelerate the gear based on tier.
switch (shaft().tier)
{
default:
return 0.03;
case 1:
return 0.02;
case 2:
return 0.01;
}
}
@Override
public double getAngularVelocityLoad()
{
return 0;
}
@Override
public void doRecache()
{
connections.clear();
/** Check for internal connections, the FRONT and BACK. */
for (int i = 0; i < 6; i++)
{
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
if (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite())
{
MechanicalNode instance = ((INodeProvider) shaft().tile()).getNode(MechanicalNode.class, checkDir);
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this))
{
connections.put(instance, checkDir);
}
}
}
/** Look for connections outside this block space, the relative FRONT and BACK */
for (int i = 0; i < 6; i++)
{
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
if (!connections.containsValue(checkDir) && (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite()))
{
TileEntity checkTile = new universalelectricity.api.vector.Vector3(shaft().tile()).translate(checkDir).getTileEntity(world());
if (checkTile instanceof INodeProvider)
{
MechanicalNode instance = ((INodeProvider) checkTile).getNode(MechanicalNode.class, checkDir.getOpposite());
// Only connect to shafts outside of this block space.
if (instance != null && instance != this && instance.parent instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this))
{
connections.put(instance, checkDir);
}
}
}
}
}
@Override
public boolean canConnect(ForgeDirection from, Object source)
{
if (source instanceof MechanicalNode)
{
if (((MechanicalNode) source).parent instanceof PartGear)
{
PartGear gear = (PartGear) ((MechanicalNode) source).parent;
if (!(Math.abs(gear.placementSide.offsetX) == Math.abs(shaft().placementSide.offsetX) && Math.abs(gear.placementSide.offsetY) == Math.abs(shaft().placementSide.offsetY) && Math.abs(gear.placementSide.offsetZ) == Math.abs(shaft().placementSide.offsetZ)))
{
return false;
}
}
}
return from == shaft().placementSide || from == shaft().placementSide.getOpposite();
}
@Override
public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with)
{
if (shaft().placementSide.offsetY != 0 || shaft().placementSide.offsetZ != 0)
{
return dir == shaft().placementSide.getOpposite();
}
return dir == shaft().placementSide;
}
public PartGearShaft shaft()
{
return (PartGearShaft) this.parent;
}
}

View file

@ -43,103 +43,7 @@ public class PartGearShaft extends PartMechanical
{ {
super(); super();
node = new MechanicalNode(this) node = new GearShaftNode(this);
{
@Override
public double getTorqueLoad()
{
// Decelerate the gear based on tier.
switch (tier)
{
default:
return 0.03;
case 1:
return 0.02;
case 2:
return 0.01;
}
}
@Override
public double getAngularVelocityLoad()
{
return 0;
}
@Override
public void doRecache()
{
connections.clear();
/** Check for internal connections, the FRONT and BACK. */
for (int i = 0; i < 6; i++)
{
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
if (checkDir == placementSide || checkDir == placementSide.getOpposite())
{
MechanicalNode instance = ((INodeProvider) tile()).getNode(MechanicalNode.class, checkDir);
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this))
{
connections.put(instance, checkDir);
}
}
}
/** Look for connections outside this block space, the relative FRONT and BACK */
for (int i = 0; i < 6; i++)
{
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
if (!connections.containsValue(checkDir) && (checkDir == placementSide || checkDir == placementSide.getOpposite()))
{
TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world());
if (checkTile instanceof INodeProvider)
{
MechanicalNode instance = ((INodeProvider) checkTile).getNode(MechanicalNode.class, checkDir.getOpposite());
// Only connect to shafts outside of this block space.
if (instance != null && instance != this && instance.parent instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this))
{
connections.put(instance, checkDir);
}
}
}
}
}
@Override
public boolean canConnect(ForgeDirection from, Object source)
{
if (source instanceof MechanicalNode)
{
if (((MechanicalNode) source).parent instanceof PartGear)
{
PartGear gear = (PartGear) ((MechanicalNode) source).parent;
if (!(Math.abs(gear.placementSide.offsetX) == Math.abs(placementSide.offsetX) && Math.abs(gear.placementSide.offsetY) == Math.abs(placementSide.offsetY) && Math.abs(gear.placementSide.offsetZ) == Math.abs(placementSide.offsetZ)))
{
return false;
}
}
}
return from == placementSide || from == placementSide.getOpposite();
}
@Override
public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with)
{
if (placementSide.offsetY != 0 || placementSide.offsetZ != 0)
{
return dir == placementSide.getOpposite();
}
return dir == placementSide;
}
};
} }
@Override @Override