Fixed gear shaft inverting rotation

This commit is contained in:
Calclavia 2014-01-28 14:46:38 +08:00
parent ef4322338e
commit 84f2a90c02
6 changed files with 10 additions and 9 deletions

View file

@ -461,8 +461,8 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
}
@Override
public boolean inverseRotation(ForgeDirection dir)
public boolean inverseRotation(ForgeDirection dir, IMechanical with)
{
return dir != placementSide.getOpposite();
return !(with instanceof PartGearShaft);
}
}

View file

@ -93,7 +93,8 @@ public class PartGearShaft extends PartMechanical
{
IMechanical instance = (IMechanical) ((IMechanical) checkTile).getInstance(checkDir.getOpposite());
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this))
// Only connet to shafts outside of this block space.
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && instance instanceof PartGearShaft)
{
connections[checkDir.ordinal()] = instance;
getNetwork().merge(instance.getNetwork());
@ -155,9 +156,9 @@ public class PartGearShaft extends PartMechanical
}
@Override
public boolean inverseRotation(ForgeDirection dir)
public boolean inverseRotation(ForgeDirection dir, IMechanical with)
{
return dir == placementSide;
return dir == placementSide.getOpposite() && !(with instanceof PartGearShaft);
}
}

View file

@ -21,7 +21,7 @@ public interface IMechanical extends IConnector<IMechanicalNetwork>
public float getRatio(ForgeDirection dir);
public boolean inverseRotation(ForgeDirection dir);
public boolean inverseRotation(ForgeDirection dir, IMechanical with);
public IMechanical getInstance(ForgeDirection dir);

View file

@ -80,7 +80,7 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
float ratio = adjacentMech.getRatio(dir) / mechanical.getRatio(dir.getOpposite());
long torque = mechanical.getTorque();
boolean inverseRotation = mechanical.inverseRotation(dir) && adjacentMech.inverseRotation(dir.getOpposite());
boolean inverseRotation = mechanical.inverseRotation(dir, adjacentMech)|| adjacentMech.inverseRotation(dir.getOpposite(), mechanical);
int inversion = inverseRotation ? -1 : 1;

View file

@ -140,7 +140,7 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
}
@Override
public boolean inverseRotation(ForgeDirection dir)
public boolean inverseRotation(ForgeDirection dir, IMechanical with)
{
return true;
}

View file

@ -144,7 +144,7 @@ public class TraitMechanical extends TileMultipart implements IMechanical
}
@Override
public boolean inverseRotation(ForgeDirection dir)
public boolean inverseRotation(ForgeDirection dir, IMechanical with)
{
return false;
}