aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2023-08-13 21:28:15 +0300
committerGitHub <noreply@github.com>2023-08-13 20:28:15 +0200
commit5003739d5bcc4defaca17809e3c78d475fc99f92 (patch)
treeba0818b7588a673d868ba46b6d5e8a04aa884598 /src/main/java/gregtech/api
parent1881f713fcbb008f83d569d9ce7f26aa52ca925b (diff)
downloadGT5-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.java35
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) {