Merged TileTurbine & TileMechanicalTurbine

This commit is contained in:
Robert S 2014-06-07 07:27:35 -04:00
parent 63918f16b3
commit 8a62bdb2e3
11 changed files with 81 additions and 147 deletions

View file

@ -84,6 +84,11 @@ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld
return 0.5; return 0.5;
} }
public void update()
{
update(0.05f);
}
@Override @Override
public void update(float deltaTime) public void update(float deltaTime)
{ {

View file

@ -26,8 +26,8 @@ public class BlockMechanicalTurbine extends BlockTurbineBase
{ {
TileEntity tile = world.getBlockTileEntity(x, y, z); TileEntity tile = world.getBlockTileEntity(x, y, z);
if (tile instanceof TileTurbineBase) if (tile instanceof TileTurbine)
return ((TileTurbineBase) tile).tier; return ((TileTurbine) tile).tier;
return 0; return 0;
} }
@ -54,9 +54,9 @@ public class BlockMechanicalTurbine extends BlockTurbineBase
super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack); super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack);
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileMechanicalTurbine) if (tileEntity instanceof TileTurbine)
{ {
((TileMechanicalTurbine) tileEntity).tier = itemStack.getItemDamage(); ((TileTurbine) tileEntity).tier = itemStack.getItemDamage();
} }
} }
@ -67,11 +67,11 @@ public class BlockMechanicalTurbine extends BlockTurbineBase
{ {
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileTurbineBase) if (tileEntity instanceof TileTurbine)
{ {
if (!world.isRemote) if (!world.isRemote)
{ {
TileMechanicalTurbine tile = (TileMechanicalTurbine) tileEntity; TileTurbine tile = (TileTurbine) tileEntity;
tile.mechanicalNode.torque = -tile.mechanicalNode.torque; tile.mechanicalNode.torque = -tile.mechanicalNode.torque;
tile.mechanicalNode.angularVelocity = -tile.mechanicalNode.angularVelocity; tile.mechanicalNode.angularVelocity = -tile.mechanicalNode.angularVelocity;
} }
@ -87,11 +87,11 @@ public class BlockMechanicalTurbine extends BlockTurbineBase
{ {
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileTurbineBase) if (tileEntity instanceof TileTurbine)
{ {
if (!world.isRemote) if (!world.isRemote)
{ {
TileTurbineBase tile = (TileTurbineBase) tileEntity; TileTurbine tile = (TileTurbine) tileEntity;
if (tile.getMultiBlock().isConstructed()) if (tile.getMultiBlock().isConstructed())
{ {
@ -126,23 +126,23 @@ public class BlockMechanicalTurbine extends BlockTurbineBase
{ {
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (!world.isRemote && tileEntity instanceof TileTurbineBase) if (!world.isRemote && tileEntity instanceof TileTurbine)
{ {
Set<TileTurbineBase> toFlip = new HashSet<TileTurbineBase>(); Set<TileTurbine> toFlip = new HashSet<TileTurbine>();
if (!((TileTurbineBase) tileEntity).getMultiBlock().isConstructed()) if (!((TileTurbine) tileEntity).getMultiBlock().isConstructed())
{ {
toFlip.add((TileTurbineBase) tileEntity); toFlip.add((TileTurbine) tileEntity);
} }
else else
{ {
Set<TileTurbineBase> str = ((TileTurbineBase) tileEntity).getMultiBlock().getPrimary().getMultiBlock().getStructure(); Set<TileTurbine> str = ((TileTurbine) tileEntity).getMultiBlock().getPrimary().getMultiBlock().getStructure();
if (str != null) if (str != null)
toFlip.addAll(str); toFlip.addAll(str);
} }
for (TileTurbineBase turbine : toFlip) for (TileTurbine turbine : toFlip)
{ {
if (side == turbine.getDirection().ordinal()) if (side == turbine.getDirection().ordinal())
world.setBlockMetadataWithNotify(turbine.xCoord, turbine.yCoord, turbine.zCoord, side ^ 1, 3); world.setBlockMetadataWithNotify(turbine.xCoord, turbine.yCoord, turbine.zCoord, side ^ 1, 3);

View file

@ -22,11 +22,11 @@ public class BlockTurbineBase extends BlockRotatable
{ {
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileTurbineBase) if (tileEntity instanceof TileTurbine)
{ {
if (!world.isRemote) if (!world.isRemote)
{ {
return ((TileTurbineBase) tileEntity).getMultiBlock().toggleConstruct(); return ((TileTurbine) tileEntity).getMultiBlock().toggleConstruct();
} }
return true; return true;
@ -40,9 +40,9 @@ public class BlockTurbineBase extends BlockRotatable
{ {
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity instanceof TileTurbineBase) if (tileEntity instanceof TileTurbine)
{ {
((TileTurbineBase) tileEntity).getMultiBlock().deconstruct(); ((TileTurbine) tileEntity).getMultiBlock().deconstruct();
} }
super.breakBlock(world, x, y, z, par5, par6); super.breakBlock(world, x, y, z, par5, par6);

View file

@ -22,7 +22,7 @@ public class RenderWaterTurbine extends TileEntitySpecialRenderer implements ISi
@Override @Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f) public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
{ {
TileMechanicalTurbine tile = (TileMechanicalTurbine) t; TileTurbine tile = (TileTurbine) t;
if (tile.getMultiBlock().isPrimary()) if (tile.getMultiBlock().isPrimary())
{ {
@ -31,7 +31,7 @@ public class RenderWaterTurbine extends TileEntitySpecialRenderer implements ISi
GL11.glPushMatrix(); GL11.glPushMatrix();
RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection()); RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection());
GL11.glRotatef((float) Math.toDegrees(tile.renderAngle), 0, 1, 0); GL11.glRotatef((float) Math.toDegrees(tile.mechanicalNode.renderAngle), 0, 1, 0);
if (tile.getDirection().offsetY != 0) if (tile.getDirection().offsetY != 0)
renderWaterTurbine(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed()); renderWaterTurbine(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed());

View file

@ -22,7 +22,7 @@ public class RenderWindTurbine extends TileEntitySpecialRenderer implements ISim
@Override @Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f) public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
{ {
TileMechanicalTurbine tile = (TileMechanicalTurbine) t; TileTurbine tile = (TileTurbine) t;
if (tile.getMultiBlock().isPrimary()) if (tile.getMultiBlock().isPrimary())
{ {
@ -33,7 +33,7 @@ public class RenderWindTurbine extends TileEntitySpecialRenderer implements ISim
RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection()); RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection());
GL11.glTranslatef(0, -0.35f, 0); GL11.glTranslatef(0, -0.35f, 0);
GL11.glRotatef((float) Math.toDegrees(tile.renderAngle), 0, 1, 0); GL11.glRotatef((float) Math.toDegrees(tile.mechanicalNode.renderAngle), 0, 1, 0);
render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed()); render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed());

View file

@ -1,108 +0,0 @@
package resonantinduction.mechanical.energy.turbine;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection;
import resonant.api.grid.INode;
import resonant.api.grid.INodeProvider;
import resonant.lib.network.Synced;
import resonant.lib.network.Synced.SyncedInput;
import resonant.lib.network.Synced.SyncedOutput;
import resonantinduction.mechanical.energy.grid.MechanicalNode;
//TODO: MC 1.7, merge turbines in.
public class TileMechanicalTurbine extends TileTurbineBase implements INodeProvider
{
protected MechanicalNode mechanicalNode;
@Synced(1)
protected double renderAngularVelocity;
protected double renderAngle;
protected double prevAngularVelocity;
public TileMechanicalTurbine()
{
super();
mechanicalNode = new TurbineNode(this);
}
@Override
public void initiate()
{
mechanicalNode.reconstruct();
super.initiate();
}
@Override
public void invalidate()
{
mechanicalNode.deconstruct();
super.invalidate();
}
@Override
public void updateEntity()
{
mechanicalNode.update(0.05f);
if (!worldObj.isRemote)
{
renderAngularVelocity = (double) mechanicalNode.angularVelocity;
if (renderAngularVelocity != prevAngularVelocity)
{
prevAngularVelocity = renderAngularVelocity;
sendPowerUpdate();
}
}
else
{
renderAngle = (renderAngle + renderAngularVelocity / 20) % (Math.PI * 2);
// TODO: Make this neater
onProduce();
}
super.updateEntity();
}
@Override
public void onProduce()
{
if (!worldObj.isRemote)
{
if (mechanicalNode.torque < 0)
torque = -Math.abs(torque);
if (mechanicalNode.angularVelocity < 0)
angularVelocity = -Math.abs(angularVelocity);
mechanicalNode.apply(this, (torque - mechanicalNode.getTorque()) / 10, (angularVelocity - mechanicalNode.getAngularSpeed()) / 10);
}
}
@Override
public INode getNode(Class<? extends INode> nodeType, ForgeDirection from)
{
if (nodeType.isAssignableFrom(mechanicalNode.getClass()))
return ((TileMechanicalTurbine) getMultiBlock().get()).mechanicalNode;
return null;
}
@Override
@SyncedInput
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
tier = nbt.getInteger("tier");
mechanicalNode.load(nbt);
}
/** Writes a tile entity to NBT. */
@Override
@SyncedOutput
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setInteger("tier", tier);
mechanicalNode.save(nbt);
}
}

View file

@ -9,6 +9,8 @@ import net.minecraft.network.packet.Packet;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonant.api.grid.INode;
import resonant.api.grid.INodeProvider;
import resonant.core.ResonantEngine; import resonant.core.ResonantEngine;
import resonant.lib.References; import resonant.lib.References;
import resonant.lib.content.module.TileBase; import resonant.lib.content.module.TileBase;
@ -16,12 +18,13 @@ import resonant.lib.multiblock.IMultiBlockStructure;
import resonant.lib.network.Synced; import resonant.lib.network.Synced;
import resonant.lib.network.Synced.SyncedInput; import resonant.lib.network.Synced.SyncedInput;
import resonant.lib.network.Synced.SyncedOutput; import resonant.lib.network.Synced.SyncedOutput;
import resonantinduction.mechanical.energy.grid.MechanicalNode;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
/** Reduced version of the main turbine class */ /** Reduced version of the main turbine class */
public abstract class TileTurbineBase extends TileBase implements IMultiBlockStructure<TileTurbineBase> public class TileTurbine extends TileBase implements IMultiBlockStructure<TileTurbine>, INodeProvider
{ {
/** Radius of large turbine? */ /** Radius of large turbine? */
public int multiBlockRadius = 1; public int multiBlockRadius = 1;
@ -44,9 +47,12 @@ public abstract class TileTurbineBase extends TileBase implements IMultiBlockStr
@Synced @Synced
public int tier = 0; public int tier = 0;
public TileTurbineBase() protected MechanicalNode mechanicalNode;
public TileTurbine()
{ {
super(Material.wood); super(Material.wood);
mechanicalNode = new TurbineNode(this);
} }
public ForgeDirection getDirection() public ForgeDirection getDirection()
@ -57,14 +63,15 @@ public abstract class TileTurbineBase extends TileBase implements IMultiBlockStr
@Override @Override
public void initiate() public void initiate()
{ {
super.initiate(); mechanicalNode.reconstruct();
super.initiate();
} }
@Override @Override
public void updateEntity() public void updateEntity()
{ {
super.updateEntity(); super.updateEntity();
mechanicalNode.update();
getMultiBlock().update(); getMultiBlock().update();
if (getMultiBlock().isPrimary()) if (getMultiBlock().isPrimary())
@ -112,8 +119,19 @@ public abstract class TileTurbineBase extends TileBase implements IMultiBlockStr
return (int) (((multiBlockRadius + 0.5) * 2) * ((multiBlockRadius + 0.5) * 2)); return (int) (((multiBlockRadius + 0.5) * 2) * ((multiBlockRadius + 0.5) * 2));
} }
public void onProduce() public void onProduce()
{ {
if (!worldObj.isRemote)
{
if (mechanicalNode.torque < 0)
torque = -Math.abs(torque);
if (mechanicalNode.angularVelocity < 0)
angularVelocity = -Math.abs(angularVelocity);
mechanicalNode.apply(this, (torque - mechanicalNode.getTorque()) / 10, (angularVelocity - mechanicalNode.getAngularSpeed()) / 10);
}
} }
public void playSound() public void playSound()
@ -139,6 +157,8 @@ public abstract class TileTurbineBase extends TileBase implements IMultiBlockStr
{ {
super.readFromNBT(nbt); super.readFromNBT(nbt);
multiBlockRadius = nbt.getInteger("multiBlockRadius"); multiBlockRadius = nbt.getInteger("multiBlockRadius");
tier = nbt.getInteger("tier");
mechanicalNode.load(nbt);
getMultiBlock().load(nbt); getMultiBlock().load(nbt);
} }
@ -149,6 +169,8 @@ public abstract class TileTurbineBase extends TileBase implements IMultiBlockStr
{ {
super.writeToNBT(nbt); super.writeToNBT(nbt);
nbt.setInteger("multiBlockRadius", multiBlockRadius); nbt.setInteger("multiBlockRadius", multiBlockRadius);
nbt.setInteger("tier", tier);
mechanicalNode.save(nbt);
getMultiBlock().save(nbt); getMultiBlock().save(nbt);
} }
@ -214,4 +236,19 @@ public abstract class TileTurbineBase extends TileBase implements IMultiBlockStr
return worldObj; return worldObj;
} }
@Override
public INode getNode(Class<? extends INode> nodeType, ForgeDirection from)
{
if (nodeType.isAssignableFrom(mechanicalNode.getClass()))
return ((TileTurbine) getMultiBlock().get()).mechanicalNode;
return null;
}
@Override
public void invalidate()
{
mechanicalNode.deconstruct();
super.invalidate();
}
} }

View file

@ -21,7 +21,7 @@ import cpw.mods.fml.relauncher.ReflectionHelper;
* @author Calclavia * @author Calclavia
* *
*/ */
public class TileWaterTurbine extends TileMechanicalTurbine public class TileWaterTurbine extends TileTurbine
{ {
public int powerTicks = 0; public int powerTicks = 0;
@ -33,7 +33,7 @@ public class TileWaterTurbine extends TileMechanicalTurbine
@Override @Override
public boolean canConnect(ForgeDirection from, Object source) public boolean canConnect(ForgeDirection from, Object source)
{ {
if (source instanceof MechanicalNode && !(source instanceof TileMechanicalTurbine)) if (source instanceof MechanicalNode && !(source instanceof TileTurbine))
{ {
/** /**
* Face to face stick connection. * Face to face stick connection.

View file

@ -15,7 +15,7 @@ import universalelectricity.api.vector.Vector3;
* power plants. * power plants.
* *
* @author Calclavia */ * @author Calclavia */
public class TileWindTurbine extends TileMechanicalTurbine public class TileWindTurbine extends TileTurbine
{ {
private final byte[] openBlockCache = new byte[224]; private final byte[] openBlockCache = new byte[224];
private int checkCount = 0; private int checkCount = 0;

View file

@ -4,22 +4,22 @@ import net.minecraft.tileentity.TileEntity;
import resonant.lib.multiblock.MultiBlockHandler; import resonant.lib.multiblock.MultiBlockHandler;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
public class TurbineMBlockHandler extends MultiBlockHandler<TileTurbineBase> public class TurbineMBlockHandler extends MultiBlockHandler<TileTurbine>
{ {
public TurbineMBlockHandler(TileTurbineBase wrapper) public TurbineMBlockHandler(TileTurbine wrapper)
{ {
super(wrapper); super(wrapper);
} }
public TileTurbineBase getWrapperAt(Vector3 position) public TileTurbine getWrapperAt(Vector3 position)
{ {
TileEntity tile = position.getTileEntity(self.getWorld()); TileEntity tile = position.getTileEntity(self.getWorld());
if (tile != null && wrapperClass.isAssignableFrom(tile.getClass())) if (tile != null && wrapperClass.isAssignableFrom(tile.getClass()))
{ {
if (((TileTurbineBase) tile).getDirection() == self.getDirection() && ((TileTurbineBase) tile).tier == self.tier) if (((TileTurbine) tile).getDirection() == self.getDirection() && ((TileTurbine) tile).tier == self.tier)
{ {
return (TileTurbineBase) tile; return (TileTurbine) tile;
} }
} }

View file

@ -11,20 +11,20 @@ import resonantinduction.mechanical.energy.grid.MechanicalNode;
* @author Calclavia, Darkguardsman */ * @author Calclavia, Darkguardsman */
public class TurbineNode extends MechanicalNode public class TurbineNode extends MechanicalNode
{ {
public TurbineNode(TileMechanicalTurbine parent) public TurbineNode(TileTurbine tileTurbineBase)
{ {
super(parent); super(tileTurbineBase);
} }
public TileMechanicalTurbine turbine() public TileTurbine turbine()
{ {
return (TileMechanicalTurbine) getParent(); return (TileTurbine) getParent();
} }
@Override @Override
public boolean canConnect(ForgeDirection from, Object source) public boolean canConnect(ForgeDirection from, Object source)
{ {
if (source instanceof MechanicalNode && !(source instanceof TileMechanicalTurbine)) if (source instanceof MechanicalNode && !(source instanceof TileTurbine))
{ {
/** Face to face stick connection. */ /** Face to face stick connection. */
TileEntity sourceTile = position().translate(from).getTileEntity(turbine().getWorld()); TileEntity sourceTile = position().translate(from).getTileEntity(turbine().getWorld());