diff options
author | pyure <pyure@hotmail.com> | 2015-08-08 20:14:06 -0400 |
---|---|---|
committer | pyure <pyure@hotmail.com> | 2015-08-08 20:14:06 -0400 |
commit | a170c6529a81b8c94813f152b272dde48c1585df (patch) | |
tree | 25359d14e2eb6f56706ed3ec6f7da1abd4b4bb8c | |
parent | c71e7473d6fa42abee3db76371c16e433b133f7a (diff) | |
download | GT5-Unofficial-a170c6529a81b8c94813f152b272dde48c1585df.tar.gz GT5-Unofficial-a170c6529a81b8c94813f152b272dde48c1585df.tar.bz2 GT5-Unofficial-a170c6529a81b8c94813f152b272dde48c1585df.zip |
Update Large Steam Turbine
* Multiple input hatches now handled properly.
* Now use 125% maximum input consumption and penalty
* We now track averageFlow and totalFlow separately: we don't want turbine byproducts generated from the average, but the actual consumption.
Notes from last pull:
* We track 125% allowance via remainingFlow. We do still attempt to pull 125% from each hatch, but only up to our 125% overall allowance. (So even with two hatches, we can still only pull 500 steam total from a 400 steam rotor)
* With remainingFlow, we gain optimization: we don't even check unnecessary hatches if the first one provided enough steam.
* Reinstated averageFlow.
* added a ton of comments for your convenience.
-rw-r--r-- | main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java b/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java index 19a7f6bad2..46f15130f5 100644 --- a/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java +++ b/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java @@ -67,21 +67,32 @@ public class GT_MetaTileEntity_LargeTurbine_Steam extends GT_MetaTileEntity_Larg @Override int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff) { int tEU=0; - int tOut=0; - for(int i=0;i<aFluids.size();i++){ + int averageFlow = 0; // To prevent closed water loops from breaking. EU is based on average flow + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + int remainingFlow = (int)(aOptFlow * 1.25f); // Allowed to use up to 125% of optimal flow. Variable required outside of loop for multi-hatch scenarios. + + for(int i=0;i<aFluids.size() && remainingFlow > 0;i++){ // loop through each hatch; extract inputs and track totals. if(aFluids.get(i).getFluid().getUnlocalizedName(aFluids.get(i)).equals("fluid.steam")||aFluids.get(i).getFluid().getUnlocalizedName(aFluids.get(i)).equals("ic2.fluidSteam")){ - tOut = Math.min((int)(aOptFlow*1.5f),aFluids.get(i).amount); - depleteInput(new FluidStack(aFluids.get(i), tOut)); + flow = aFluids.get(i).amount; // Get all (steam) in hatch + flow = Math.min(flow, Math.min(remainingFlow, (int)( aOptFlow * 1.25f))); // try to use up to 125% of optimal flow w/o exceeding remainingFlow + depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used } } - tOut = getAverage(tOut); - tEU = Math.min(aOptFlow,tOut); - addOutput(GT_ModHandler.getDistilledWater(useWater(tOut/160.0f))); - if(tOut>0&&tOut<aOptFlow){ - tEU = tEU*(tOut*100/aOptFlow)+3; - } - return tEU * aBaseEff / 20000; + averageFlow = getAverage(totalFlow); // calculate recent average usage for power output purposes but NOT byproduct generation. We used what we used, and get byproducts from that. + + tEU = Math.min(aOptFlow, averageFlow); + addOutput(GT_ModHandler.getDistilledWater(useWater(totalFlow/160.0f))); + if(averageFlow > 0 && averageFlow != aOptFlow){ + float efficiency = 1.0f - Math.abs(((averageFlow - (float)aOptFlow) / aOptFlow)); + tEU *= efficiency; + tEU = Math.max(1, tEU * aBaseEff / 20000); + } + else { + tEU = tEU * aBaseEff / 20000; + } + return tEU; } - - } |