Add an hidden dice throw feature.
This commit is contained in:
		
							parent
							
								
									4b34446697
								
							
						
					
					
						commit
						567b86e724
					
				
					 5 changed files with 110 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -56,7 +56,11 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
    private val skillRepository: SkillRepository,
 | 
			
		||||
    private val alterationRepository: AlterationRepository,
 | 
			
		||||
) {
 | 
			
		||||
    fun roll(diceThrow: DiceThrow, alterationId: List<String>): DiceThrowResult? {
 | 
			
		||||
    fun roll(
 | 
			
		||||
        diceThrow: DiceThrow,
 | 
			
		||||
        isThrowHidden: Boolean,
 | 
			
		||||
        alterationId: List<String>,
 | 
			
		||||
    ): DiceThrowResult? {
 | 
			
		||||
        val sheet = characterSheetRepository.find(name = diceThrow.character)
 | 
			
		||||
        val alterations = alterationRepository.getAlterations(character = diceThrow.character)
 | 
			
		||||
            .filter { alterationId.contains(it.name) }
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +74,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_dexterity) },
 | 
			
		||||
                    ability = Property.INITIATIVE,
 | 
			
		||||
                    relatedStat = Property.DEXTERITY,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Strength -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +84,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_strength) },
 | 
			
		||||
                    ability = Property.STRENGTH_THROW,
 | 
			
		||||
                    relatedStat = Property.STRENGTH,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Dexterity -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -88,6 +94,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_dexterity) },
 | 
			
		||||
                    ability = Property.DEXTERITY_THROW,
 | 
			
		||||
                    relatedStat = Property.DEXTERITY,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Constitution -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -97,6 +104,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_constitution) },
 | 
			
		||||
                    ability = Property.CONSTITUTION_THROW,
 | 
			
		||||
                    relatedStat = Property.CONSTITUTION,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Intelligence -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -106,6 +114,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.INTELLIGENCE_THROW,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Wisdom -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +123,8 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    abilityLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.WISDOM_THROW,
 | 
			
		||||
                    relatedStat = Property.WISDOM
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Charisma -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +133,8 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    abilityLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    relatedLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    ability = Property.CHARISMA_THROW,
 | 
			
		||||
                    relatedStat = Property.CHARISMA
 | 
			
		||||
                    relatedStat = Property.CHARISMA,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.StrengthSavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -133,6 +144,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_strength) },
 | 
			
		||||
                    ability = Property.STRENGTH_SAVING_THROW,
 | 
			
		||||
                    relatedStat = Property.STRENGTH,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.DexteritySavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -142,6 +154,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_dexterity) },
 | 
			
		||||
                    ability = Property.DEXTERITY_SAVING_THROW,
 | 
			
		||||
                    relatedStat = Property.DEXTERITY,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.ConstitutionSavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -151,6 +164,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_constitution) },
 | 
			
		||||
                    ability = Property.CONSTITUTION_SAVING_THROW,
 | 
			
		||||
                    relatedStat = Property.CONSTITUTION,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.IntelligenceSavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +174,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.INTELLIGENCE_SAVING_THROW,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.WisdomSavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +183,8 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    abilityLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.WISDOM_SAVING_THROW,
 | 
			
		||||
                    relatedStat = Property.WISDOM
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.CharismaSavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -177,7 +193,8 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    abilityLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    relatedLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    ability = Property.CHARISMA_SAVING_THROW,
 | 
			
		||||
                    relatedStat = Property.CHARISMA
 | 
			
		||||
                    relatedStat = Property.CHARISMA,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.DeathSavingThrow -> savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -187,6 +204,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_death) },
 | 
			
		||||
                    ability = Property.DEATH_SAVING_THROW,
 | 
			
		||||
                    relatedStat = null,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Acrobatics -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -196,6 +214,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_dexterity) },
 | 
			
		||||
                    ability = Property.ACROBATICS,
 | 
			
		||||
                    relatedStat = Property.DEXTERITY,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.AnimalHandling -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -205,6 +224,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.ANIMAL_HANDLING,
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Arcana -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -214,6 +234,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.ARCANA,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Athletics -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -223,6 +244,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_strength) },
 | 
			
		||||
                    ability = Property.ATHLETICS,
 | 
			
		||||
                    relatedStat = Property.STRENGTH,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Deception -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -232,6 +254,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    ability = Property.DECEPTION,
 | 
			
		||||
                    relatedStat = Property.CHARISMA,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.History -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -241,6 +264,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.HISTORY,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Insight -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -250,6 +274,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.INSIGHT,
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Intimidation -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -259,6 +284,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    ability = Property.INTIMIDATION,
 | 
			
		||||
                    relatedStat = Property.CHARISMA,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Investigation -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -268,6 +294,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.INVESTIGATION,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Medicine -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -277,6 +304,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.MEDICINE,
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Nature -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -286,6 +314,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.NATURE,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Perception -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -295,6 +324,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.PERCEPTION,
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Performance -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -304,6 +334,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    ability = Property.PERFORMANCE,
 | 
			
		||||
                    relatedStat = Property.CHARISMA,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Persuasion -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -313,6 +344,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_charisma) },
 | 
			
		||||
                    ability = Property.PERSUASION,
 | 
			
		||||
                    relatedStat = Property.CHARISMA,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Religion -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -322,6 +354,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_intelligence) },
 | 
			
		||||
                    ability = Property.RELIGION,
 | 
			
		||||
                    relatedStat = Property.INTELLIGENCE,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.SleightOfHand -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -331,6 +364,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_dexterity) },
 | 
			
		||||
                    ability = Property.SLEIGHT_OF_HAND,
 | 
			
		||||
                    relatedStat = Property.DEXTERITY,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Stealth -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -340,6 +374,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_dexterity) },
 | 
			
		||||
                    ability = Property.STEALTH,
 | 
			
		||||
                    relatedStat = Property.DEXTERITY,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.Survival -> abilityThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -349,6 +384,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    relatedLabel = { getString(R.string.character_sheet_stat_wisdom) },
 | 
			
		||||
                    ability = Property.SURVIVAL,
 | 
			
		||||
                    relatedStat = Property.WISDOM,
 | 
			
		||||
                    isThrowHidden = isThrowHidden,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                is DiceThrow.PhysicalMeleeAttack -> {
 | 
			
		||||
| 
						 | 
				
			
			@ -505,6 +541,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
        relatedLabel: Context.() -> String?,
 | 
			
		||||
        ability: Property,
 | 
			
		||||
        relatedStat: Property,
 | 
			
		||||
        isThrowHidden: Boolean,
 | 
			
		||||
    ): DiceThrowResult = rollAbility(
 | 
			
		||||
        character = character,
 | 
			
		||||
        alterations = alterations,
 | 
			
		||||
| 
						 | 
				
			
			@ -514,6 +551,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
        relatedLabel = relatedLabel,
 | 
			
		||||
        ability = ability,
 | 
			
		||||
        relatedStat = relatedStat,
 | 
			
		||||
        isThrowHidden = isThrowHidden,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    private fun savingThrow(
 | 
			
		||||
| 
						 | 
				
			
			@ -523,6 +561,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
        relatedLabel: Context.() -> String?,
 | 
			
		||||
        ability: Property,
 | 
			
		||||
        relatedStat: Property?,
 | 
			
		||||
        isThrowHidden: Boolean,
 | 
			
		||||
    ): DiceThrowResult = rollAbility(
 | 
			
		||||
        character = character,
 | 
			
		||||
        alterations = alterations,
 | 
			
		||||
| 
						 | 
				
			
			@ -532,6 +571,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
        relatedLabel = relatedLabel,
 | 
			
		||||
        ability = ability,
 | 
			
		||||
        relatedStat = relatedStat,
 | 
			
		||||
        isThrowHidden = isThrowHidden,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    private fun rollAbility(
 | 
			
		||||
| 
						 | 
				
			
			@ -543,6 +583,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
        relatedLabel: Context.() -> String?,
 | 
			
		||||
        ability: Property,
 | 
			
		||||
        relatedStat: Property?,
 | 
			
		||||
        isThrowHidden: Boolean,
 | 
			
		||||
    ): DiceThrowResult {
 | 
			
		||||
        with(ThrowScope(context = application, character = character, alterations = alterations)) {
 | 
			
		||||
            // retrieve some wording.
 | 
			
		||||
| 
						 | 
				
			
			@ -655,7 +696,7 @@ class DiceThrowUseCase @Inject constructor(
 | 
			
		|||
                    timestamp = System.currentTimeMillis(),
 | 
			
		||||
                    title = abilityTitleString.uppercase(),
 | 
			
		||||
                    highlight = abilityLabelString.uppercase(),
 | 
			
		||||
                    hidden = ability == Property.DEATH_SAVING_THROW,
 | 
			
		||||
                    hidden = isThrowHidden,
 | 
			
		||||
                    face = 20,
 | 
			
		||||
                    roll = allValue.toLabel(),
 | 
			
		||||
                    result = rollResult,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,12 +13,16 @@ import androidx.compose.animation.fadeOut
 | 
			
		|||
import androidx.compose.animation.slideInVertically
 | 
			
		||||
import androidx.compose.animation.slideOutVertically
 | 
			
		||||
import androidx.compose.animation.togetherWith
 | 
			
		||||
import androidx.compose.foundation.layout.Arrangement
 | 
			
		||||
import androidx.compose.foundation.layout.Box
 | 
			
		||||
import androidx.compose.foundation.layout.Column
 | 
			
		||||
import androidx.compose.foundation.layout.IntrinsicSize
 | 
			
		||||
import androidx.compose.foundation.layout.PaddingValues
 | 
			
		||||
import androidx.compose.foundation.layout.Row
 | 
			
		||||
import androidx.compose.foundation.layout.fillMaxSize
 | 
			
		||||
import androidx.compose.foundation.layout.fillMaxWidth
 | 
			
		||||
import androidx.compose.foundation.layout.padding
 | 
			
		||||
import androidx.compose.foundation.layout.width
 | 
			
		||||
import androidx.compose.foundation.lazy.LazyColumn
 | 
			
		||||
import androidx.compose.foundation.lazy.items
 | 
			
		||||
import androidx.compose.material.icons.Icons
 | 
			
		||||
| 
						 | 
				
			
			@ -52,6 +56,7 @@ import androidx.compose.ui.Modifier
 | 
			
		|||
import androidx.compose.ui.composed
 | 
			
		||||
import androidx.compose.ui.graphics.Color
 | 
			
		||||
import androidx.compose.ui.platform.LocalDensity
 | 
			
		||||
import androidx.compose.ui.res.painterResource
 | 
			
		||||
import androidx.compose.ui.res.stringResource
 | 
			
		||||
import androidx.compose.ui.text.AnnotatedString
 | 
			
		||||
import androidx.compose.ui.text.font.FontWeight
 | 
			
		||||
| 
						 | 
				
			
			@ -101,6 +106,7 @@ fun RollOverlay(
 | 
			
		|||
        card = viewModel.card,
 | 
			
		||||
        groups = viewModel.alterations,
 | 
			
		||||
        showDetail = viewModel.showDetail,
 | 
			
		||||
        isThrowHidden = viewModel.isThrowHidden,
 | 
			
		||||
        onMenu = {
 | 
			
		||||
            scope.launch { drawer.open() }
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			@ -122,6 +128,9 @@ fun RollOverlay(
 | 
			
		|||
        onAlteration = {
 | 
			
		||||
            viewModel.onAlteration(it)
 | 
			
		||||
        },
 | 
			
		||||
        onThrowVisibilityChange = {
 | 
			
		||||
            viewModel.onThrowVisibilityChange(it)
 | 
			
		||||
        },
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    BackHandler(
 | 
			
		||||
| 
						 | 
				
			
			@ -144,6 +153,7 @@ private fun RollOverlayContent(
 | 
			
		|||
    card: State<ThrowsCardUio?>,
 | 
			
		||||
    groups: State<List<AlterationGroupUio>>,
 | 
			
		||||
    showDetail: State<Boolean>,
 | 
			
		||||
    isThrowHidden: State<Boolean>,
 | 
			
		||||
    onMenu: () -> Unit,
 | 
			
		||||
    onMenuClose: () -> Unit,
 | 
			
		||||
    onClose: () -> Unit,
 | 
			
		||||
| 
						 | 
				
			
			@ -151,6 +161,7 @@ private fun RollOverlayContent(
 | 
			
		|||
    onCard: () -> Unit,
 | 
			
		||||
    onAlterationInfo: (id: String) -> Unit,
 | 
			
		||||
    onAlteration: (id: String) -> Unit,
 | 
			
		||||
    onThrowVisibilityChange: (Boolean) -> Unit,
 | 
			
		||||
) {
 | 
			
		||||
    val density = LocalDensity.current
 | 
			
		||||
    val enableDrawer = remember {
 | 
			
		||||
| 
						 | 
				
			
			@ -214,8 +225,23 @@ private fun RollOverlayContent(
 | 
			
		|||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Row(
 | 
			
		||||
                        modifier = Modifier.fillMaxWidth(4f / 5f),
 | 
			
		||||
                        horizontalArrangement = Arrangement.SpaceBetween
 | 
			
		||||
                    ) {
 | 
			
		||||
                        IconButton(
 | 
			
		||||
                            onClick = { onThrowVisibilityChange(isThrowHidden.value.not()) },
 | 
			
		||||
                        ) {
 | 
			
		||||
                            Icon(
 | 
			
		||||
                                painter = when (isThrowHidden.value) {
 | 
			
		||||
                                    true -> painterResource(id = R.drawable.ic_visibility_off_24)
 | 
			
		||||
                                    else -> painterResource(id = R.drawable.ic_visibility_24)
 | 
			
		||||
                                },
 | 
			
		||||
                                tint = MaterialTheme.colorScheme.primary,
 | 
			
		||||
                                contentDescription = null,
 | 
			
		||||
                            )
 | 
			
		||||
                        }
 | 
			
		||||
                        TextButton(
 | 
			
		||||
                        modifier = Modifier.align(alignment = Alignment.End),
 | 
			
		||||
                            onClick = onMenuClose,
 | 
			
		||||
                        ) {
 | 
			
		||||
                            Text(
 | 
			
		||||
| 
						 | 
				
			
			@ -225,6 +251,7 @@ private fun RollOverlayContent(
 | 
			
		|||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        content = {
 | 
			
		||||
            Scaffold(
 | 
			
		||||
| 
						 | 
				
			
			@ -352,6 +379,7 @@ private fun RollOverlayPreview(
 | 
			
		|||
                card = preview.card,
 | 
			
		||||
                groups = rememberRollAlterations(),
 | 
			
		||||
                showDetail = remember { mutableStateOf(true) },
 | 
			
		||||
                isThrowHidden = remember { mutableStateOf(true) },
 | 
			
		||||
                onMenu = { },
 | 
			
		||||
                onMenuClose = { },
 | 
			
		||||
                onClose = { },
 | 
			
		||||
| 
						 | 
				
			
			@ -359,6 +387,7 @@ private fun RollOverlayPreview(
 | 
			
		|||
                onCard = { },
 | 
			
		||||
                onAlterationInfo = { },
 | 
			
		||||
                onAlteration = { },
 | 
			
		||||
                onThrowVisibilityChange = { },
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,11 +68,15 @@ class RollOverlayViewModel @Inject constructor(
 | 
			
		|||
    private val _showDetail = mutableStateOf(true)
 | 
			
		||||
    val showDetail: State<Boolean> get() = _showDetail
 | 
			
		||||
 | 
			
		||||
    private val _isThrowHidden = mutableStateOf(false)
 | 
			
		||||
    val isThrowHidden: State<Boolean> get() = _isThrowHidden
 | 
			
		||||
 | 
			
		||||
    private val _alterationDetail = mutableStateOf<AlterationDetailUio?>(null)
 | 
			
		||||
    val alterationDetail: State<AlterationDetailUio?> get() = _alterationDetail
 | 
			
		||||
 | 
			
		||||
    fun prepareRoll(diceThrow: DiceThrow) {
 | 
			
		||||
        this.diceThrow = diceThrow
 | 
			
		||||
        _isThrowHidden.value = diceThrow is DiceThrow.DeathSavingThrow
 | 
			
		||||
        _card.value = null
 | 
			
		||||
        sheet = characterSheetRepository.find(name = diceThrow.character)
 | 
			
		||||
        _dice.value = diceFactory.convertDiceThrow(diceThrow)
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +99,7 @@ class RollOverlayViewModel @Inject constructor(
 | 
			
		|||
                // roll the dice ;)
 | 
			
		||||
                val result = rollUseCase.roll(
 | 
			
		||||
                    diceThrow = diceThrow,
 | 
			
		||||
                    isThrowHidden = _isThrowHidden.value,
 | 
			
		||||
                    alterationId = _alterations.value.mapNotNull { if (it.checked) it.label else null },
 | 
			
		||||
                )
 | 
			
		||||
                // share the result
 | 
			
		||||
| 
						 | 
				
			
			@ -123,6 +128,10 @@ class RollOverlayViewModel @Inject constructor(
 | 
			
		|||
        _showDetail.switch()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun onThrowVisibilityChange(hidden: Boolean) {
 | 
			
		||||
        _isThrowHidden.value = hidden
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun showAlterationDetail(id: String) {
 | 
			
		||||
        val alteration = diceThrow?.character?.let { character ->
 | 
			
		||||
            alterationRepository.getAlterations(character = character).firstOrNull { it.name == id }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_visibility_24.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_visibility_24.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    android:width="24dp"
 | 
			
		||||
    android:height="24dp"
 | 
			
		||||
    android:viewportWidth="960"
 | 
			
		||||
    android:viewportHeight="960">
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="M480,640q75,0 127.5,-52.5T660,460q0,-75 -52.5,-127.5T480,280q-75,0 -127.5,52.5T300,460q0,75 52.5,127.5T480,640ZM480,568q-45,0 -76.5,-31.5T372,460q0,-45 31.5,-76.5T480,352q45,0 76.5,31.5T588,460q0,45 -31.5,76.5T480,568ZM480,760q-146,0 -266,-81.5T40,460q54,-137 174,-218.5T480,160q146,0 266,81.5T920,460q-54,137 -174,218.5T480,760ZM480,460ZM480,680q113,0 207.5,-59.5T832,460q-50,-101 -144.5,-160.5T480,240q-113,0 -207.5,59.5T128,460q50,101 144.5,160.5T480,680Z"
 | 
			
		||||
      android:fillColor="#e8eaed"/>
 | 
			
		||||
</vector>
 | 
			
		||||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_visibility_off_24.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_visibility_off_24.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    android:width="24dp"
 | 
			
		||||
    android:height="24dp"
 | 
			
		||||
    android:viewportWidth="960"
 | 
			
		||||
    android:viewportHeight="960">
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="m644,532 l-58,-58q9,-47 -27,-88t-93,-32l-58,-58q17,-8 34.5,-12t37.5,-4q75,0 127.5,52.5T660,460q0,20 -4,37.5T644,532ZM772,658 L714,602q38,-29 67.5,-63.5T832,460q-50,-101 -143.5,-160.5T480,240q-29,0 -57,4t-55,12l-62,-62q41,-17 84,-25.5t90,-8.5q151,0 269,83.5T920,460q-23,59 -60.5,109.5T772,658ZM792,904L624,738q-35,11 -70.5,16.5T480,760q-151,0 -269,-83.5T40,460q21,-53 53,-98.5t73,-81.5L56,168l56,-56 736,736 -56,56ZM222,336q-29,26 -53,57t-41,67q50,101 143.5,160.5T480,680q20,0 39,-2.5t39,-5.5l-36,-38q-11,3 -21,4.5t-21,1.5q-75,0 -127.5,-52.5T300,460q0,-11 1.5,-21t4.5,-21l-84,-82ZM541,429ZM390,504Z"
 | 
			
		||||
      android:fillColor="#e8eaed"/>
 | 
			
		||||
</vector>
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue