Some unfinished work on gear connection logic

This commit is contained in:
Calclavia 2014-02-06 15:57:25 +08:00
parent d359e6b46b
commit daf6736445

View file

@ -258,7 +258,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
{ {
if (!getMultiBlock().isConstructed()) if (!getMultiBlock().isConstructed())
{ {
return false; return true;
} }
universalelectricity.api.vector.Vector3 primaryPos = getMultiBlock().getPrimary().getPosition(); universalelectricity.api.vector.Vector3 primaryPos = getMultiBlock().getPrimary().getPosition();
@ -410,6 +410,13 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
return getMultiBlock().get(); return getMultiBlock().get();
} }
/**
* Can this gear be connected BY the source?
*
* @param from - Direction source is coming from.
* @param source - The source of the connection.
* @return True is so.
*/
@Override @Override
public boolean canConnect(ForgeDirection from, Object source) public boolean canConnect(ForgeDirection from, Object source)
{ {
@ -424,6 +431,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
* Check for flat connections (gear face on gear face) to make sure it's actually on * Check for flat connections (gear face on gear face) to make sure it's actually on
* this gear block. * this gear block.
*/ */
System.out.println(getPosition() + ":" + from + " vs " + placementSide);
if (from == placementSide.getOpposite()) if (from == placementSide.getOpposite())
{ {
if (source instanceof PartGear || source instanceof PartGearShaft) if (source instanceof PartGear || source instanceof PartGearShaft)
@ -439,11 +447,31 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
return true; return true;
} }
// For large gear to small gear on edge connection. if (((PartGear) source).placementSide != placementSide)
return true; {
/**
* Case when we connect gears via edges internally. Large gear attempt
* to connect to small gear.
*/
TMultiPart part = tile().partMap(((PartGear) source).placementSide.ordinal());
if (part instanceof PartGear)
{
PartGear sourceGear = (PartGear) part;
if (sourceGear.isCenterMultiBlock() && !sourceGear.getMultiBlock().isPrimary())
{
// For large gear to small gear on edge connection.
return true;
}
}
}
} }
} }
/**
* Face to face stick connection.
*/
TileEntity sourceTile = getPosition().translate(from.getOpposite()).getTileEntity(world()); TileEntity sourceTile = getPosition().translate(from.getOpposite()).getTileEntity(world());
if (sourceTile instanceof IMechanical) if (sourceTile instanceof IMechanical)
@ -452,6 +480,19 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
return sourceInstance == source; return sourceInstance == source;
} }
} }
else if (from == placementSide)
{
/**
* Face to face stick connection.
*/
TileEntity sourceTile = getPosition().translate(from).getTileEntity(world());
if (sourceTile instanceof IMechanical)
{
IMechanical sourceInstance = ((IMechanical) sourceTile).getInstance(from.getOpposite());
return sourceInstance == source;
}
}
else else
{ {
TileEntity destinationTile = ((IMechanical) source).getPosition().translate(from.getOpposite()).getTileEntity(world()); TileEntity destinationTile = ((IMechanical) source).getPosition().translate(from.getOpposite()).getTileEntity(world());