Worked on generator rotation logic
This commit is contained in:
parent
20dcbce5c5
commit
1ab4bd3a3f
2 changed files with 106 additions and 98 deletions
|
@ -15,6 +15,7 @@ public class BlockGenerator extends BlockRIRotatable
|
|||
{
|
||||
super("generator");
|
||||
setTextureName(Reference.PREFIX + "material_steel");
|
||||
rotationMask = 0b111111;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue