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,126 +3,133 @@ 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;
/** Generator turns KE -> EE. Inverted one will turn EE -> KE. */
public boolean isInversed = false;
private float torqueRatio = 8000;
private float torqueRatio = 8000;
public TileGenerator()
{
energy = new EnergyStorageHandler(10000);
this.ioMap = 728;
}
public TileGenerator()
{
energy = new EnergyStorageHandler(10000);
this.ioMap = 728;
}
public float toggleRatio()
{
return torqueRatio = (torqueRatio + 1000) % energy.getMaxExtract();
}
public float toggleRatio()
{
return torqueRatio = (torqueRatio + 1000) % energy.getMaxExtract();
}
@Override
public void updateEntity()
{
if (this.isFunctioning())
{
if (!isInversed)
{
this.produce();
}
else
{
Vector3 outputVector = new Vector3(this).modifyPositionFromSide(getOuputDirection());
Object mechanical = outputVector.getTileEntity(worldObj);
@Override
public void updateEntity()
{
if (this.isFunctioning())
{
if (!isInversed)
{
this.produce();
}
else
{
Vector3 outputVector = new Vector3(this).modifyPositionFromSide(this.getDirection().getOpposite());
TileEntity mechanical = outputVector.getTileEntity(worldObj);
if (mechanical instanceof IMechanical)
{
long extract = energy.extractEnergy();
if (mechanical instanceof IMechanical)
{
long extract = energy.extractEnergy();
if (extract > 0)
{
float angularVelocity = extract / torqueRatio;
long torque = (long) (extract / angularVelocity);
((IMechanical) mechanical).onReceiveEnergy(getOuputDirection().getOpposite(), torque, angularVelocity, true);
}
}
}
}
}
if (extract > 0)
{
float angularVelocity = extract / torqueRatio;
long torque = (long) (extract / angularVelocity);
((IMechanical) mechanical).onReceiveEnergy(this.getDirection().getOpposite(), torque, angularVelocity, true);
}
}
}
}
}
@Override
public EnumSet<ForgeDirection> getInputDirections()
{
EnumSet<ForgeDirection> dirs = EnumSet.noneOf(ForgeDirection.class);
dirs.add(getInputDirection());
return dirs;
}
@Override
public EnumSet<ForgeDirection> getInputDirections()
{
return this.getOutputDirections();
}
@Override
public EnumSet<ForgeDirection> getOutputDirections()
{
EnumSet<ForgeDirection> dirs = EnumSet.noneOf(ForgeDirection.class);
dirs.add(getOuputDirection());
return dirs;
}
@Override
public EnumSet<ForgeDirection> getOutputDirections()
{
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();
}
@Override
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(this.getBlockMetadata());
}
public ForgeDirection getOuputDirection()
{
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;
}
}
@Override
public long onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity, boolean doReceive)
{
return energy.receiveEnergy((long) (torque * angularVelocity), doReceive);
}
private boolean isFunctioning()
{
return true;
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
isInversed = nbt.getBoolean("isInversed");
torqueRatio = nbt.getFloat("torqueRatio");
}
@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 writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setBoolean("isInversed", isInversed);
nbt.setFloat("torqueRatio", torqueRatio);
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
isInversed = nbt.getBoolean("isInversed");
torqueRatio = nbt.getFloat("torqueRatio");
}
@Override
public boolean isClockwise()
{
return false;
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setBoolean("isInversed", isInversed);
nbt.setFloat("torqueRatio", torqueRatio);
}
@Override
public boolean isClockwise()
{
return false;
}
@Override
public void setRotation(boolean isClockwise)
{
}
@Override
public void setRotation(boolean isClockwise)
{
}
}