Try to search for better path when cabling changes even if current path set is sufficient

This commit is contained in:
DBotThePony 2025-02-11 13:54:23 +07:00
parent 486060c8a4
commit be9641fc03
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -90,6 +90,7 @@ class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableG
private class CacheEntry {
val paths = ArrayList<SegmentPath>(1)
var saturated = false
var forceExploreAlternatives = false
}
// TODO: LRU cache?
@ -548,7 +549,8 @@ class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableG
var maxThroughput = list.paths.maxOfOrNull { it.availableThroughput } ?: Decimal.ZERO
var combinedThroughput = list.paths.iterator().map { it.availableThroughput }.reduce(Decimal.ZERO, Decimal::plus)
while (combinedThroughput < energyToTransfer && !list.saturated && ++lastTickSearches <= maxSearches) {
while ((list.forceExploreAlternatives || combinedThroughput < energyToTransfer) && !list.saturated && ++lastTickSearches <= maxSearches) {
list.forceExploreAlternatives = false
val find = findPath(a, b, list.paths, maxThroughput)
if (find == null || find in list.paths) {
@ -568,7 +570,10 @@ class EnergyCableGraph : GraphNodeList<EnergyCableBlockEntity.Node, EnergyCableG
}
fun notifyThroughputsChanged() {
pathCache.values.forEach { it.saturated = false }
pathCache.values.forEach {
it.saturated = false
it.forceExploreAlternatives = true
}
}
override fun onNodeRemoved(node: EnergyCableBlockEntity.Node) {