Skip to content

Commit

Permalink
Add some shortcut overrides to heat handlers to avoid having to get t…
Browse files Browse the repository at this point in the history
…he list of heat capacitors multiple times
  • Loading branch information
pupnewfster committed Apr 1, 2024
1 parent cc86d9f commit 3ffdc70
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 7 deletions.
75 changes: 69 additions & 6 deletions src/api/java/mekanism/api/heat/IMekanismHeatHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,78 @@ default double getInverseInsulation(int capacitor, @Nullable Direction side) {
* @return The total inverse insulation coefficient across all capacitors in this handler.
*/
default double getTotalInverseInsulation(@Nullable Direction side) {
int heatCapacitorCount = getHeatCapacitorCount(side);
if (heatCapacitorCount == 1) {
return getInverseInsulation(0, side);
List<IHeatCapacitor> heatCapacitors = getHeatCapacitors(side);
if (heatCapacitors.isEmpty()) {
return HeatAPI.DEFAULT_INVERSE_INSULATION;
} else if (heatCapacitors.size() == 1) {
return heatCapacitors.get(0).getInverseInsulation();
}
double sum = 0;
double totalCapacity = getTotalHeatCapacity(side);
for (int capacitor = 0; capacitor < heatCapacitorCount; capacitor++) {
sum += getInverseInsulation(capacitor, side) * (getHeatCapacity(capacitor, side) / totalCapacity);
double totalCapacity = getTotalHeatCapacity(heatCapacitors);
for (IHeatCapacitor capacitor : heatCapacitors) {
sum += capacitor.getInverseInsulation() * (capacitor.getHeatCapacity() / totalCapacity);
}
return sum;
}

@Override
default double getTotalTemperature(@Nullable Direction side) {
List<IHeatCapacitor> heatCapacitors = getHeatCapacitors(side);
if (heatCapacitors.isEmpty()) {
return 0;
} else if (heatCapacitors.size() == 1) {
return heatCapacitors.get(0).getTemperature();
}
double sum = 0;
double totalCapacity = getTotalHeatCapacity(heatCapacitors);
for (IHeatCapacitor capacitor : heatCapacitors) {
sum += capacitor.getTemperature() * (capacitor.getHeatCapacity() / totalCapacity);
}
return sum;
}

@Override
default double getTotalInverseConductionCoefficient(@Nullable Direction side) {
List<IHeatCapacitor> heatCapacitors = getHeatCapacitors(side);
if (heatCapacitors.isEmpty()) {
return HeatAPI.DEFAULT_INVERSE_CONDUCTION;
} else if (heatCapacitors.size() == 1) {
return heatCapacitors.get(0).getInverseConduction();
}
double sum = 0;
double totalCapacity = getTotalHeatCapacity(heatCapacitors);
for (IHeatCapacitor capacitor : heatCapacitors) {
sum += capacitor.getInverseConduction() * (capacitor.getHeatCapacity() / totalCapacity);
}
return sum;
}

@Override
default double getTotalHeatCapacity(@Nullable Direction side) {
return getTotalHeatCapacity(getHeatCapacitors(side));
}

private double getTotalHeatCapacity(List<IHeatCapacitor> capacitors) {
if (capacitors.size() == 1) {
return capacitors.get(0).getHeatCapacity();
}
double sum = 0;
for (IHeatCapacitor capacitor : capacitors) {
sum += capacitor.getHeatCapacity();
}
return sum;
}

@Override
default void handleHeat(double transfer, @Nullable Direction side) {
List<IHeatCapacitor> heatCapacitors = getHeatCapacitors(side);
if (heatCapacitors.size() == 1) {
heatCapacitors.get(0).handleHeat(transfer);
} else if (!heatCapacitors.isEmpty()) {
double totalHeatCapacity = getTotalHeatCapacity(heatCapacitors);
for (IHeatCapacitor heatCapacitor : heatCapacitors) {
heatCapacitor.handleHeat(transfer * (heatCapacitor.getHeatCapacity() / totalHeatCapacity));
}
}
}
}
20 changes: 20 additions & 0 deletions src/api/java/mekanism/api/heat/ISidedHeatHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,11 @@ default double getTotalTemperature(@Nullable Direction side) {
return sum;
}

@Override
default double getTotalTemperature() {
return getTotalTemperature(getHeatSideFor());
}

/**
* A sided variant of {@link IHeatHandler#getTotalInverseConduction()}, docs copied for convenience.
* <p>
Expand All @@ -156,6 +161,11 @@ default double getTotalInverseConductionCoefficient(@Nullable Direction side) {
return sum;
}

@Override
default double getTotalInverseConduction() {
return getTotalInverseConductionCoefficient(getHeatSideFor());
}

/**
* A sided variant of {@link IHeatHandler#getTotalHeatCapacity()}, docs copied for convenience.
* <p>
Expand All @@ -177,6 +187,11 @@ default double getTotalHeatCapacity(@Nullable Direction side) {
return sum;
}

@Override
default double getTotalHeatCapacity() {
return getTotalHeatCapacity(getHeatSideFor());
}

/**
* A sided variant of {@link IHeatHandler#handleHeat(double)}, docs copied for convenience.
* <p>
Expand All @@ -198,4 +213,9 @@ default void handleHeat(double transfer, @Nullable Direction side) {
}
}
}

@Override
default void handleHeat(double transfer) {
handleHeat(transfer, getHeatSideFor());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import mekanism.api.AutomationType;
import mekanism.api.IContentsListener;
import mekanism.api.RelativeSide;
import mekanism.api.heat.HeatAPI;
import mekanism.api.heat.HeatAPI.HeatTransfer;
import mekanism.api.heat.IHeatHandler;
import mekanism.api.math.FloatingLong;
Expand Down Expand Up @@ -172,7 +173,12 @@ private FloatingLong getBoost() {

@Override
public double getInverseInsulation(int capacitor, @Nullable Direction side) {
return side == Direction.DOWN ? 0 : super.getInverseInsulation(capacitor, side);
return side == Direction.DOWN ? HeatAPI.DEFAULT_INVERSE_INSULATION : super.getInverseInsulation(capacitor, side);
}

@Override
public double getTotalInverseInsulation(@Nullable Direction side) {
return side == Direction.DOWN ? HeatAPI.DEFAULT_INVERSE_INSULATION : super.getTotalInverseInsulation(side);
}

@NotNull
Expand Down

0 comments on commit 3ffdc70

Please sign in to comment.