Fixed gears not connecting to gearshafts

This commit is contained in:
Robert S 2014-06-07 07:03:02 -04:00
parent 9f4c9edf7d
commit 898f471c7a
2 changed files with 36 additions and 28 deletions

View file

@ -170,43 +170,52 @@ public class GearNode extends MechanicalNode
{ {
INodeProvider parent = ((MechanicalNode) with).getParent(); INodeProvider parent = ((MechanicalNode) with).getParent();
/** Check for flat connections (gear face on gear face) */ /** Check for flat connections (gear face on gear face) to make sure it's actually on
* this gear block. */
if (from == gear().placementSide.getOpposite()) if (from == gear().placementSide.getOpposite())
{ {
if (parent instanceof PartGear) if (parent instanceof PartGear || parent instanceof PartGearShaft)
{ {
if (((PartGear) parent).tile() == gear().tile() && !gear().getMultiBlock().isConstructed()) if (parent instanceof PartGearShaft)
{ {
return true; PartGearShaft shaft = (PartGearShaft) parent;
return shaft.tile().partMap(from.getOpposite().ordinal()) == gear() && Math.abs(shaft.placementSide.offsetX) == Math.abs(gear().placementSide.offsetX) && Math.abs(shaft.placementSide.offsetY) == Math.abs(gear().placementSide.offsetY) && Math.abs(shaft.placementSide.offsetZ) == Math.abs(gear().placementSide.offsetZ);
} }
else if (parent instanceof PartGear)
if (((PartGear) parent).placementSide != gear().placementSide)
{ {
TMultiPart part = gear().tile().partMap(((PartGear) parent).placementSide.ordinal()); if (((PartGear) parent).tile() == gear().tile() && !gear().getMultiBlock().isConstructed())
if (part instanceof PartGear)
{ {
/** Case when we connect gears via edges internally. Large gear attempt return true;
* to connect to small gear. */
PartGear sourceGear = (PartGear) part;
if (sourceGear.isCenterMultiBlock() && !sourceGear.getMultiBlock().isPrimary())
{
// For large gear to small gear on edge connection.
return true;
}
} }
else
{
/** Small gear attempting to connect to large gear. */
if (gear().getMultiBlock().isConstructed())
{
TMultiPart checkPart = ((PartGear) parent).tile().partMap(gear().placementSide.ordinal());
if (checkPart instanceof PartGear) if (((PartGear) parent).placementSide != gear().placementSide)
{
TMultiPart part = gear().tile().partMap(((PartGear) parent).placementSide.ordinal());
if (part instanceof PartGear)
{
/** Case when we connect gears via edges internally. Large gear
* attempt to connect to small gear. */
PartGear sourceGear = (PartGear) part;
if (sourceGear.isCenterMultiBlock() && !sourceGear.getMultiBlock().isPrimary())
{ {
ForgeDirection requiredDirection = ((PartGear) checkPart).getPosition().subtract(position()).toForgeDirection(); // For large gear to small gear on edge connection.
return ((PartGear) checkPart).isCenterMultiBlock() && ((PartGear) parent).placementSide == requiredDirection; return true;
}
}
else
{
/** Small gear attempting to connect to large gear. */
if (gear().getMultiBlock().isConstructed())
{
TMultiPart checkPart = ((PartGear) parent).tile().partMap(gear().placementSide.ordinal());
if (checkPart instanceof PartGear)
{
ForgeDirection requiredDirection = ((PartGear) checkPart).getPosition().subtract(position()).toForgeDirection();
return ((PartGear) checkPart).isCenterMultiBlock() && ((PartGear) parent).placementSide == requiredDirection;
}
} }
} }
} }

View file

@ -38,7 +38,6 @@ public class PartGearShaft extends PartMechanical
public PartGearShaft() public PartGearShaft()
{ {
super(); super();
node = new GearShaftNode(this); node = new GearShaftNode(this);
} }