Some corrections and additions of defined but defunct logic

This commit is contained in:
DBotThePony 2022-11-05 12:27:19 +07:00
parent a14a702f39
commit 778dd400f6
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -45,9 +45,9 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
*/
data class ImmutableStack(
val item: Item,
val count: Long = 1L
val multiplier: Double = 1.0
) {
constructor(item: Item, count: Int) : this(item, count.toLong())
constructor(item: Item, count: Int) : this(item, 1.0 / count.toDouble())
constructor(item: ItemStack) : this(item.item, item.count)
}
@ -63,7 +63,7 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
val isCritical: Boolean = true,
) {
val inputs: List<List<ImmutableStack>> = inputs
.map { it.filter { it.count > 0L }.collect(ImmutableList.toImmutableList()) }
.map { it.filter { it.multiplier > 0.0 }.collect(ImmutableList.toImmutableList()) }
.filter { it.isNotEmpty() }
.collect(ImmutableList.toImmutableList())
@ -223,16 +223,16 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
private data class Result(val type: Type, val value: MatterManager.IMatterValue? = null) {
constructor(value: MatterManager.IMatterValue) : this(Type.RESOLVED, value)
val isRecursion get() = type === Type.RECURSION
val isSkipped get() = type === Type.SKIPPED
val isMissing get() = type === Type.MISSING
enum class Type {
RESOLVED, RECURSION, MISSING
RESOLVED, SKIPPED, MISSING
}
companion object {
// recursive recipes should be ignored until we resolve everything else
val RECURSION = Result(Type.RECURSION)
val RECURSION = Result(Type.SKIPPED)
// missing matter values are fatal, whole recipe chain is then considered defunct
val MISSING = Result(Type.MISSING)
@ -245,7 +245,7 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
private fun doDetermineValue(item: Item): Result {
var minimalMatter: ImpreciseFraction? = null
var minimalComplexity: Double? = null
var hadRecursion = false
var hadSkips = false
recipesLoop@ for (recipe in output2Recipes[item] ?: return Result.MISSING) {
if (recipe.inputs.isEmpty()) {
@ -258,7 +258,7 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
inputsLoop@ for (inputs in recipe.inputs) {
var minimal: MatterManager.IMatterValue? = null
var minimalDivisor = 0L
var minimalMultiplier = 0.0
for (input in inputs) {
val ivalue = determineValue(input.item)
@ -269,14 +269,14 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
} else {
continue@recipesLoop
}
} else if (ivalue.isRecursion) {
hadRecursion = true
} else if (ivalue.isSkipped) {
hadSkips = true
break@recipesLoop
}
if (minimal == null || minimal > ivalue.value!!) {
minimal = ivalue.value
minimalDivisor = input.count
minimalMultiplier = input.multiplier
}
}
@ -284,11 +284,11 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
return Result.MISSING
if (accumulatedMatter == null || accumulatedComplexity == null) {
accumulatedMatter = minimal.matter / minimalDivisor
accumulatedComplexity = minimal.complexity / minimalDivisor
accumulatedMatter = minimal.matter * minimalMultiplier
accumulatedComplexity = minimal.complexity * minimalMultiplier
} else {
accumulatedMatter += minimal.matter / minimalDivisor
accumulatedComplexity += minimal.complexity / minimalDivisor
accumulatedMatter += minimal.matter * minimalMultiplier
accumulatedComplexity += minimal.complexity * minimalMultiplier
}
}
@ -302,13 +302,13 @@ object RecipeResolverManager : SimpleJsonResourceReloadListener(GsonBuilder().se
}
if (minimalMatter == null || minimalMatter > accumulatedMatter) {
minimalMatter = accumulatedMatter / recipe.output.count
minimalComplexity = accumulatedComplexity / recipe.output.count
minimalMatter = recipe.transformMatterValue(accumulatedMatter * recipe.output.multiplier)
minimalComplexity = recipe.transformComplexity(accumulatedComplexity * recipe.output.multiplier)
}
}
if (minimalMatter == null || minimalComplexity == null) {
if (hadRecursion) {
if (hadSkips) {
return Result.RECURSION
}