Add proper skills management.

This commit is contained in:
Thomas Andres Gomez 2023-10-09 16:07:33 +02:00
parent 6528b89f6b
commit 7b6f5b6430
45 changed files with 1355 additions and 706 deletions

View file

@ -8,10 +8,12 @@ import com.pixelized.rplexicon.model.AssignedSpell
import com.pixelized.rplexicon.model.CharacterSheet
import com.pixelized.rplexicon.model.DiceThrow
import com.pixelized.rplexicon.model.Property
import com.pixelized.rplexicon.model.Skill
import com.pixelized.rplexicon.model.Throw
import com.pixelized.rplexicon.repository.data.ActionRepository
import com.pixelized.rplexicon.repository.data.AlterationRepository
import com.pixelized.rplexicon.repository.data.CharacterSheetRepository
import com.pixelized.rplexicon.repository.data.SkillRepository
import com.pixelized.rplexicon.repository.data.SpellRepository
import com.pixelized.rplexicon.ui.screens.rolls.composable.RollDiceUio
import com.pixelized.rplexicon.ui.screens.rolls.composable.ThrowsCardUio
@ -41,6 +43,7 @@ class DiceThrowUseCase @Inject constructor(
private val characterSheetRepository: CharacterSheetRepository,
private val actionRepository: ActionRepository,
private val spellRepository: SpellRepository,
private val skillRepository: SkillRepository,
private val alterationRepository: AlterationRepository,
) {
fun roll(diceThrow: DiceThrow, alterationId: List<String>): DiceThrowResult? {
@ -432,6 +435,16 @@ class DiceThrowUseCase @Inject constructor(
alterations = alterations,
)
}
is DiceThrow.Skill -> {
val skill = skillRepository.find(
character = diceThrow.character,
skill = diceThrow.skill,
)
skillThrow(
skill = skill,
)
}
}
} else {
null
@ -894,6 +907,50 @@ class DiceThrowUseCase @Inject constructor(
)
}
private fun skillThrow(
skill: Skill?,
): DiceThrowResult {
// retrieve some wording.
val spellName = skill?.name
val titleString = application.getString(R.string.dice_roll_spell_cast, spellName)
// create a list destined to contain all the values (rolled + bonus)
val allValue = mutableListOf<Int>()
// main roll
val result = roll(
amount = skill?.effect?.amount ?: 1,
faces = skill?.effect?.faces ?: 4,
)
allValue.add(result.value)
// build the result.
return DiceThrowResult(
dice = RollDiceUio(
icon = (skill?.effect?.faces ?: 4).icon,
result = "${result.value}",
),
card = ThrowsCardUio(
title = titleString.uppercase(),
highlight = spellName,
dice = (skill?.effect?.faces ?: 4).icon,
roll = allValue.toLabel(),
result = "${allValue.sum()}",
details = listOf(
ThrowsCardUio.Detail(
title = spellName,
throws = ThrowsCardUio.Throw(
dice = (skill?.effect?.faces ?: 4).icon,
roll = "${skill?.effect?.amount ?: 1}d${skill?.effect?.faces ?: 4}",
result = result.label,
),
result = "${result.value}",
),
),
)
)
}
private fun roll(
amount: Int = 1,
faces: Int = 20,