Worked on generator rotation logic

This commit is contained in:
DarkGuardsman 2014-01-19 01:46:27 -05:00
parent 20dcbce5c5
commit 1ab4bd3a3f
2 changed files with 106 additions and 98 deletions

View file

@ -15,6 +15,7 @@ public class BlockGenerator extends BlockRIRotatable
{
super("generator");
setTextureName(Reference.PREFIX + "material_steel");
rotationMask = 0b111111;
}
@Override

View file

@ -3,18 +3,18 @@ package resonantinduction.electrical.generator;
import java.util.EnumSet;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import resonantinduction.mechanical.network.IMechanical;
import universalelectricity.api.energy.EnergyStorageHandler;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable;
import calclavia.lib.prefab.tile.TileElectrical;
/**
* A kinetic energy to electrical energy converter.
/** A kinetic energy to electrical energy converter.
*
* @author Calclavia
*/
public class TileGenerator extends TileElectrical implements IMechanical
* @author Calclavia */
public class TileGenerator extends TileElectrical implements IMechanical, IRotatable
{
/** Generator turns KE -> EE. Inverted one will turn EE -> KE. */
public boolean isInversed = false;
@ -43,8 +43,8 @@ public class TileGenerator extends TileElectrical implements IMechanical
}
else
{
Vector3 outputVector = new Vector3(this).modifyPositionFromSide(getOuputDirection());
Object mechanical = outputVector.getTileEntity(worldObj);
Vector3 outputVector = new Vector3(this).modifyPositionFromSide(this.getDirection().getOpposite());
TileEntity mechanical = outputVector.getTileEntity(worldObj);
if (mechanical instanceof IMechanical)
{
@ -54,7 +54,7 @@ public class TileGenerator extends TileElectrical implements IMechanical
{
float angularVelocity = extract / torqueRatio;
long torque = (long) (extract / angularVelocity);
((IMechanical) mechanical).onReceiveEnergy(getOuputDirection().getOpposite(), torque, angularVelocity, true);
((IMechanical) mechanical).onReceiveEnergy(this.getDirection().getOpposite(), torque, angularVelocity, true);
}
}
}
@ -64,29 +64,31 @@ public class TileGenerator extends TileElectrical implements IMechanical
@Override
public EnumSet<ForgeDirection> getInputDirections()
{
EnumSet<ForgeDirection> dirs = EnumSet.noneOf(ForgeDirection.class);
dirs.add(getInputDirection());
return dirs;
return this.getOutputDirections();
}
@Override
public EnumSet<ForgeDirection> getOutputDirections()
{
EnumSet<ForgeDirection> dirs = EnumSet.noneOf(ForgeDirection.class);
dirs.add(getOuputDirection());
EnumSet<ForgeDirection> dirs = EnumSet.allOf(ForgeDirection.class);
dirs.remove(this.getDirection());
dirs.remove(this.getDirection().ordinal());
return dirs;
}
public ForgeDirection getInputDirection()
{
return ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite();
}
public ForgeDirection getOuputDirection()
@Override
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(this.getBlockMetadata());
}
@Override
public void setDirection(ForgeDirection dir)
{
this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, dir.ordinal(), 3);
}
private boolean isFunctioning()
{
return true;
@ -94,9 +96,13 @@ public class TileGenerator extends TileElectrical implements IMechanical
@Override
public long onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity, boolean doReceive)
{
if (!this.isInversed)
{
return energy.receiveEnergy((long) (torque * angularVelocity), doReceive);
}
return 0;
}
@Override
public void readFromNBT(NBTTagCompound nbt)
@ -125,4 +131,5 @@ public class TileGenerator extends TileElectrical implements IMechanical
{
}
}