changed power network and machine

This commit is contained in:
DarkGuardsman 2013-07-07 09:26:51 -04:00
parent 0b5da1920b
commit 0db6bb803d
2 changed files with 134 additions and 55 deletions

View file

@ -36,7 +36,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
@Override
public void startProducing(TileEntity tileEntity, ElectricityPack electricityPack)
{
if (!this.networkMember.contains(tileEntity) && tileEntity != null && electricityPack.getWatts() > 0)
if (tileEntity != null && electricityPack.getWatts() > 0)
{
this.producers.put(tileEntity, electricityPack);
}
@ -65,7 +65,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
@Override
public void startRequesting(TileEntity tileEntity, ElectricityPack electricityPack)
{
if (!this.networkMember.contains(tileEntity) && tileEntity != null && electricityPack.getWatts() > 0)
if (tileEntity != null && electricityPack.getWatts() > 0)
{
this.consumers.put(tileEntity, electricityPack);
}
@ -142,11 +142,8 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
if (pairs.getKey() != null && pairs.getValue() != null && pack != null)
{
double newWatts = totalElectricity.getWatts() + pack.getWatts();
double newVoltage = Math.max(totalElectricity.voltage, pack.voltage);
totalElectricity = ElectricityPack.getFromWatts(totalElectricity.getWatts() + pack.getWatts(), Math.max(totalElectricity.voltage, pack.voltage));
totalElectricity.amperes = newWatts / newVoltage;
totalElectricity.voltage = newVoltage;
}
}
}
@ -161,9 +158,14 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
return this.getRequestWithoutReduction();
}
public double getMemberRequest()
{
return 0;
}
public double getMaxBattery()
{
return Math.min(this.getRequest().getWatts(), this.networkMember.size() * 10);
return Math.min(this.getRequest().getWatts(), this.networkMember.size() * 10) * 2;
}
public double getCurrentBattery()
@ -208,8 +210,8 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
if (pack != null)
{
totalElectricity.amperes += pack.amperes;
totalElectricity.voltage = Math.max(totalElectricity.voltage, pack.voltage);
totalElectricity = ElectricityPack.getFromWatts(totalElectricity.getWatts() + pack.getWatts(), Math.max(totalElectricity.voltage, pack.voltage));
}
}
}
@ -230,7 +232,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
if (this.consumers.containsKey(tileEntity) && tileRequest != null)
{
if (this.wattStored >= tileRequest.getWatts())
if (this.wattStored - this.getMemberRequest() >= tileRequest.getWatts())
{
this.wattStored -= tileRequest.getWatts();
return tileRequest;
@ -243,8 +245,8 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
ElectricityPack totalRequest = this.getRequestWithoutReduction();
totalElectricity.amperes *= (tileRequest.amperes / totalRequest.amperes);
double ampsReceived = totalElectricity.amperes - (totalElectricity.amperes * totalElectricity.amperes * this.getTotalResistance()) / totalElectricity.voltage;
double voltsReceived = totalElectricity.voltage - (totalElectricity.amperes * this.getTotalResistance());
double ampsReceived = totalElectricity.amperes;
double voltsReceived = totalElectricity.voltage;
totalElectricity.amperes = ampsReceived;
totalElectricity.voltage = voltsReceived;
@ -293,7 +295,7 @@ public class NetworkPowerTiles extends NetworkTileEntities implements IElectrici
@Override
public double getTotalResistance()
{
return 1;
return 0.001;
}
@Override

View file

@ -17,10 +17,10 @@ import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.electricity.IElectricityNetwork;
import universalelectricity.core.vector.Vector3;
import universalelectricity.prefab.tile.TileEntityElectrical;
import universalelectricity.prefab.tile.TileEntityElectricityRunnable;
import buildcraft.api.power.IPowerProvider;
import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerFramework;
import buildcraft.api.power.PowerProvider;
import dark.core.PowerSystems;
import dark.core.api.INetworkPart;
@ -31,7 +31,7 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
/** Should this machine run without power */
protected boolean runPowerless = false;
/** BuildCraft power provider? */
protected IPowerProvider powerProvider;
private IPowerProvider powerProvider;
public double prevWatts, wattsReceived = 0;
@ -44,7 +44,7 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
this.prevWatts = this.wattsReceived;
if (!this.worldObj.isRemote)
{
if ((this.runPowerless || PowerSystems.runPowerLess(powerList)) && this.wattsReceived < this.getBattery(ForgeDirection.UNKNOWN))
if (!this.isDisabled() && (this.runPowerless || PowerSystems.runPowerLess(powerList)) && this.wattsReceived < this.getBattery(ForgeDirection.UNKNOWN))
{
this.wattsReceived += Math.max(this.getBattery(ForgeDirection.UNKNOWN) - this.wattsReceived, 0);
}
@ -55,6 +55,8 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
}
}
/** Any updating for power. Called seperate from the main update method too allow for inf power
* without unneeded power drain */
public void doPowerUpdate()
{
// UNIVERSAL ELECTRICITY UPDATE
@ -67,47 +69,13 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
{
ElectricityNetworkHelper.consumeFromMultipleSides(this, new ElectricityPack(0, 0));
}
// BUILDCRAFT POWER UPDATE
if (PowerFramework.currentFramework != null)
{
if (this.powerProvider == null)
{
this.powerProvider = PowerFramework.currentFramework.createPowerProvider();
this.powerProvider.configure(0, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
}
}
float requiredEnergy = (float) (this.getRequest(ForgeDirection.UNKNOWN) * UniversalElectricity.TO_BC_RATIO);
if (this.powerProvider != null && this.powerProvider.useEnergy(0, requiredEnergy, false) > 0)
{
float energyReceived = this.powerProvider.useEnergy(requiredEnergy, requiredEnergy, true);
this.onReceive(ForgeDirection.UNKNOWN, this.getVoltage(), (UniversalElectricity.BC3_RATIO * energyReceived) / this.getVoltage());
}
//TODO add other power systems
}
/** Buildcraft */
@Override
public void setPowerProvider(IPowerProvider provider)
{
this.powerProvider = provider;
}
@Override
public IPowerProvider getPowerProvider()
{
return this.powerProvider;
}
@Override
public void doWork()
{
}
@Override
public int powerRequest(ForgeDirection from)
{
if (this.canConnect(from))
if (this.canConnect(from) && !this.runPowerless)
{
return (int) Math.ceil(this.getRequest(from) * UniversalElectricity.TO_BC_RATIO);
}
@ -120,13 +88,20 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
return ElectricityNetworkHelper.getDirections(this);
}
/** Watts this tile want to receive each tick */
/** Watts this tile want to receive each tick
**
* @param side - If side == UNKNOWN then either the method that called it doesn't use sides or
* it was called from inside the machine or by the power provider. Return request equal to that
* off all sides at the given time */
public abstract double getRequest(ForgeDirection side);
/** Called when this tile gets power. Should equal getRequest or power will be wasted
*
* @param voltage - E pressure
* @param amperes - E flow rate */
* @param amperes - E flow rate
* @param side - If side == UNKNOWN then either the method that called it doesn't use sides or
* it was called from inside the machine or by the power provider. Accept power as an internal
* amount */
public void onReceive(ForgeDirection side, double voltage, double amperes)
{
if (voltage > this.getVoltage())
@ -137,18 +112,32 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
this.wattsReceived = Math.min(this.wattsReceived + (voltage * amperes), this.getBattery(side));
}
/** Amount of Watts the internal battery/cap can store */
/** Amount of Watts the internal battery/cap can store.
*
* @param side - If side == UNKNOWN then either the method that called it doesn't use sides or
* it was called from inside the machine or by the power provider. Return amount of all sides in
* this case */
public double getBattery(ForgeDirection side)
{
return this.getRequest(side) * 2;
}
/** Amount of energy currently stored for use.
*
* @param side - If side == UNKNOWN then either the method that called it doesn't use sides or
* it was called from inside the machine or by the power provider. Return amount of all sides in
* this case */
public double getCurrentBattery(ForgeDirection side)
{
return this.wattsReceived;
}
/** Sets this machine to run without power only if the given stack match an ore directory name */
public void toggleInfPower(ItemStack item)
{
if (item != null)
{
for (ItemStack stack : OreDictionary.getOres(this.powerToggleItemID))
for (ItemStack stack : OreDictionary.getOres(TileEntityRunnableMachine.powerToggleItemID))
{
if (stack.isItemEqual(item))
{
@ -237,4 +226,92 @@ public abstract class TileEntityRunnableMachine extends TileEntityElectrical imp
return connectedNetworks;
}
/** Buildcraft */
@Override
public void setPowerProvider(IPowerProvider provider)
{
this.powerProvider = provider;
}
@Override
public IPowerProvider getPowerProvider()
{
if (this.powerProvider == null)
{
this.powerProvider = new RunPowerProvider(this);
}
return this.powerProvider;
}
@Override
public void doWork()
{
}
class RunPowerProvider extends PowerProvider
{
public TileEntityRunnableMachine tileEntity;
public RunPowerProvider(TileEntityRunnableMachine tile)
{
tileEntity = tile;
}
@Override
public void receiveEnergy(float quantity, ForgeDirection from)
{
powerSources[from.ordinal()] = 2;
tileEntity.onReceive(ForgeDirection.UNKNOWN, tileEntity.getVoltage(), (UniversalElectricity.BC3_RATIO * quantity) / tileEntity.getVoltage());
}
@Override
public float useEnergy(float min, float max, boolean doUse)
{
float result = 0;
if (tileEntity.wattsReceived >= min)
{
if (tileEntity.wattsReceived <= max)
{
result = (float) tileEntity.wattsReceived;
if (doUse)
{
tileEntity.wattsReceived = 0;
}
}
else
{
result = max;
if (doUse)
{
tileEntity.wattsReceived -= max;
}
}
}
return result;
}
@Override
public float getEnergyStored()
{
return (float) this.tileEntity.getCurrentBattery(ForgeDirection.UNKNOWN);
}
@Override
public int getMaxEnergyReceived()
{
return (int) Math.ceil(this.tileEntity.getBattery(ForgeDirection.UNKNOWN));
}
@Override
public int getMaxEnergyStored()
{
return (int) Math.ceil(this.tileEntity.getBattery(ForgeDirection.UNKNOWN));
}
}
}