Add emphasis alteration.
This commit is contained in:
parent
bc7838f8a3
commit
aa82fc2347
11 changed files with 85 additions and 9 deletions
|
|
@ -22,6 +22,7 @@ import com.pixelized.rplexicon.utilitary.extentions.icon
|
|||
import com.pixelized.rplexicon.utilitary.extentions.local.advantage
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.critical
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.disadvantage
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.emphasis
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.fail
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.isBrutalCritical
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.isCritical
|
||||
|
|
@ -32,8 +33,10 @@ import com.pixelized.rplexicon.utilitary.extentions.local.toStatus
|
|||
import com.pixelized.rplexicon.utilitary.extentions.modifier
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toLabel
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
import kotlin.random.Random
|
||||
|
||||
data class DiceThrowResult(
|
||||
val dice: RollDiceUio,
|
||||
|
|
@ -546,10 +549,12 @@ class DiceThrowUseCase @Inject constructor(
|
|||
// check if the roll is affected by some status.
|
||||
val advantage = status[ability].advantage
|
||||
val disadvantage = status[ability].disadvantage
|
||||
val emphasis = status[ability].emphasis
|
||||
// main roll
|
||||
val result = roll(
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
fail = status[ability].fail,
|
||||
critical = status[ability].critical,
|
||||
)
|
||||
|
|
@ -659,6 +664,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
dice = R.drawable.ic_d20_24,
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
roll = "1d20",
|
||||
result = result.label,
|
||||
),
|
||||
|
|
@ -693,6 +699,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
// check if the roll is affected by some status.
|
||||
val advantage = status[ability].advantage
|
||||
val disadvantage = status[ability].disadvantage
|
||||
val emphasis = status[ability].emphasis
|
||||
|
||||
// compute the amount of main dice to throw.
|
||||
val amount = if (status.isCritical) {
|
||||
|
|
@ -712,6 +719,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
faces = diceThrow?.faces ?: 20,
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
fail = status[ability].fail,
|
||||
critical = status[ability].critical,
|
||||
)
|
||||
|
|
@ -767,6 +775,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
dice = diceThrow?.faces?.icon ?: R.drawable.ic_d20_24,
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
roll = "${diceThrow?.amount}d${diceThrow?.faces}",
|
||||
result = result.label,
|
||||
),
|
||||
|
|
@ -791,12 +800,14 @@ class DiceThrowUseCase @Inject constructor(
|
|||
|
||||
val advantage = status[Property.SPELL_EFFECT].advantage
|
||||
val disadvantage = status[Property.SPELL_EFFECT].disadvantage
|
||||
val emphasis = status[Property.SPELL_EFFECT].emphasis
|
||||
// main roll
|
||||
val result = roll(
|
||||
amount = spell?.effect?.amount ?: 1,
|
||||
faces = spell?.effect?.faces ?: 4,
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
fail = status[Property.SPELL_EFFECT].fail,
|
||||
critical = status[Property.SPELL_EFFECT].critical,
|
||||
)
|
||||
|
|
@ -809,6 +820,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
faces = spell.level.faces,
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
fail = status[Property.SPELL_EFFECT].fail,
|
||||
critical = status[Property.SPELL_EFFECT].critical,
|
||||
)
|
||||
|
|
@ -819,6 +831,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
roll = "${spell.level.amount}d${spell.level.faces}",
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
result = localRoll.label,
|
||||
),
|
||||
result = "${localRoll.value}",
|
||||
|
|
@ -855,6 +868,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
roll = "${spell?.effect?.amount ?: 1}d${spell?.effect?.faces ?: 4}",
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
result = result.label,
|
||||
),
|
||||
result = "${result.value}",
|
||||
|
|
@ -877,12 +891,14 @@ class DiceThrowUseCase @Inject constructor(
|
|||
|
||||
val advantage = status[Property.SKILL].advantage
|
||||
val disadvantage = status[Property.SKILL].disadvantage
|
||||
val emphasis = status[Property.SKILL].emphasis
|
||||
// main roll
|
||||
val result = roll(
|
||||
amount = skill?.effect?.amount ?: 1,
|
||||
faces = skill?.effect?.faces ?: 4,
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
fail = status[Property.SKILL].fail,
|
||||
critical = status[Property.SKILL].critical,
|
||||
)
|
||||
|
|
@ -920,6 +936,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
roll = "${skill?.effect?.amount ?: 1}d${skill?.effect?.faces ?: 4}",
|
||||
advantage = advantage,
|
||||
disadvantage = disadvantage,
|
||||
emphasis = emphasis,
|
||||
result = result.label,
|
||||
),
|
||||
result = "${result.value}",
|
||||
|
|
@ -994,6 +1011,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
faces = dice.faces,
|
||||
advantage = dice.advantage,
|
||||
disadvantage = dice.disadvantage,
|
||||
emphasis = dice.emphasis,
|
||||
fail = status.fail,
|
||||
critical = status.critical,
|
||||
)
|
||||
|
|
@ -1003,6 +1021,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
dice = dice.faces.icon,
|
||||
advantage = dice.advantage,
|
||||
disadvantage = dice.disadvantage,
|
||||
emphasis = dice.emphasis,
|
||||
roll = "${dice.count}d${dice.faces}",
|
||||
result = localRoll.label,
|
||||
),
|
||||
|
|
@ -1029,17 +1048,25 @@ class DiceThrowUseCase @Inject constructor(
|
|||
|
||||
/**
|
||||
* Make a roll of dices.
|
||||
* @param amount the number of dice.
|
||||
* @param faces the number of faces on the dices.
|
||||
* @param advantage does the throws have advantage (roll 2 keep max)
|
||||
* @param disadvantage does the throws have disadvantage (roll 2 keep min)
|
||||
* @param emphasis does the throw have emphasis (roll 2, keep furthest away from 10)
|
||||
* @param fail force the result to be 1
|
||||
* @param critical force the result to amount.
|
||||
*/
|
||||
fun roll(
|
||||
amount: Int = 1,
|
||||
faces: Int = 20,
|
||||
advantage: Boolean = false,
|
||||
disadvantage: Boolean = false,
|
||||
emphasis: Boolean,
|
||||
fail: Boolean = false,
|
||||
critical: Boolean = false,
|
||||
): DiceRollResult {
|
||||
val result = when {
|
||||
advantage && !disadvantage -> {
|
||||
advantage && !disadvantage && !emphasis -> {
|
||||
val roll = List(amount) {
|
||||
val first = random(faces = faces, fail = fail, critical = critical)
|
||||
val second = random(faces = faces, fail = fail, critical = critical)
|
||||
|
|
@ -1051,7 +1078,7 @@ class DiceThrowUseCase @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
disadvantage && !advantage -> {
|
||||
!advantage && disadvantage && !emphasis -> {
|
||||
val roll = List(amount) {
|
||||
val first = random(faces = faces, fail = fail, critical = critical)
|
||||
val second = random(faces = faces, fail = fail, critical = critical)
|
||||
|
|
@ -1063,6 +1090,27 @@ class DiceThrowUseCase @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
!advantage && !disadvantage && emphasis -> {
|
||||
val roll = List(amount) {
|
||||
var first: Int
|
||||
var second: Int
|
||||
do {
|
||||
first = random(faces = faces, fail = fail, critical = critical)
|
||||
second = random(faces = faces, fail = fail, critical = critical)
|
||||
} while (abs(first - 10) == abs(second - 10))
|
||||
|
||||
if (abs(first - 10) < abs(second - 10)) {
|
||||
second to first
|
||||
} else {
|
||||
first to second
|
||||
}
|
||||
}
|
||||
DiceRollResult(
|
||||
label = roll.joinToString(" + ") { "${it.first}~${it.second}" },
|
||||
value = roll.sumOf { it.first },
|
||||
)
|
||||
}
|
||||
|
||||
else -> {
|
||||
val roll = List(amount) {
|
||||
random(faces = faces, fail = fail, critical = critical)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue