Skip to content

Commit c831972

Browse files
authored
Fix support for leading + in damage expression (#69)
1 parent 0e1bf8b commit c831972

File tree

1 file changed

+12
-10
lines changed
  • common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/domain/trappings

1 file changed

+12
-10
lines changed

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/domain/trappings/DamageExpression.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@ import kotlin.jvm.JvmInline
1616
value class DamageExpression(val value: String) : Parcelable {
1717
init {
1818
require(
19-
Expression.fromString(
20-
if (value.startsWith('+')) value.substring(1) else value,
21-
Constant.values()
22-
.map { it.value to 1 }
23-
.toMap()
24-
).isDeterministic()
19+
expression(value, strengthBonus = 1).isDeterministic()
2520
) { "Yards expression must be deterministic" }
2621
}
2722

@@ -31,15 +26,22 @@ value class DamageExpression(val value: String) : Parcelable {
3126

3227
@Stable
3328
fun calculate(strengthBonus: Int, successLevels: Int): Damage {
34-
val damage = Expression.fromString(
35-
value,
36-
mapOf(Constant.STRENGTH_BONUS.value to strengthBonus),
37-
).evaluate()
29+
val damage = expression(value, strengthBonus).evaluate()
3830

3931
return Damage(damage + successLevels)
4032
}
4133

4234
companion object {
35+
private fun expression(
36+
value: String,
37+
strengthBonus: Int,
38+
): Expression {
39+
return Expression.fromString(
40+
if (value.startsWith('+')) value.substring(1) else value,
41+
mapOf(Constant.STRENGTH_BONUS.value to strengthBonus),
42+
)
43+
}
44+
4345
fun isValid(value: String) = runCatching { DamageExpression(value) }.isSuccess
4446
}
4547
}

0 commit comments

Comments
 (0)