diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2cfe110..b039ec1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,7 +34,7 @@ android { applicationId = "com.pixelized.rplexicon" minSdk = 26 targetSdk = 34 - versionName = "0.13.5" + versionName = "0.13.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/com/pixelized/rplexicon/LauncherViewModel.kt b/app/src/main/java/com/pixelized/rplexicon/LauncherViewModel.kt index 11af982..042dcea 100644 --- a/app/src/main/java/com/pixelized/rplexicon/LauncherViewModel.kt +++ b/app/src/main/java/com/pixelized/rplexicon/LauncherViewModel.kt @@ -10,6 +10,7 @@ import com.pixelized.rplexicon.data.repository.character.ActionRepository import com.pixelized.rplexicon.data.repository.character.AlterationRepository import com.pixelized.rplexicon.data.repository.character.CharacterSheetRepository import com.pixelized.rplexicon.data.repository.character.DescriptionRepository +import com.pixelized.rplexicon.data.repository.character.EquipmentRepository import com.pixelized.rplexicon.data.repository.character.ItemsRepository import com.pixelized.rplexicon.data.repository.character.SkillRepository import com.pixelized.rplexicon.data.repository.character.SpellRepository @@ -43,6 +44,7 @@ class LauncherViewModel @Inject constructor( skillRepository: SkillRepository, descriptionRepository: DescriptionRepository, itemsRepository: ItemsRepository, + equipmentRepository: EquipmentRepository, removeConRepository: RemoteConfigRepository // Unused but injected to initialize it. ) : ViewModel() { @@ -110,6 +112,14 @@ class LauncherViewModel @Inject constructor( _error.emit(FetchErrorUio.Structure(type = Type.INVENTORY)) } } + val equipment = async { + try { + equipmentRepository.fetchEquipment() + } catch (exception: Exception) { + Log.e(TAG, exception.message, exception) + _error.emit(FetchErrorUio.Structure(type = Type.EQUIPMENT)) + } + } awaitAll(characterSheet) val alteration = async { @@ -146,7 +156,7 @@ class LauncherViewModel @Inject constructor( } awaitAll(order, lexicon, location, quest) - awaitAll(description, inventory, alteration, action, spell, skill) + awaitAll(description, inventory, equipment, alteration, action, spell, skill) withContext(Dispatchers.Main) { isLoading = false diff --git a/app/src/main/java/com/pixelized/rplexicon/business/DiceThrowUseCase.kt b/app/src/main/java/com/pixelized/rplexicon/business/DiceThrowUseCase.kt index ff3c84f..c683790 100644 --- a/app/src/main/java/com/pixelized/rplexicon/business/DiceThrowUseCase.kt +++ b/app/src/main/java/com/pixelized/rplexicon/business/DiceThrowUseCase.kt @@ -28,7 +28,6 @@ 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 -import com.pixelized.rplexicon.utilitary.extentions.local.isImprovedCritical import com.pixelized.rplexicon.utilitary.extentions.local.isSavageAttacks import com.pixelized.rplexicon.utilitary.extentions.local.primary import com.pixelized.rplexicon.utilitary.extentions.local.secondary @@ -739,7 +738,7 @@ class DiceThrowUseCase @Inject constructor( val emphasis = status[ability].emphasis // compute the amount of main dice to throw. - val amount = if (status[ability].isCritical) { + val amount = if (status.isCritical) { diceThrow?.dice?.count?.times(2)?.let { if (ability == Property.PHYSICAL_MELEE_DAMAGE && status.isSavageAttacks) it.plus( 1 @@ -775,17 +774,9 @@ class DiceThrowUseCase @Inject constructor( // check for flat dice bonus (ex: healing potion 2d4 + 2) val relatedFlatBonus = diceThrow.flatBonus(name = action) - // if the roll can be a critical roll check if the roll is one. - val isCriticalSuccess = when { - canMakeCriticalRoll && result.value == 20 -> true - canMakeCriticalRoll && result.value == 19 && status.isImprovedCritical -> true - else -> false - } - - // compute the roll result. by default display a sum of everything except on a critical + // compute the final roll result val rollResult = when { - isCriticalSuccess && result.value == 20 -> "20" - isCriticalSuccess && result.value == 19 -> "19" + canMakeCriticalRoll && result.value == 20 -> "20" canMakeCriticalRoll && result.value == 1 -> "1" else -> "${allValue.sum()}" } @@ -794,7 +785,7 @@ class DiceThrowUseCase @Inject constructor( return DiceThrowResult( dice = RollDiceUio( icon = diceThrow?.dice?.icon ?: R.drawable.ic_d20_24, - isCriticalSuccess = isCriticalSuccess, + isCriticalSuccess = canMakeCriticalRoll && result.value == 20, isCriticalFailure = canMakeCriticalRoll && result.value == 1, result = rollResult, ), @@ -803,7 +794,7 @@ class DiceThrowUseCase @Inject constructor( title = titleString.uppercase(), highlight = action.uppercase(), face = diceThrow?.dice?.faces ?: 20, - isCriticalSuccess = isCriticalSuccess, + isCriticalSuccess = canMakeCriticalRoll && result.value == 20, isCriticalFailure = canMakeCriticalRoll && result.value == 1, roll = allValue.toLabel(), result = rollResult, @@ -1079,7 +1070,7 @@ class DiceThrowUseCase @Inject constructor( return this?.flatMap { status -> status.dices.map { dice -> val localRoll = roll( - amount = if (isCritical) dice.count * 2 else dice.count, + amount = if (this@ThrowScope.status.isCritical) dice.count * 2 else dice.count, faces = dice.faces, advantage = dice.advantage, disadvantage = dice.disadvantage, diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/CharacterSheet.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/CharacterSheet.kt index cfed188..45472e9 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/CharacterSheet.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/CharacterSheet.kt @@ -5,7 +5,6 @@ import androidx.annotation.StringRes import com.pixelized.rplexicon.R data class CharacterSheet( - val active: Boolean, val name: String, val race: String?, val proficiency: Int, // Bonus de maîtrise @@ -23,7 +22,7 @@ data class CharacterSheet( val spell9: Int?, // level 9 spell slot val dC: Int?, // offensive saving throw. val armorClass: Int, // Classe d'armure - val speed: Float, // Vitesse + val speed: Int, // Vitesse val strength: Int, // Force val dexterity: Int, // Dextérité val constitution: Int, // Constitution diff --git a/app/src/main/java/com/pixelized/rplexicon/data/parser/characterSheet/CharacterSheetParser.kt b/app/src/main/java/com/pixelized/rplexicon/data/parser/characterSheet/CharacterSheetParser.kt index dfaf46c..c3d028e 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/parser/characterSheet/CharacterSheetParser.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/parser/characterSheet/CharacterSheetParser.kt @@ -33,7 +33,6 @@ class CharacterSheetParser @Inject constructor( val name = item.parse(column = NAME) if (name != null) { CharacterSheet( - active = item.parseBool(column = ACTIVE) ?: false, name = name, race = item.parse(column = RACE), proficiency = item.parseInt(column = MASTERY) ?: 2, @@ -51,7 +50,7 @@ class CharacterSheetParser @Inject constructor( spell9 = item.parseInt(column = SPELL_LEVEL_9), dC = item.parseInt(column = DD_SAVE_THROW), armorClass = item.parseInt(column = ARMOR_CLASS) ?: 10, - speed = item.parseFloat(column = SPEED) ?: 10f, + speed = item.parseInt(column = SPEED) ?: 10, strength = item.parseInt(column = STRENGTH) ?: 10, dexterity = item.parseInt(column = DEXTERITY) ?: 10, constitution = item.parseInt(column = CONSTITUTION) ?: 10, @@ -104,7 +103,6 @@ class CharacterSheetParser @Inject constructor( } companion object { - private val ACTIVE = column("Actif") private val NAME = column("Nom") private val RACE = column("Race") private val LEVEL = column("Niveau") @@ -159,7 +157,6 @@ class CharacterSheetParser @Inject constructor( private val ROWS get() = listOf( - ACTIVE, NAME, RACE, LEVEL, diff --git a/app/src/main/java/com/pixelized/rplexicon/data/parser/inventory/EquipmentParser.kt b/app/src/main/java/com/pixelized/rplexicon/data/parser/inventory/EquipmentParser.kt new file mode 100644 index 0000000..717f3ea --- /dev/null +++ b/app/src/main/java/com/pixelized/rplexicon/data/parser/inventory/EquipmentParser.kt @@ -0,0 +1,71 @@ +package com.pixelized.rplexicon.data.parser.inventory + +import com.google.api.services.sheets.v4.model.ValueRange +import com.pixelized.rplexicon.data.model.Equipment +import com.pixelized.rplexicon.data.parser.parserScope +import com.pixelized.rplexicon.utilitary.exceptions.IncompatibleSheetStructure +import javax.inject.Inject + +class EquipmentParser @Inject constructor() { + + @Throws(IncompatibleSheetStructure::class) + fun parse(data: ValueRange): Map = parserScope { + lateinit var characters: List + val equipments = hashMapOf() + + data.forEachRowIndexed { index, row -> + when (index) { + // ignore the first column + 0 -> characters = row.drop(1).map { it.toString() } + + else -> row.drop(1).forEachIndexed { column, item -> + val character = characters[column] + equipments.getEquipment(name = character).let { + when (row[0]) { + BACKGROUND -> it.background = item.toItem() + HEAD -> it.head = item.toItem() + FACE -> it.face = item.toItem() + NECK -> it.neck = item.toItem() + SHOULDER -> it.shoulder = item.toItem() + BODY -> it.body = item.toItem() + CHEST -> it.chest = item.toItem() + ARM -> it.arm = item.toItem() + HAND -> it.hand = item.toItem() + RING_1 -> it.ring1 = item.toItem() + RING_2 -> it.ring2 = item.toItem() + WAIST -> it.waist = item.toItem() + FOOT -> it.foot = item.toItem() + MAIN_HAND -> it.mainHand = item.toItem() + OFF_HAND -> it.offHand = item.toItem() + } + } + } + } + } + + return@parserScope characters.associateWith { + equipments.getEquipment(name = it).build() + } + } + + private fun HashMap.getEquipment(name: String) = + this.getOrPut(name) { Equipment.Builder() } + + companion object { + private const val BACKGROUND = "Silhouette" + private const val HEAD = "Tête" + private const val FACE = "Visage" + private const val NECK = "Gorge" + private const val SHOULDER = "Épaules" + private const val BODY = "Corp" + private const val CHEST = "Torse" + private const val ARM = "Bras" + private const val HAND = "Mains" + private const val RING_1 = "Anneau 1" + private const val RING_2 = "Anneau 2" + private const val WAIST = "Taille" + private const val FOOT = "Pieds" + private const val MAIN_HAND = "Main droite" + private const val OFF_HAND = "Main gauche" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/data/repository/character/EquipmentRepository.kt b/app/src/main/java/com/pixelized/rplexicon/data/repository/character/EquipmentRepository.kt new file mode 100644 index 0000000..ef0a4db --- /dev/null +++ b/app/src/main/java/com/pixelized/rplexicon/data/repository/character/EquipmentRepository.kt @@ -0,0 +1,36 @@ +package com.pixelized.rplexicon.data.repository.character + +import com.pixelized.rplexicon.data.model.Equipment +import com.pixelized.rplexicon.data.parser.inventory.EquipmentParser +import com.pixelized.rplexicon.data.repository.CharacterBinder +import com.pixelized.rplexicon.data.repository.GoogleSheetServiceRepository +import com.pixelized.rplexicon.utilitary.Update +import com.pixelized.rplexicon.utilitary.exceptions.IncompatibleSheetStructure +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class EquipmentRepository @Inject constructor( + private val googleRepository: GoogleSheetServiceRepository, + private val equipmentParser: EquipmentParser, +) { + private val _data = MutableStateFlow>(emptyMap()) + val data: StateFlow> get() = _data + + var lastSuccessFullUpdate: Update = Update.INITIAL + private set + + fun find(name: String?): Equipment? = _data.value[name] + + @Throws(IncompatibleSheetStructure::class, Exception::class) + suspend fun fetchEquipment() { + googleRepository.fetch { sheet -> + val request = sheet.get(CharacterBinder.ID, CharacterBinder.EQUIPMENT) + val data = equipmentParser.parse(data = request.execute()) + _data.tryEmit(data) + lastSuccessFullUpdate = Update.currentTime() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/authentication/AuthenticationScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/authentication/AuthenticationScreen.kt index b7f4a92..8ebb5e7 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/authentication/AuthenticationScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/authentication/AuthenticationScreen.kt @@ -320,10 +320,7 @@ private fun rememberPortrait(): List = rememberSaveable { listOf( R.drawable.im_brulkhai, R.drawable.im_leandre, - listOf( - R.drawable.im_nelia, - R.drawable.im_nam, - ).shuffled().first(), + R.drawable.im_nelia, R.drawable.im_tigrane, R.drawable.im_unathana, ).shuffled() diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetScreen.kt index 8e70cee..91a6d69 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetScreen.kt @@ -105,7 +105,10 @@ enum class CharacterTabUio(@StringRes val label: Int) { Proficiency(R.string.character_sheet_tab_proficiency), } -@OptIn(ExperimentalMaterialApi::class) +@OptIn( + ExperimentalMaterialApi::class, + ExperimentalFoundationApi::class, +) @Composable fun CharacterSheetScreen( viewModel: CharacterSheetViewModel = hiltViewModel(), @@ -487,6 +490,7 @@ private fun CharacterScreenPreview( } } +@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterialApi::class) @Composable private fun BackHandler( sheetState: ModalBottomSheetState, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetViewModel.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetViewModel.kt index 769eb20..00561b0 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetViewModel.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/CharacterSheetViewModel.kt @@ -10,6 +10,7 @@ import com.pixelized.rplexicon.data.repository.character.ActionRepository import com.pixelized.rplexicon.data.repository.character.AlterationRepository import com.pixelized.rplexicon.data.repository.character.CharacterSheetRepository import com.pixelized.rplexicon.data.repository.character.DescriptionRepository +import com.pixelized.rplexicon.data.repository.character.EquipmentRepository import com.pixelized.rplexicon.data.repository.character.ItemsRepository import com.pixelized.rplexicon.data.repository.character.SkillRepository import com.pixelized.rplexicon.data.repository.character.SpellRepository @@ -32,6 +33,7 @@ class CharacterSheetViewModel @Inject constructor( private val descriptionRepository: DescriptionRepository, private val alterationRepository: AlterationRepository, private val itemsRepository: ItemsRepository, + private val equipmentRepository: EquipmentRepository, private val actionRepository: ActionRepository, private val spellRepository: SpellRepository, private val skillRepository: SkillRepository, @@ -91,6 +93,16 @@ class CharacterSheetViewModel @Inject constructor( } } } + val equipment = async { + if (force || equipmentRepository.lastSuccessFullUpdate.shouldUpdate()) { + try { + equipmentRepository.fetchEquipment() + } catch (exception: Exception) { + Log.e(TAG, exception.message, exception) + _error.emit(FetchErrorUio.Structure(type = Type.EQUIPMENT)) + } + } + } awaitAll(characters) val alterations = async { if (force || alterationRepository.lastSuccessFullUpdate.shouldUpdate()) { @@ -132,7 +144,7 @@ class CharacterSheetViewModel @Inject constructor( } } } - awaitAll(description, alterations, inventory, actions, spells, skills) + awaitAll(description, alterations, inventory, equipment, actions, spells, skills) _isLoading.value = false } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/CharacterSheetUioFactory.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/CharacterSheetUioFactory.kt index d48640b..6d2cb7a 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/CharacterSheetUioFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/CharacterSheetUioFactory.kt @@ -281,7 +281,7 @@ class CharacterSheetUioFactory @Inject constructor() { ), speed = LabelPointUio( label = R.string.character_sheet_title_speed, - value = "${max(sheet.speed + status[Property.SPEED].sum.toFloat(), 0f)}m", + value = "${max(sheet.speed + status[Property.SPEED].sum, 0)}m", ), masteries = MasteriesUio( martial = sheet.martial, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt index 23245ff..49d592c 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt @@ -25,9 +25,6 @@ class SpellUioFactory @Inject constructor( val modifier = diceThrow.modifier.sumOf { when (it) { Property.PROFICIENCY -> characterSheet.proficiency - Property.STRENGTH -> characterSheet.strength.modifier - Property.DEXTERITY -> characterSheet.dexterity.modifier - Property.CONSTITUTION -> characterSheet.constitution.modifier Property.INTELLIGENCE -> characterSheet.intelligence.modifier Property.WISDOM -> characterSheet.wisdom.modifier Property.CHARISMA -> characterSheet.charisma.modifier diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryPage.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryPage.kt index 2cd46e6..920c606 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryPage.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryPage.kt @@ -170,6 +170,7 @@ fun InventoryPage( } } +@OptIn(ExperimentalFoundationApi::class) @Composable private fun InventoryContent( modifier: Modifier = Modifier, @@ -247,6 +248,7 @@ private fun InventoryContent( when (item) { is String -> CategoryHeader( modifier = Modifier + .animateItem() .fillMaxWidth() .padding( start = 16.dp, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/composable/draggable/DraggableInventoryElement.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/composable/draggable/DraggableInventoryElement.kt index ec6e9cb..719773c 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/composable/draggable/DraggableInventoryElement.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/composable/draggable/DraggableInventoryElement.kt @@ -1,12 +1,15 @@ package com.pixelized.rplexicon.ui.screens.character.pages.inventory.composable.draggable +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.lazy.grid.LazyGridItemScope import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer +@OptIn(ExperimentalFoundationApi::class) @Composable -fun DraggableInventoryElement( +fun LazyGridItemScope.DraggableInventoryElement( modifier: Modifier = Modifier, dragDropState: InventoryDragDropState, index: Int, @@ -15,6 +18,7 @@ fun DraggableInventoryElement( ) { Box( modifier = Modifier + .animateItem() .graphicsLayer { dragDropState.draggedItemElement?.let { element -> this.alpha = when { diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/item_detail/ItemDetailDialog.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/item_detail/ItemDetailDialog.kt index cf14db5..b01bd31 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/item_detail/ItemDetailDialog.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/item_detail/ItemDetailDialog.kt @@ -24,13 +24,11 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CutCornerShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -185,9 +183,7 @@ private fun ItemDetailContent( ) } Column( - modifier = Modifier - .fillMaxWidth() - .verticalScroll(state = rememberScrollState()), + modifier = Modifier.fillMaxWidth(), ) { Text( modifier = Modifier.padding( diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/summary/pages/statistic/SummaryFactory.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/summary/pages/statistic/SummaryFactory.kt index 381b83b..1005ad8 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/summary/pages/statistic/SummaryFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/summary/pages/statistic/SummaryFactory.kt @@ -36,9 +36,7 @@ import com.pixelized.rplexicon.utilitary.extentions.toLabel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject @@ -148,7 +146,7 @@ class SummaryFactory @Inject constructor( val data = DataStruct() characterSheetRepository.data .combine(activeAlterationRepository.getActiveAlterations()) { sheets, alterations -> - data.sheets = sheets.filter { entry -> entry.value.active } + data.sheets = sheets data.alterations = alterations } .combine(firebaseRepository.getCharacters()) { _, fire -> @@ -218,7 +216,7 @@ class SummaryFactory @Inject constructor( label = (dexterity.modifier + status[Property.INITIATIVE].sum).toLabel() ) val speed = label( - label = "${max(sheet.speed + status[Property.SPEED].sum.toFloat(), 0f)}m", + label = "${max(sheet.speed + status[Property.SPEED].sum, 0)}m", ) val inspiration = proficiency( label = null, @@ -655,7 +653,7 @@ class SummaryFactory @Inject constructor( val data = HeaderStatStruct() characterSheetRepository.data .combine(throwRepository.getThrows()) { sheets, fire -> - data.sheets = sheets.filter { entry -> entry.value.active } + data.sheets = sheets data.fires = fire.details } .collect { diff --git a/app/src/main/java/com/pixelized/rplexicon/utilitary/ImageCache.kt b/app/src/main/java/com/pixelized/rplexicon/utilitary/ImageCache.kt index ea254be..f280094 100644 --- a/app/src/main/java/com/pixelized/rplexicon/utilitary/ImageCache.kt +++ b/app/src/main/java/com/pixelized/rplexicon/utilitary/ImageCache.kt @@ -224,65 +224,7 @@ object ImageCache { "https://bg3.wiki/w/images/f/f7/Magic_Initiate_Bard_Icon.webp" to R.drawable.icbg_magic_initiate_bard, "https://bg3.wiki/w/images/f/f9/Mage_Hand_Icon.webp" to R.drawable.icbg_mage_hand, "https://bg3.wiki/w/images/f/fb/Camp_Rich_B_Purple_Unfaded.png" to R.drawable.icbg_camp_rich_b_purple_unfaded, - "https://bg3.wiki/w/images/b/ba/Rakish_Audacity_Icon.webp" to R.drawable.icbg_rakish_audacity, - "https://bg3.wiki/w/images/4/4d/Action_Surge_Icon.webp" to R.drawable.icbg_action_surge_icon, - "https://bg3.wiki/w/images/a/a6/Lever_Handle_Unfaded_Icon.png" to R.drawable.icbg_lever_handle_unfaded_icon, - "https://bg3.wiki/w/images/a/a5/Pouch_A_Unfaded_Icon.webp" to R.drawable.icbg_pouch_a_unfaded_icon, - "https://bg3.wiki/w/images/8/8f/Knife_A_Unfaded_Icon.png" to R.drawable.icbg_knife_a_unfaded_icon, - "https://bg3.wiki/w/images/7/78/Studded_Leather_Unfaded_Icon.png" to R.drawable.icbg_studded_leather_unfaded_icon, - "https://bg3.wiki/w/images/3/34/Book_Parchment_A_Unfaded.png" to R.drawable.icbg_book_parchment_a_unfaded, - "https://bg3.wiki/w/images/2/21/Book_Note_H_Unfaded.png" to R.drawable.icbg_book_note_h_unfaded, - "https://bg3.wiki/w/images/7/7b/Book_Grimoire_Unfaded_Icon.png" to R.drawable.icbg_book_grimoire_unfaded_icon, - "https://bg3.wiki/w/images/0/02/Gnome_Cunning_Icon.webp" to R.drawable.icbg_gnome_cunning_icon, - "https://bg3.wiki/w/images/d/d2/Training_in_War_and_Song_Icon.webp" to R.drawable.icbg_training_in_war_and_song_icon, - "https://bg3.wiki/w/images/e/ed/Arcane_Recovery_Icon.webp" to R.drawable.icbg_arcane_recovery_icon, - "https://bg3.wiki/w/images/8/80/Bladesong_Icon.webp" to R.drawable.icbg_bladesong_icon, - "https://bg3.wiki/w/images/f/fd/Booming_Blade_Icon.webp" to R.drawable.icbg_booming_blade_icon, - "https://bg3.wiki/w/images/2/23/Fire_Bolt_Icon.webp" to R.drawable.icbg_fire_bolt_icon, - "https://bg3.wiki/w/images/7/7f/Command_Halt_Icon.webp" to R.drawable.icbg_command_halt_icon, - "https://bg3.wiki/w/images/0/0d/Mage_Armour_Icon.webp" to R.drawable.icbg_mage_armour_icon, - "https://bg3.wiki/w/images/1/17/Ice_Knife_Icon.webp" to R.drawable.icbg_ice_knife_icon, - "https://bg3.wiki/w/images/8/8d/Disguise_Self_Icon.webp" to R.drawable.icbg_disguise_self_icon, - "https://bg3.wiki/w/images/d/d4/Magic_Missile_Icon.webp" to R.drawable.icbg_magic_missile_icon, - "https://bg3.wiki/w/images/6/6e/Shadow_Blade_Icon.webp" to R.drawable.icbg_shadow_blade_icon, - "https://bg3.wiki/w/images/b/b9/Wild_Shape_Icon.webp" to R.drawable.icbg_wild_shape_icon, - "https://bg3.wiki/w/images/c/c3/See_Invisibility_Icon.webp" to R.drawable.icbg_see_invisibility_icon, - "https://bg3.wiki/w/images/5/50/Counterspell_Icon.webp" to R.drawable.icbg_counterspell_icon, - "https://bg3.wiki/w/images/0/0a/Unshackling_Strike_Icon.webp" to R.drawable.icbg_unshackling_strike_icon, - "https://bg3.wiki/w/images/7/7f/Remove_Curse_Icon.webp" to R.drawable.icbg_remove_curse_icon, - "https://bg3.wiki/w/images/4/46/Aberrant_Shape_Icon.webp" to R.drawable.icbg_aberrant_shape_icon, - "https://bg3.wiki/w/images/f/f6/Polymorph_Icon.webp" to R.drawable.icbg_polymorph_icon, - "https://bg3.wiki/w/images/8/8b/Dueller%27s_Enthusiasm_Icon.webp" to R.drawable.icbg_dueller_enthusiasm_icon, - "https://bg3.wiki/w/images/f/ff/Camp_Circus_B_Unfaded_Icon.webp" to R.drawable.icbg_camp_circus_b_unfaded_icon, - "https://bg3.wiki/w/images/f/f2/Camp_Aristocrat_Unfaded_Icon.webp" to R.drawable.icbg_camp_aristocrat_unfaded_icon, - "https://bg3.wiki/w/images/1/1d/Camp_Rich_C_Red_Unfaded_Icon.webp" to R.drawable.icbg_camp_rich_c_red_unfaded_icon, - "https://bg3.wiki/w/images/8/85/Strange_Chunk_of_Amber_Unfaded_Icon.png" to R.drawable.icbg_strange_chunk_of_amber_unfaded_icon, - "https://bg3.wiki/w/images/7/72/Toy_Block_A_Unfaded_Icon.png" to R.drawable.icbg_toy_block_a_unfaded_icon, - "https://bg3.wiki/w/images/f/f5/Keepsake_Locket_A_Unfaded.png" to R.drawable.icbg_keepsake_locket_a_unfaded, - "https://bg3.wiki/w/images/4/4e/Crystal_Fluorite_Shard_Unfaded.png" to R.drawable.icbg_crystal_fluorite_shard_unfaded, - "https://bg3.wiki/w/images/1/1b/Moondrop_Pendant_Unfaded.png" to R.drawable.icbg_moondrop_pendant_unfaded, - "https://bg3.wiki/w/images/4/47/Gortash%27s_Netherstone_Unfaded_Icon.png" to R.drawable.icbg_gortash_netherstone_unfaded_icon, "https://bg3.wiki/w/images/thumb/0/0a/Unshackling_Strike_Icon.webp/144px-Unshackling_Strike_Icon.webp.png" to R.drawable.icbg_unshackling_strike, - "https://bg3.wiki/w/images/thumb/e/e9/Poisoned_Condition_Icon.webp/45px-Poisoned_Condition_Icon.webp.png" to R.drawable.icbg_poisoned_condition_icon, - "https://bg3.wiki/w/images/thumb/0/09/Paralysed_Condition_Icon.webp/45px-Paralysed_Condition_Icon.webp.png" to R.drawable.icbg_paralysed_condition_icon, - "https://bg3.wiki/w/images/thumb/8/8e/Prone_Condition_Icon.webp/38px-Prone_Condition_Icon.webp.png" to R.drawable.icbg_prone_condition_icon, - "https://bg3.wiki/w/images/thumb/6/60/Grappled_Condition_Icon.webp/45px-Grappled_Condition_Icon.webp.png" to R.drawable.icbg_grappled_condition_icon, - "https://bg3.wiki/w/images/thumb/7/70/Blinded_Condition_Icon.webp/38px-Blinded_Condition_Icon.webp.png" to R.drawable.icbg_blinded_condition_icon, - "https://bg3.wiki/w/images/thumb/4/47/Charmed_Condition_Icon.webp/38px-Charmed_Condition_Icon.webp.png" to R.drawable.icbg_charmed_condition_icon, - "https://bg3.wiki/w/images/thumb/7/75/Frightened_Condition_Icon.webp/38px-Frightened_Condition_Icon.webp.png" to R.drawable.icbg_frightened_condition_icon, - "https://bg3.wiki/w/images/thumb/2/20/Restrained_Condition_Icon.webp/45px-Restrained_Condition_Icon.webp.png" to R.drawable.icbg_restrained_condition_icon, - "https://bg3.wiki/w/images/thumb/3/32/Stunned_Condition_Icon.webp/45px-Stunned_Condition_Icon.webp.png" to R.drawable.icbg_stunned_condition_icon, - "https://bg3.wiki/w/images/thumb/9/98/Incapacitated_Condition_Icon.webp/38px-Incapacitated_Condition_Icon.webp.png" to R.drawable.icbg_incapacitated_condition_icon, - "https://bg3.wiki/w/images/thumb/a/a6/Unconscious_Condition_Icon.webp/64px-Unconscious_Condition_Icon.webp.png?20231130005748" to R.drawable.icbg_unconscious_condition_icon, - "https://bg3.wiki/w/images/thumb/d/d7/Invisible_Condition_Icon.webp/45px-Invisible_Condition_Icon.webp.png" to R.drawable.icbg_invisible_condition_icon, - "https://bg3.wiki/w/images/thumb/c/c0/Petrified_Condition_Icon.webp/45px-Petrified_Condition_Icon.webp.png" to R.drawable.icbg_petrified_condition_icon, - "https://bg3.wiki/w/images/thumb/2/2e/Background_Sage_Icon.png/180px-Background_Sage_Icon.png" to R.drawable.icbg_background_sage_icon, - "https://static.wikia.nocookie.net/witcher/images/3/3d/Tw3_weapon_repair_kit_masters.png/revision/latest?cb=20160410121438" to R.drawable.tw_weapon_repair_kit_masters, - "https://static.wikia.nocookie.net/witcher/images/c/c3/Tw3_concealment_kit.png/revision/latest?cb=20170416212412" to R.drawable.tw_concealment_kit, - "https://static.wikia.nocookie.net/forgottenrealms/images/e/ee/Forgery_Kit.png/revision/latest?cb=20231120043151" to R.drawable.tw_forgery_kit, - "https://static.wikia.nocookie.net/witcher/images/1/1d/Tw3_cloth_doll.png/revision/latest?cb=20160519181719" to R.drawable.tw_cloth_doll, - "https://static.wikia.nocookie.net/gensin-impact/images/e/ee/Item_Sentry%27s_Wooden_Whistle.png/revision/latest?cb=20240826125031" to R.drawable.tw_item_sentry_wooden_whistle, - "https://s3.eu-west-2.amazonaws.com/www.partynutters.com/img/va093-frog-toad-deluxe-venetian-mask.jpg" to R.drawable.frog_toad_deluxe_venetian_mask, "https://drive.google.com/uc?export=view&id=15D3Jum_X_nw4tWfbaLbEvhTQQbmYCMwf" to R.drawable.ic_dice_advantage, "https://drive.google.com/uc?export=view&id=17MrL-HAlpqPI5c6APjz5arGYrfma42on" to R.drawable.ic_drive_orc_mask, "https://drive.google.com/uc?export=view&id=1AeSHg792EwVbkjCNjJaqzC4v0uNj9NRn" to R.drawable.ic_drive_fire_starter, @@ -305,13 +247,9 @@ object ImageCache { "https://drive.google.com/uc?export=view&id=1hPiuG7LQc4KVqBfytAXlo0QVLpWwoKdm" to R.drawable.ic_drive_copper_coin_pile, "https://drive.google.com/uc?export=view&id=1N73d_elaDPND3TVN2SgmBGOStSuY1aB9" to R.drawable.ic_drive_silver_coin_pile, "https://drive.google.com/uc?export=view&id=1N-Rp4d8gTctHE5ST2qzYmT-nqoX6iyjg" to R.drawable.ic_drive_electrum_coin_pile, - "https://drive.google.com/uc?export=view&id=1sKiDdIakpe1shE0zi-Ip0CineEe1M2H2" to R.drawable.ic_drive_gold_coin_pile, - "https://drive.google.com/uc?export=view&id=1Sk2-3paCI59ET9k28HSuZaQVcGb90-A_" to R.drawable.icbg_deafened, - "https://drive.google.com/uc?export=view&id=1Amdb2gHrS6SCOa34JlQijWi0u25z62QD" to R.drawable.icbg_green_flame_sword, + "https://drive.google.com/uc?export=view&id=1sKiDdIakpe1shE0zi-Ip0CineEe1M2H2" to R.drawable.ic_drive_gold_coin_pile ) - private val missingUri = mutableSetOf() - fun cache(uri: Uri?): ImageUio = when (uri) { null -> { R.drawable.icbg_generic_darkness_icon.toImage() @@ -323,12 +261,8 @@ object ImageCache { } else -> { - uri.also { - if (missingUri.contains(it).not()) { - Log.v("ImageCache", "$it") - } - missingUri.add(it) - }.toImage() + Log.v("ImageCache", "$uri") + uri.toImage() } } } diff --git a/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/local/AlterationEx.kt b/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/local/AlterationEx.kt index 2f9f1da..13cc816 100644 --- a/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/local/AlterationEx.kt +++ b/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/local/AlterationEx.kt @@ -37,34 +37,22 @@ val List?.mastery: Int } } ?: 0 -val List?.passivesBonus: Int - get() = (if (advantage) 5 else 0) - (if (disadvantage) 5 else 0) - -val List?.isCritical: Boolean - get() = this?.any { it.name == CRITIQUE } == true - -// Force a roll to hit a 1 val List?.fail: Boolean get() = this?.any { it.fail } ?: false -// Force a roll to hit a 20 +val List?.passivesBonus: Int + get() = (if (advantage) 5 else 0) - (if (disadvantage) 5 else 0) + +// force a roll to hit a 20 val List?.critical: Boolean get() = this?.any { it.critical } ?: false -// Add a dice to a critical roll. val Map>.isSavageAttacks: Boolean - get() = this[Property.PHYSICAL_MELEE_DAMAGE]?.any { it.name == SAVAGE_ATTACK } == true + get() = this[Property.PHYSICAL_MELEE_DAMAGE]?.any { it.name == "Attaques sauvages" } == true -// Add a dice to a critical roll. val Map>.isBrutalCritical: Boolean - get() = this[Property.PHYSICAL_MELEE_DAMAGE]?.any { it.name == BRUTAL_CRITICAL } == true + get() = this[Property.PHYSICAL_MELEE_DAMAGE]?.any { it.name == "Critique brutal" } == true -// for attack roll, can crit on an 19 or 20 -val Map>.isImprovedCritical: Boolean - get() = this[Property.PHYSICAL_MELEE_ATTACK]?.any { it.name == IMPROVED_CRITICAL } == true || - this[Property.PHYSICAL_RANGE_ATTACK]?.any { it.name == IMPROVED_CRITICAL } == true - -private const val CRITIQUE = "Critique" -private const val SAVAGE_ATTACK = "Attaques sauvages" -private const val BRUTAL_CRITICAL = "Critique brutal" -private const val IMPROVED_CRITICAL = "Critique amélioré" \ No newline at end of file +// for damage roll, previous attack roll was critical +val Map>.isCritical: Boolean + get() = this[Property.PHYSICAL_MELEE_DAMAGE]?.any { it.name == "Critique" } == true diff --git a/app/src/main/res/drawable/frog_toad_deluxe_venetian_mask.webp b/app/src/main/res/drawable/frog_toad_deluxe_venetian_mask.webp deleted file mode 100644 index cfe8bc6..0000000 Binary files a/app/src/main/res/drawable/frog_toad_deluxe_venetian_mask.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_aberrant_shape_icon.webp b/app/src/main/res/drawable/icbg_aberrant_shape_icon.webp deleted file mode 100644 index 828640e..0000000 Binary files a/app/src/main/res/drawable/icbg_aberrant_shape_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_action_surge_icon.webp b/app/src/main/res/drawable/icbg_action_surge_icon.webp deleted file mode 100644 index df282fa..0000000 Binary files a/app/src/main/res/drawable/icbg_action_surge_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_arcane_recovery_icon.webp b/app/src/main/res/drawable/icbg_arcane_recovery_icon.webp deleted file mode 100644 index 1b208ac..0000000 Binary files a/app/src/main/res/drawable/icbg_arcane_recovery_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_background_sage_icon.webp b/app/src/main/res/drawable/icbg_background_sage_icon.webp deleted file mode 100644 index 697ee23..0000000 Binary files a/app/src/main/res/drawable/icbg_background_sage_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_bladesong_icon.webp b/app/src/main/res/drawable/icbg_bladesong_icon.webp deleted file mode 100644 index 27b392e..0000000 Binary files a/app/src/main/res/drawable/icbg_bladesong_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_blinded_condition_icon.webp b/app/src/main/res/drawable/icbg_blinded_condition_icon.webp deleted file mode 100644 index 1b16324..0000000 Binary files a/app/src/main/res/drawable/icbg_blinded_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_book_grimoire_unfaded_icon.webp b/app/src/main/res/drawable/icbg_book_grimoire_unfaded_icon.webp deleted file mode 100644 index 862d2e7..0000000 Binary files a/app/src/main/res/drawable/icbg_book_grimoire_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_book_note_h_unfaded.webp b/app/src/main/res/drawable/icbg_book_note_h_unfaded.webp deleted file mode 100644 index 543fd68..0000000 Binary files a/app/src/main/res/drawable/icbg_book_note_h_unfaded.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_book_parchment_a_unfaded.webp b/app/src/main/res/drawable/icbg_book_parchment_a_unfaded.webp deleted file mode 100644 index 68ff5d8..0000000 Binary files a/app/src/main/res/drawable/icbg_book_parchment_a_unfaded.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_booming_blade_icon.webp b/app/src/main/res/drawable/icbg_booming_blade_icon.webp deleted file mode 100644 index c598cc5..0000000 Binary files a/app/src/main/res/drawable/icbg_booming_blade_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_camp_aristocrat_unfaded_icon.webp b/app/src/main/res/drawable/icbg_camp_aristocrat_unfaded_icon.webp deleted file mode 100644 index 0a25828..0000000 Binary files a/app/src/main/res/drawable/icbg_camp_aristocrat_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_camp_circus_b_unfaded_icon.webp b/app/src/main/res/drawable/icbg_camp_circus_b_unfaded_icon.webp deleted file mode 100644 index a835d98..0000000 Binary files a/app/src/main/res/drawable/icbg_camp_circus_b_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_camp_rich_c_red_unfaded_icon.webp b/app/src/main/res/drawable/icbg_camp_rich_c_red_unfaded_icon.webp deleted file mode 100644 index cdf1d60..0000000 Binary files a/app/src/main/res/drawable/icbg_camp_rich_c_red_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_charmed_condition_icon.webp b/app/src/main/res/drawable/icbg_charmed_condition_icon.webp deleted file mode 100644 index 0343d88..0000000 Binary files a/app/src/main/res/drawable/icbg_charmed_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_command_halt_icon.webp b/app/src/main/res/drawable/icbg_command_halt_icon.webp deleted file mode 100644 index 9b304eb..0000000 Binary files a/app/src/main/res/drawable/icbg_command_halt_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_counterspell_icon.webp b/app/src/main/res/drawable/icbg_counterspell_icon.webp deleted file mode 100644 index 6d0fb5d..0000000 Binary files a/app/src/main/res/drawable/icbg_counterspell_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_crystal_fluorite_shard_unfaded.webp b/app/src/main/res/drawable/icbg_crystal_fluorite_shard_unfaded.webp deleted file mode 100644 index 4a5066b..0000000 Binary files a/app/src/main/res/drawable/icbg_crystal_fluorite_shard_unfaded.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_deafened.webp b/app/src/main/res/drawable/icbg_deafened.webp deleted file mode 100644 index 9bda63a..0000000 Binary files a/app/src/main/res/drawable/icbg_deafened.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_disguise_self_icon.webp b/app/src/main/res/drawable/icbg_disguise_self_icon.webp deleted file mode 100644 index 2ae4e8c..0000000 Binary files a/app/src/main/res/drawable/icbg_disguise_self_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_dueller_enthusiasm_icon.webp b/app/src/main/res/drawable/icbg_dueller_enthusiasm_icon.webp deleted file mode 100644 index 4c3443c..0000000 Binary files a/app/src/main/res/drawable/icbg_dueller_enthusiasm_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_fire_bolt_icon.webp b/app/src/main/res/drawable/icbg_fire_bolt_icon.webp deleted file mode 100644 index 8bba6c3..0000000 Binary files a/app/src/main/res/drawable/icbg_fire_bolt_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_frightened_condition_icon.webp b/app/src/main/res/drawable/icbg_frightened_condition_icon.webp deleted file mode 100644 index 0fade62..0000000 Binary files a/app/src/main/res/drawable/icbg_frightened_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_gnome_cunning_icon.webp b/app/src/main/res/drawable/icbg_gnome_cunning_icon.webp deleted file mode 100644 index 9c570c8..0000000 Binary files a/app/src/main/res/drawable/icbg_gnome_cunning_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_gortash_netherstone_unfaded_icon.webp b/app/src/main/res/drawable/icbg_gortash_netherstone_unfaded_icon.webp deleted file mode 100644 index 7d83e3a..0000000 Binary files a/app/src/main/res/drawable/icbg_gortash_netherstone_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_grappled_condition_icon.webp b/app/src/main/res/drawable/icbg_grappled_condition_icon.webp deleted file mode 100644 index 75953f0..0000000 Binary files a/app/src/main/res/drawable/icbg_grappled_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_green_flame_sword.webp b/app/src/main/res/drawable/icbg_green_flame_sword.webp deleted file mode 100644 index 4078400..0000000 Binary files a/app/src/main/res/drawable/icbg_green_flame_sword.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_ice_knife_icon.webp b/app/src/main/res/drawable/icbg_ice_knife_icon.webp deleted file mode 100644 index 06d7394..0000000 Binary files a/app/src/main/res/drawable/icbg_ice_knife_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_incapacitated_condition_icon.webp b/app/src/main/res/drawable/icbg_incapacitated_condition_icon.webp deleted file mode 100644 index 4240326..0000000 Binary files a/app/src/main/res/drawable/icbg_incapacitated_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_invisible_condition_icon.webp b/app/src/main/res/drawable/icbg_invisible_condition_icon.webp deleted file mode 100644 index f6b4be1..0000000 Binary files a/app/src/main/res/drawable/icbg_invisible_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_keepsake_locket_a_unfaded.webp b/app/src/main/res/drawable/icbg_keepsake_locket_a_unfaded.webp deleted file mode 100644 index cfe889c..0000000 Binary files a/app/src/main/res/drawable/icbg_keepsake_locket_a_unfaded.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_knife_a_unfaded_icon.webp b/app/src/main/res/drawable/icbg_knife_a_unfaded_icon.webp deleted file mode 100644 index b542d59..0000000 Binary files a/app/src/main/res/drawable/icbg_knife_a_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_lever_handle_unfaded_icon.webp b/app/src/main/res/drawable/icbg_lever_handle_unfaded_icon.webp deleted file mode 100644 index 6c16e23..0000000 Binary files a/app/src/main/res/drawable/icbg_lever_handle_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_mage_armour_icon.webp b/app/src/main/res/drawable/icbg_mage_armour_icon.webp deleted file mode 100644 index aae8288..0000000 Binary files a/app/src/main/res/drawable/icbg_mage_armour_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_magic_missile_icon.webp b/app/src/main/res/drawable/icbg_magic_missile_icon.webp deleted file mode 100644 index 19063c4..0000000 Binary files a/app/src/main/res/drawable/icbg_magic_missile_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_moondrop_pendant_unfaded.webp b/app/src/main/res/drawable/icbg_moondrop_pendant_unfaded.webp deleted file mode 100644 index 05f1703..0000000 Binary files a/app/src/main/res/drawable/icbg_moondrop_pendant_unfaded.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_paralysed_condition_icon.webp b/app/src/main/res/drawable/icbg_paralysed_condition_icon.webp deleted file mode 100644 index 76522a3..0000000 Binary files a/app/src/main/res/drawable/icbg_paralysed_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_petrified_condition_icon.webp b/app/src/main/res/drawable/icbg_petrified_condition_icon.webp deleted file mode 100644 index 2043c0c..0000000 Binary files a/app/src/main/res/drawable/icbg_petrified_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_poisoned_condition_icon.webp b/app/src/main/res/drawable/icbg_poisoned_condition_icon.webp deleted file mode 100644 index 8c9cd9b..0000000 Binary files a/app/src/main/res/drawable/icbg_poisoned_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_polymorph_icon.webp b/app/src/main/res/drawable/icbg_polymorph_icon.webp deleted file mode 100644 index cdff626..0000000 Binary files a/app/src/main/res/drawable/icbg_polymorph_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_pouch_a_unfaded_icon.webp b/app/src/main/res/drawable/icbg_pouch_a_unfaded_icon.webp deleted file mode 100644 index ba5660d..0000000 Binary files a/app/src/main/res/drawable/icbg_pouch_a_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_prone_condition_icon.webp b/app/src/main/res/drawable/icbg_prone_condition_icon.webp deleted file mode 100644 index 5d6cf9a..0000000 Binary files a/app/src/main/res/drawable/icbg_prone_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_rakish_audacity.webp b/app/src/main/res/drawable/icbg_rakish_audacity.webp deleted file mode 100644 index b9f710b..0000000 Binary files a/app/src/main/res/drawable/icbg_rakish_audacity.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_remove_curse_icon.webp b/app/src/main/res/drawable/icbg_remove_curse_icon.webp deleted file mode 100644 index 72a1fe5..0000000 Binary files a/app/src/main/res/drawable/icbg_remove_curse_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_restrained_condition_icon.webp b/app/src/main/res/drawable/icbg_restrained_condition_icon.webp deleted file mode 100644 index 62a199b..0000000 Binary files a/app/src/main/res/drawable/icbg_restrained_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_see_invisibility_icon.webp b/app/src/main/res/drawable/icbg_see_invisibility_icon.webp deleted file mode 100644 index 5bc08d7..0000000 Binary files a/app/src/main/res/drawable/icbg_see_invisibility_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_shadow_blade_icon.webp b/app/src/main/res/drawable/icbg_shadow_blade_icon.webp deleted file mode 100644 index 53e1cba..0000000 Binary files a/app/src/main/res/drawable/icbg_shadow_blade_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_strange_chunk_of_amber_unfaded_icon.webp b/app/src/main/res/drawable/icbg_strange_chunk_of_amber_unfaded_icon.webp deleted file mode 100644 index 07d5786..0000000 Binary files a/app/src/main/res/drawable/icbg_strange_chunk_of_amber_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_studded_leather_unfaded_icon.webp b/app/src/main/res/drawable/icbg_studded_leather_unfaded_icon.webp deleted file mode 100644 index d6d12e7..0000000 Binary files a/app/src/main/res/drawable/icbg_studded_leather_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_stunned_condition_icon.webp b/app/src/main/res/drawable/icbg_stunned_condition_icon.webp deleted file mode 100644 index b32c1f4..0000000 Binary files a/app/src/main/res/drawable/icbg_stunned_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_toy_block_a_unfaded_icon.webp b/app/src/main/res/drawable/icbg_toy_block_a_unfaded_icon.webp deleted file mode 100644 index a6749be..0000000 Binary files a/app/src/main/res/drawable/icbg_toy_block_a_unfaded_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_training_in_war_and_song_icon.webp b/app/src/main/res/drawable/icbg_training_in_war_and_song_icon.webp deleted file mode 100644 index 12c8b4e..0000000 Binary files a/app/src/main/res/drawable/icbg_training_in_war_and_song_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_unconscious_condition_icon.webp b/app/src/main/res/drawable/icbg_unconscious_condition_icon.webp deleted file mode 100644 index e2fde46..0000000 Binary files a/app/src/main/res/drawable/icbg_unconscious_condition_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_unshackling_strike_icon.webp b/app/src/main/res/drawable/icbg_unshackling_strike_icon.webp deleted file mode 100644 index 7632537..0000000 Binary files a/app/src/main/res/drawable/icbg_unshackling_strike_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/icbg_wild_shape_icon.webp b/app/src/main/res/drawable/icbg_wild_shape_icon.webp deleted file mode 100644 index d8f3340..0000000 Binary files a/app/src/main/res/drawable/icbg_wild_shape_icon.webp and /dev/null differ diff --git a/app/src/main/res/drawable/im_nam.webp b/app/src/main/res/drawable/im_nam.webp deleted file mode 100644 index b126536..0000000 Binary files a/app/src/main/res/drawable/im_nam.webp and /dev/null differ diff --git a/app/src/main/res/drawable/tw_cloth_doll.webp b/app/src/main/res/drawable/tw_cloth_doll.webp deleted file mode 100644 index c13d385..0000000 Binary files a/app/src/main/res/drawable/tw_cloth_doll.webp and /dev/null differ diff --git a/app/src/main/res/drawable/tw_concealment_kit.webp b/app/src/main/res/drawable/tw_concealment_kit.webp deleted file mode 100644 index 8140e9e..0000000 Binary files a/app/src/main/res/drawable/tw_concealment_kit.webp and /dev/null differ diff --git a/app/src/main/res/drawable/tw_forgery_kit.webp b/app/src/main/res/drawable/tw_forgery_kit.webp deleted file mode 100644 index d4c5930..0000000 Binary files a/app/src/main/res/drawable/tw_forgery_kit.webp and /dev/null differ diff --git a/app/src/main/res/drawable/tw_item_sentry_wooden_whistle.webp b/app/src/main/res/drawable/tw_item_sentry_wooden_whistle.webp deleted file mode 100644 index 4c9ee4a..0000000 Binary files a/app/src/main/res/drawable/tw_item_sentry_wooden_whistle.webp and /dev/null differ diff --git a/app/src/main/res/drawable/tw_weapon_repair_kit_masters.webp b/app/src/main/res/drawable/tw_weapon_repair_kit_masters.webp deleted file mode 100644 index 1439f4e..0000000 Binary files a/app/src/main/res/drawable/tw_weapon_repair_kit_masters.webp and /dev/null differ diff --git a/settings.gradle.kts b/settings.gradle.kts index c3e15c8..6cb3e50 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,6 +6,10 @@ pluginManagement { } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.6.0" +} + dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories {