diff options
author | Maxim <maxim235@gmx.de> | 2023-07-19 16:28:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-19 16:28:02 +0200 |
commit | 0275ea72b964afbd4281a759dd7f23975a20d100 (patch) | |
tree | ee7c8cf2e98bfd69d929cb95ccb06115cb3dec19 /src/main/java/gregtech/api/util | |
parent | 6656848378abe5e9bfb66e3f7b06a9f55789e9b6 (diff) | |
download | GT5-Unofficial-0275ea72b964afbd4281a759dd7f23975a20d100.tar.gz GT5-Unofficial-0275ea72b964afbd4281a759dd7f23975a20d100.tar.bz2 GT5-Unofficial-0275ea72b964afbd4281a759dd7f23975a20d100.zip |
Migrate fusion reactor to proper generic processing logic (#2145)
* Migrate fusion to generic processing logic
* Adjusted OC calculator to allow max number of OCs
* Fixed typo
* Fix buffer consumption logic
* Fix oversight
* Addressed reviews
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_OverclockCalculator.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java index 026f5e3fc9..d8948fc265 100644 --- a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java +++ b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java @@ -40,6 +40,13 @@ public class GT_OverclockCalculator { */ private boolean mHeatOC, mOneTickDiscount, calculated, mHeatDiscount; + /** If the OC calculator should only do a given amount of overclocks. Mainly used in fusion reactors */ + private boolean limitOverclocks; + /** Maximum amount of overclocks to perform, when limitOverclocks = true */ + private int maxOverclocks; + /** How many overclocks have been performed */ + private int overclockCount; + private static final int HEAT_DISCOUNT_THRESHOLD = 900; private static final int HEAT_PERFECT_OVERCLOCK_THRESHOLD = 1800; @@ -213,6 +220,16 @@ public class GT_OverclockCalculator { } /** + * Limit the amount of overclocks that can be performed, regardless of how much power is available. Mainly used for + * fusion reactors. + */ + public GT_OverclockCalculator limitOverclockCount(int maxOverclocks) { + this.limitOverclocks = true; + this.maxOverclocks = maxOverclocks; + return this; + } + + /** * Call this when all values have been put it. */ public GT_OverclockCalculator calculate() { @@ -250,7 +267,8 @@ public class GT_OverclockCalculator { long tNextConsumption = ((long) Math .ceil(mRecipeEUt * mParallel * mRecipeAmps * mEUtDiscount * heatDiscountMultiplier)) << mEUtIncreasePerOC; - while (tTierDifference > 0 && tNextConsumption < mEUt * mAmps) { + while (tTierDifference > 0 && tNextConsumption < mEUt * mAmps + && (!limitOverclocks || overclockCount++ < maxOverclocks)) { if (mDuration <= 1) { break; } @@ -263,7 +281,7 @@ public class GT_OverclockCalculator { long tNextConsumption = ((long) Math .ceil(mRecipeEUt * mParallel * mRecipeAmps * mEUtDiscount * heatDiscountMultiplier)) << mEUtIncreasePerOC; - while (tNextConsumption < mEUt * mAmps) { + while (tNextConsumption < mEUt * mAmps && (!limitOverclocks || overclockCount++ < maxOverclocks)) { if (mDuration <= 1) { break; } @@ -307,4 +325,14 @@ public class GT_OverclockCalculator { } return mDuration; } + + /** + * @return Number of performed overclocks + */ + public int getPerformedOverclocks() { + if (!calculated) { + calculate(); + } + return overclockCount; + } } |