From 1ab4bd3a3f2e355a5aef81bb1b20dae06c1dd84f Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sun, 19 Jan 2014 01:46:27 -0500 Subject: [PATCH] Worked on generator rotation logic --- .../electrical/generator/BlockGenerator.java | 1 + .../electrical/generator/TileGenerator.java | 203 +++++++++--------- 2 files changed, 106 insertions(+), 98 deletions(-) diff --git a/src/main/java/resonantinduction/electrical/generator/BlockGenerator.java b/src/main/java/resonantinduction/electrical/generator/BlockGenerator.java index da91a35a..33ceb8c1 100644 --- a/src/main/java/resonantinduction/electrical/generator/BlockGenerator.java +++ b/src/main/java/resonantinduction/electrical/generator/BlockGenerator.java @@ -15,6 +15,7 @@ public class BlockGenerator extends BlockRIRotatable { super("generator"); setTextureName(Reference.PREFIX + "material_steel"); + rotationMask = 0b111111; } @Override diff --git a/src/main/java/resonantinduction/electrical/generator/TileGenerator.java b/src/main/java/resonantinduction/electrical/generator/TileGenerator.java index 74bdc464..e5971253 100644 --- a/src/main/java/resonantinduction/electrical/generator/TileGenerator.java +++ b/src/main/java/resonantinduction/electrical/generator/TileGenerator.java @@ -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 getInputDirections() - { - EnumSet dirs = EnumSet.noneOf(ForgeDirection.class); - dirs.add(getInputDirection()); - return dirs; - } + @Override + public EnumSet getInputDirections() + { + return this.getOutputDirections(); + } - @Override - public EnumSet getOutputDirections() - { - EnumSet dirs = EnumSet.noneOf(ForgeDirection.class); - dirs.add(getOuputDirection()); - return dirs; - } + @Override + public EnumSet getOutputDirections() + { + EnumSet 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) - { - - } }