From 78701b5d6ae9f1e54cdc4aea52158dc47def5c55 Mon Sep 17 00:00:00 2001 From: "Andres Gomez, Thomas (ITDV RL)" Date: Wed, 29 May 2024 15:37:51 +0200 Subject: [PATCH] Add icone to spells --- .../pixelized/rplexicon/data/model/Spell.kt | 3 ++ .../data/parser/spell/SpellBookParser.kt | 18 +++++++++++- .../character/composable/actions/SpellItem.kt | 28 ++++++++++++------- .../preview/rememberSpellListStatePreview.kt | 11 ++++++-- .../character/factory/SpellUioFactory.kt | 5 +++- 5 files changed, 50 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt index 1c12576..fc66bd0 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt @@ -1,6 +1,9 @@ package com.pixelized.rplexicon.data.model +import android.net.Uri + data class Spell( + val icon: Uri?, val name: String, val school: School, val level: Int, diff --git a/app/src/main/java/com/pixelized/rplexicon/data/parser/spell/SpellBookParser.kt b/app/src/main/java/com/pixelized/rplexicon/data/parser/spell/SpellBookParser.kt index 228cdc9..7589e63 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/parser/spell/SpellBookParser.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/parser/spell/SpellBookParser.kt @@ -1,11 +1,14 @@ package com.pixelized.rplexicon.data.parser.spell import android.util.Log +import androidx.core.net.toUri import com.google.api.services.sheets.v4.model.ValueRange import com.pixelized.rplexicon.data.model.Spell import com.pixelized.rplexicon.data.parser.column import com.pixelized.rplexicon.data.parser.parserScope import com.pixelized.rplexicon.utilitary.exceptions.IncompatibleSheetStructure +import com.pixelized.rplexicon.utilitary.extentions.local.icon +import com.pixelized.rplexicon.utilitary.extentions.uri import javax.inject.Inject class SpellBookParser @Inject constructor() { @@ -24,6 +27,7 @@ class SpellBookParser @Inject constructor() { val range = row.parse(column = RANGE) val requirement = row.parse(column = REQUIREMENT) val duration = row.parse(column = DURATION) + val icon = row.parseUri(column = ICON) if (name != null && level != null && school != null @@ -33,6 +37,7 @@ class SpellBookParser @Inject constructor() { && duration != null ) { val spell = Spell( + icon = icon, name = name, level = level, school = school, @@ -66,8 +71,19 @@ class SpellBookParser @Inject constructor() { private val REQUIREMENT = column("Composantes") private val DURATION = column("Durée") private val RITUAL = column("Rituel") + private val ICON = column("Icone") private val COLUMNS - get() = listOf(NAME, LEVEL, SCHOOL, CASTING_TIME, RANGE, REQUIREMENT, DURATION, RITUAL) + get() = listOf( + NAME, + LEVEL, + SCHOOL, + CASTING_TIME, + RANGE, + REQUIREMENT, + DURATION, + RITUAL, + ICON + ) } } \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SpellItem.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SpellItem.kt index a0ae022..c678396 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SpellItem.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SpellItem.kt @@ -2,6 +2,7 @@ package com.pixelized.rplexicon.ui.screens.character.composable.actions import android.content.res.Configuration.UI_MODE_NIGHT_NO import android.content.res.Configuration.UI_MODE_NIGHT_YES +import android.net.Uri import androidx.annotation.DrawableRes import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable @@ -14,7 +15,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.minimumInteractiveComponentSize -import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Surface @@ -23,7 +23,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight @@ -32,15 +32,19 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp +import androidx.core.net.toUri import com.pixelized.rplexicon.R import com.pixelized.rplexicon.data.model.Spell +import com.pixelized.rplexicon.ui.composable.AsyncImage import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.utilitary.extentions.local.icon +import com.pixelized.rplexicon.utilitary.extentions.uri @Stable data class SpellUio( - @DrawableRes val icon: Int, + val icon: Uri?, + val school: Spell.School, val name: String, val translated: String?, val castingTime: String, @@ -74,12 +78,13 @@ fun Spell( .minimumInteractiveComponentSize() .padding(paddingValues = padding) .then(other = modifier), - horizontalArrangement = Arrangement.spacedBy(space = 12.dp), + horizontalArrangement = Arrangement.spacedBy(space = 8.dp), verticalAlignment = Alignment.CenterVertically, ) { - Icon( - modifier = Modifier.size(size = 28.dp), - painter = painterResource(id = spell.icon), + AsyncImage( + modifier = Modifier.size(size = 36.dp), + model = spell.icon ?: spell.school.icon.uri.toUri(), + colorFilter = if (spell.icon == null) ColorFilter.tint(MaterialTheme.colorScheme.onSurface) else null, contentDescription = null, ) @@ -223,7 +228,8 @@ private fun SpellPreview( private class SpellPreviewProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( SpellUio( - icon = Spell.School.EVOCATION.icon, + icon = null, + school = Spell.School.EVOCATION, name = "Trait de feu", translated = "Fire Bolt", castingTime = "1 action", @@ -241,7 +247,8 @@ private class SpellPreviewProvider : PreviewParameterProvider { ritual = false, ), SpellUio( - icon = Spell.School.ENCHANTMENT.icon, + icon = null, + school = Spell.School.ENCHANTMENT, name = "Moquerie cruelle", translated = "Vicious Mockery", castingTime = "1 action", @@ -256,7 +263,8 @@ private class SpellPreviewProvider : PreviewParameterProvider { ritual = false, ), SpellUio( - icon = Spell.School.EVOCATION.icon, + icon = null, + school = Spell.School.EVOCATION, name = "Soins", translated = "Cure Wounds", castingTime = "1 action", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellListStatePreview.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellListStatePreview.kt index acfe867..40fb209 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellListStatePreview.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellListStatePreview.kt @@ -5,11 +5,13 @@ import androidx.compose.runtime.Stable import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.core.net.toUri import com.pixelized.rplexicon.R import com.pixelized.rplexicon.data.model.Spell import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellHeaderUio import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellUio import com.pixelized.rplexicon.utilitary.extentions.local.icon +import com.pixelized.rplexicon.utilitary.extentions.uri @Stable @Composable @@ -21,7 +23,8 @@ fun rememberSpellListStatePreview(): State