Gears now back to semi-working

This commit is contained in:
Calclavia 2014-01-20 23:22:10 +08:00
parent bc81e18874
commit f64b157544
10 changed files with 124 additions and 70 deletions

View file

@ -69,7 +69,7 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
{
float angularVelocity = extract / torqueRatio;
long torque = (long) (extract / angularVelocity);
energy.extractEnergy(((IMechanical) mechanical).getNetwork().onReceiveEnergy(((IMechanical) mechanical), torque, angularVelocity), true);
energy.extractEnergy(((IMechanical) mechanical).getNetwork(outputDir.getOpposite()).onReceiveEnergy(((IMechanical) mechanical), torque, angularVelocity), true);
}
}
}
@ -153,6 +153,12 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
return this.network;
}
@Override
public IMechanicalNetwork getNetwork(ForgeDirection from)
{
return getNetwork();
}
@Override
public void setNetwork(IMechanicalNetwork network)
{
@ -177,4 +183,9 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
return false;
}
@Override
public IMechanical getInstance(ForgeDirection from)
{
return this;
}
}

View file

@ -15,6 +15,7 @@ import resonantinduction.api.IBelt;
import resonantinduction.core.ResonantInduction;
import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.network.IMechanical;
import resonantinduction.mechanical.network.IMechanicalNetwork;
import resonantinduction.mechanical.network.TileMechanical;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.network.IPacketReceiverWithID;
@ -296,4 +297,12 @@ public class TileConveyorBelt extends TileMechanical implements IBelt, IRotatabl
return 0.5f;
}
@Override
public IMechanicalNetwork getNetwork(ForgeDirection from)
{
if (from != this.getDirection() && from != this.getDirection().getOpposite())
return getNetwork();
return null;
}
}

View file

@ -3,8 +3,10 @@ package resonantinduction.mechanical.gear;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.common.ForgeDirection;
import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.network.IMechanical;
import resonantinduction.mechanical.network.IMechanicalNetwork;
import resonantinduction.mechanical.network.PartMechanical;
import codechicken.lib.vec.Vector3;
import cpw.mods.fml.relauncher.Side;
@ -27,7 +29,7 @@ public class PartGear extends PartMechanical implements IMechanical
{
if (manualCrankTime > 0)
{
getNetwork().onReceiveEnergy(this, 20, 0.2f);
manualCrankTime--;
}
}
@ -38,16 +40,16 @@ public class PartGear extends PartMechanical implements IMechanical
@Override
public float getResistance()
{
return 0.5f;
return 0.1f;
}
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
{
System.out.println(world().isRemote + ": " + getNetwork());
if (player.isSneaking())
{
getNetwork().onReceiveEnergy(this, 20, 0.3f);
this.manualCrankTime = 20;
}
@ -81,4 +83,11 @@ public class PartGear extends PartMechanical implements IMechanical
{
return "resonant_induction_gear";
}
@Override
public IMechanical getInstance(ForgeDirection from)
{
return this;
}
}

View file

@ -27,9 +27,16 @@ public interface IMechanical extends IConnector<IMechanicalNetwork>
public void setClockwise(boolean isClockwise);
/**
* *
*
* @return Return true if the mechanical block should have its rotation set inveresed.
*/
public boolean isRotationInversed();
public IMechanicalNetwork getNetwork(ForgeDirection from);
/**
* Gets the instance of this mechanical through ForgeMultipart
*
* @return
*/
public IMechanical getInstance(ForgeDirection from);
}

View file

@ -107,8 +107,8 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
prevTorque = torque;
prevAngularVelocity = angularVelocity;
torque *= 0.5;
angularVelocity *= 0.5;
torque = 0;
angularVelocity = 0;
}
@Override

View file

@ -65,25 +65,6 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
}
// TODO: We don't need to tick.
@Override
public void update()
{
if (this.world().isRemote)
{
/**
* Update angle rotation.
*/
if (getNetwork().getPower() > 0)
{
if (isClockwise)
angle += getNetwork().getAngularVelocity() / 20f;
else
angle -= getNetwork().getAngularVelocity() / 20f;
}
}
}
@Override
public void onAdded()
{
@ -127,23 +108,16 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
TileEntity tile = vec.getTileEntity(world());
if (tile instanceof TileMultipart)
if (tile instanceof IMechanical)
{
TMultiPart neighbor = ((TileMultipart) tile).partMap(this.placementSide.getOpposite().ordinal());
IMechanicalNetwork networkToMerge = ((IMechanical) tile).getNetwork(this.placementSide.getOpposite());
if (neighbor instanceof IMechanical)
if (networkToMerge != null)
{
connections[this.placementSide.getOpposite().ordinal()] = neighbor;
getNetwork().merge(((IMechanical) neighbor).getNetwork());
}
}
else if (tile instanceof IMechanical)
{
connections[this.placementSide.getOpposite().ordinal()] = tile;
if (tile instanceof IMechanical)
{
getNetwork().merge(((IMechanical) tile).getNetwork());
connections[this.placementSide.getOpposite().ordinal()] = ((IMechanical) tile).getInstance(this.placementSide.getOpposite());
getNetwork().merge(networkToMerge);
}
}
/** Look for gears outside this block space, the relative UP, DOWN, LEFT, RIGHT */
@ -153,14 +127,15 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
universalelectricity.api.vector.Vector3 checkVec = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir);
TileEntity checkTile = checkVec.getTileEntity(world());
if (checkTile instanceof TileMultipart)
{
TMultiPart neighbor = ((TileMultipart) checkTile).partMap(this.placementSide.ordinal());
if (neighbor != this && neighbor instanceof IMechanical)
if (checkTile instanceof IMechanical)
{
IMechanicalNetwork networkToMerge = ((IMechanical) checkTile).getNetwork(this.placementSide);
if (networkToMerge != null)
{
connections[checkDir.ordinal()] = neighbor;
getNetwork().merge(((IMechanical) neighbor).getNetwork());
connections[checkDir.ordinal()] = ((IMechanical) checkTile).getInstance(this.placementSide);
getNetwork().merge(networkToMerge);
}
}
}
@ -169,12 +144,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
for (int i = 0; i < 6; i++)
{
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
TMultiPart neighbor = tile().partMap(this.placementSide.getRotation(checkDir).ordinal());
IMechanicalNetwork networkToMerge = ((IMechanical) tile()).getNetwork(checkDir);
if (neighbor != this && neighbor instanceof IMechanical)
if (networkToMerge != null)
{
connections[checkDir.ordinal()] = neighbor;
getNetwork().merge(((IMechanical) neighbor).getNetwork());
connections[checkDir.ordinal()] = ((IMechanical) tile()).getInstance(checkDir);
getNetwork().merge(networkToMerge);
}
}
@ -186,6 +161,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
}
}
@Override
public IMechanicalNetwork getNetwork(ForgeDirection from)
{
return getNetwork();
}
@Override
public Object[] getConnections()
{
@ -203,7 +184,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
@Override
public boolean sendNetworkPacket(long torque, float angularVelocity)
{
if (!world().isRemote && tile() != null)
if (world() != null && !world().isRemote && tile() != null)
{
tile().getWriteStream(this).writeByte(0).writeLong(torque).writeFloat(angularVelocity).writeBoolean(isClockwise);
}
@ -213,7 +194,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
public void sendRefreshPacket()
{
if (tile() != null)
if (world() != null && !world().isRemote && tile() != null)
{
tile().getWriteStream(this).writeByte(1);
}

View file

@ -36,7 +36,6 @@ public class PathfinderRotationManager extends ConnectionPathfinder<IMechanical>
this.closedSet.add(currentNode);
currentNode.setClockwise(currentIsClockwise);
currentIsClockwise = !currentNode.isClockwise();
for (IMechanical node : this.getConnectedNodes(currentNode))
{
@ -48,8 +47,8 @@ public class PathfinderRotationManager extends ConnectionPathfinder<IMechanical>
currentNode.getNetwork().setPower(0, 0);
}
currentIsClockwise = (node.isRotationInversed()) ? !currentNode.isClockwise() : currentNode.isClockwise();
findNodes(node);
currentIsClockwise = node.isRotationInversed() ? !currentNode.isClockwise() : currentNode.isClockwise();
}
}

View file

@ -3,7 +3,7 @@ package resonantinduction.mechanical.network;
import net.minecraftforge.common.ForgeDirection;
import calclavia.lib.prefab.tile.TileAdvanced;
public class TileMechanical extends TileAdvanced implements IMechanical
public abstract class TileMechanical extends TileAdvanced implements IMechanical
{
/** The mechanical connections this connector has made */
protected Object[] connections = new Object[6];
@ -70,4 +70,10 @@ public class TileMechanical extends TileAdvanced implements IMechanical
{
return false;
}
@Override
public IMechanical getInstance(ForgeDirection from)
{
return this;
}
}

View file

@ -12,6 +12,7 @@ import resonantinduction.api.recipe.RecipeUtils.ItemStackResource;
import resonantinduction.api.recipe.RecipeUtils.Resource;
import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction;
import resonantinduction.mechanical.network.IMechanicalNetwork;
import resonantinduction.mechanical.network.TileMechanical;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable;
@ -160,17 +161,6 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
return clientTimer;
}
@Override
public boolean isClockwise()
{
if (worldObj != null)
{
return !(getBlockMetadata() % 2 == 0);
}
return false;
}
@Override
public ForgeDirection getDirection()
{
@ -187,4 +177,12 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
{
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3);
}
@Override
public IMechanicalNetwork getNetwork(ForgeDirection from)
{
if (from != this.getDirection() && from != this.getDirection().getOpposite())
return getNetwork();
return null;
}
}

View file

@ -54,13 +54,15 @@ public class TraitMechanical extends TileMultipart implements IMechanical
}
@Override
public boolean canConnect(ForgeDirection direction)
public boolean canConnect(ForgeDirection from)
{
for (IMechanical connector : this.mechanicalInterfaces)
TMultiPart part = this.partMap(from.ordinal());
if (part != null)
{
if (connector.canConnect(direction.getOpposite()))
if (this.mechanicalInterfaces.contains(part))
{
return true;
return ((IMechanical) part).canConnect(from);
}
}
@ -85,6 +87,38 @@ public class TraitMechanical extends TileMultipart implements IMechanical
return null;
}
@Override
public IMechanicalNetwork getNetwork(ForgeDirection from)
{
TMultiPart part = this.partMap(from.ordinal());
if (part != null)
{
if (part instanceof IMechanical)
{
return ((IMechanical) part).getNetwork();
}
}
return null;
}
@Override
public IMechanical getInstance(ForgeDirection from)
{
TMultiPart part = this.partMap(from.ordinal());
if (part != null)
{
if (part instanceof IMechanical)
{
return (IMechanical) part;
}
}
return null;
}
@Override
public IMechanicalNetwork getNetwork()
{