diff options
author | BlueWeabo <ilia.iliev2005@gmail.com> | 2023-08-13 21:28:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-13 20:28:15 +0200 |
commit | 5003739d5bcc4defaca17809e3c78d475fc99f92 (patch) | |
tree | ba0818b7588a673d868ba46b6d5e8a04aa884598 /src/main/java/gregtech/api | |
parent | 1881f713fcbb008f83d569d9ce7f26aa52ca925b (diff) | |
download | GT5-Unofficial-5003739d5bcc4defaca17809e3c78d475fc99f92.tar.gz GT5-Unofficial-5003739d5bcc4defaca17809e3c78d475fc99f92.tar.bz2 GT5-Unofficial-5003739d5bcc4defaca17809e3c78d475fc99f92.zip |
Fix overclock calculator calculating eu/t use for ulv recipe wrong on certain parallel (#2225)
* fix overclock calculator calculating eu/t use for ulv recipe wrong on certain parallel
* make formula into its own method
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_OverclockCalculator.java | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java index 9a1ad267b0..0e56d097e7 100644 --- a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java +++ b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java @@ -8,7 +8,7 @@ import gregtech.api.enums.GT_Values; public class GT_OverclockCalculator { - private static final double LOG4 = Math.log(4); + private static final double LOG2 = Math.log(2); /** * Voltage the recipe will run at @@ -390,19 +390,6 @@ public class GT_OverclockCalculator { if (laserOC && amperageOC) { throw new IllegalStateException("Tried to calculate overclock with both laser and amperage overclocking"); } - // ULV recipes are annoying in that those under 8 eut will overclock extra if there is too much amperage for - // them - // And those at 2 eut or 1 eut would overclock one extra more. - if (!amperageOC) { - if (recipeVoltage <= GT_Values.V[0]) { - // What we check here is to be able to remove extra amperage on the machine and also make sure one - // doesn't get more amperage from it - long oldMachineAmperage = machineAmperage; - machineAmperage = recipeVoltage <= 2 ? Math.max(parallel / machineAmperage, 1) - : Math.max(parallel * 4 / machineAmperage, 1); - machineAmperage = Math.min(machineAmperage, oldMachineAmperage); - } - } double heatDiscountMultiplier = calculateHeatDiscountMultiplier(); duration = (int) Math.ceil(duration * speedBoost); if (heatOC) { @@ -413,6 +400,9 @@ public class GT_OverclockCalculator { double machinePowerTier = calculateMachinePowerTier(); // Math.log(a) / Math.log(b) equals to log_b (a) overclockCount = calculateAmountOfNeededOverclocks(machinePowerTier, recipePowerTier); + if (recipeVoltage <= GT_Values.V[0]) { + overclockCount = Math.min(overclockCount, calculateRecipeToMachineVoltageDifference()); + } if (overclockCount < 0) { recipeVoltage = Long.MAX_VALUE; duration = Integer.MAX_VALUE; @@ -443,15 +433,20 @@ public class GT_OverclockCalculator { } private double calculateRecipePowerTier(double heatDiscountMultiplier) { - return Math.max( - 1, - Math.log(recipeVoltage * parallel * eutDiscount * heatDiscountMultiplier * recipeAmperage) / LOG4 - 1); + return calculatePowerTier(recipeVoltage * parallel * eutDiscount * heatDiscountMultiplier * recipeAmperage); } private double calculateMachinePowerTier() { - return Math.max( - 1, - Math.log(machineVoltage * (amperageOC ? machineAmperage : Math.min(machineAmperage, parallel))) / LOG4 - 1); + return calculatePowerTier( + machineVoltage * (amperageOC ? machineAmperage : Math.min(machineAmperage, parallel))); + } + + private int calculateRecipeToMachineVoltageDifference() { + return (int) (Math.ceil(calculatePowerTier(machineVoltage)) - Math.ceil(calculatePowerTier(recipeVoltage))); + } + + private double calculatePowerTier(double voltage) { + return 1 + Math.max(0, (Math.log(voltage) / LOG2) - 5) / 2; } private long calculateFinalRecipeEUt(double heatDiscountMultiplier) { |